diff options
author | Andrew Haley <aph@redhat.com> | 2016-09-30 16:24:48 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2016-09-30 16:24:48 +0000 |
commit | 07b78716af6a9d7c9fd1e94d9baf94a52c873947 (patch) | |
tree | 3f22b3241c513ad168c8353805614ae1249410f4 /libjava/classpath/javax/swing/plaf | |
parent | eae993948bae8b788c53772bcb9217c063716f93 (diff) | |
download | gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.zip gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.gz gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.bz2 |
Makefile.def: Remove libjava.
2016-09-30 Andrew Haley <aph@redhat.com>
* Makefile.def: Remove libjava.
* Makefile.tpl: Likewise.
* Makefile.in: Regenerate.
* configure.ac: Likewise.
* configure: Likewise.
* gcc/java: Remove.
* libjava: Likewise.
From-SVN: r240662
Diffstat (limited to 'libjava/classpath/javax/swing/plaf')
205 files changed, 0 insertions, 85816 deletions
diff --git a/libjava/classpath/javax/swing/plaf/ActionMapUIResource.java b/libjava/classpath/javax/swing/plaf/ActionMapUIResource.java deleted file mode 100644 index 07292fe..0000000 --- a/libjava/classpath/javax/swing/plaf/ActionMapUIResource.java +++ /dev/null @@ -1,62 +0,0 @@ -/* ActionMapUIResource.java -- - Copyright (C) 2002, 2003 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.plaf; - -import javax.swing.ActionMap; - - -/** - * An <code>ActionMap</code> that implements the {@link UIResource} - * interface to indicate that it belongs to a pluggable - * LookAndFeel. - * - * @see javax.swing.ActionMap - * - * @author Andrew Selkirk - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class ActionMapUIResource extends ActionMap implements UIResource -{ - /** - * Constructs a new ActionMapUIResource. - */ - public ActionMapUIResource() - { - /* The constructor does nothing. */ - } -} diff --git a/libjava/classpath/javax/swing/plaf/BorderUIResource.java b/libjava/classpath/javax/swing/plaf/BorderUIResource.java deleted file mode 100644 index 1742494..0000000 --- a/libjava/classpath/javax/swing/plaf/BorderUIResource.java +++ /dev/null @@ -1,930 +0,0 @@ -/* BorderUIResource.java - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Insets; -import java.io.Serializable; - -import javax.swing.Icon; -import javax.swing.border.BevelBorder; -import javax.swing.border.Border; -import javax.swing.border.CompoundBorder; -import javax.swing.border.EmptyBorder; -import javax.swing.border.EtchedBorder; -import javax.swing.border.LineBorder; -import javax.swing.border.MatteBorder; -import javax.swing.border.TitledBorder; - -/** - * A wrapper for {@link javax.swing.border.Border} that also - * implements the {@link UIResource} marker interface. This is useful - * for implementing pluggable look-and-feels: When switching the - * current LookAndFeel, only those borders are replaced that are - * marked as {@link UIResource}. For this reason, a look-and-feel - * should always install borders that implement - * <code>UIResource</code>, such as the borders provided by this - * class. - * - * @serial - * @serialField delegate Border the <code>Border</code> wrapped - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class BorderUIResource implements Border, UIResource, Serializable -{ - /** - * Verified using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -3440553684010079691L; - - - /** - * A shared instance of an {@link EtchedBorderUIResource}, or - * <code>null</code> if the {@link #getEtchedBorderUIResource()} - * method has not yet been called. - */ - private static Border etchedBorderUIResource; - - - /** - * A shared instance of a {@link BevelBorderUIResource} whose - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#LOWERED}, or <code>null</code> if - * the {@link #getLoweredBevelBorderUIResource()} has not yet been - * called. - */ - private static Border loweredBevelBorderUIResource; - - - /** - * A shared instance of a {@link BevelBorderUIResource} whose - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#RAISED}, or <code>null</code> if - * the {@link #getRaisedBevelBorderUIResource()} has not yet been - * called. - */ - private static Border raisedBevelBorderUIResource; - - - /** - * A shared instance of a {@link LineBorderUIResource} for - * a one-pixel thick black line, or <code>null</code> if - * the {@link #getBlackLineBorderUIResource()} has not yet been - * called. - */ - private static Border blackLineBorderUIResource; - - - /** - * Returns a shared instance of an etched border which also - * is marked as an {@link UIResource}. - * - * @see javax.swing.border.EtchedBorder - */ - public static Border getEtchedBorderUIResource() - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (etchedBorderUIResource == null) - etchedBorderUIResource = new EtchedBorderUIResource(); - return etchedBorderUIResource; - } - - - /** - * Returns a shared instance of {@link BevelBorderUIResource} whose - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#LOWERED}. - * - * @see javax.swing.border.BevelBorder - */ - public static Border getLoweredBevelBorderUIResource() - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (loweredBevelBorderUIResource == null) - loweredBevelBorderUIResource = new BevelBorderUIResource( - BevelBorder.LOWERED); - return loweredBevelBorderUIResource; - } - - - /** - * Returns a shared instance of {@link BevelBorderUIResource} whose - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#RAISED}. - * - * @see javax.swing.border.BevelBorder - */ - public static Border getRaisedBevelBorderUIResource() - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (raisedBevelBorderUIResource == null) - raisedBevelBorderUIResource = new BevelBorderUIResource( - BevelBorder.RAISED); - return raisedBevelBorderUIResource; - } - - - /** - * Returns a shared instance of {@link LineBorderUIResource} for - * a black, one-pixel width border. - * - * @see javax.swing.border.LineBorder - */ - public static Border getBlackLineBorderUIResource() - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (blackLineBorderUIResource == null) - blackLineBorderUIResource = new LineBorderUIResource(Color.black); - return blackLineBorderUIResource; - } - - - /** - * The wrapped border. - */ - private Border delegate; - - - /** - * Constructs a <code>BorderUIResource</code> for wrapping - * a <code>Border</code> object. - * - * @param delegate the border to be wrapped. - */ - public BorderUIResource(Border delegate) - { - if (delegate == null) - throw new IllegalArgumentException(); - - this.delegate = delegate; - } - - - /** - * Paints the border around an enclosed component by calling - * the <code>paintBorder</code> method of the wrapped delegate. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - delegate.paintBorder(c, g, x, y, width, height); - } - - - /** - * Measures the width of this border by calling the - * <code>getBorderInsets</code> method of the wrapped - * delegate. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - */ - public Insets getBorderInsets(Component c) - { - return delegate.getBorderInsets(c); - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting by calling the <code>isBorderOpaque</code> - * method of the wrapped delegate. - * - * @return <code>true</code> if the border is fully opaque, or - * <code>false</code> if some pixels of the background - * can shine through the border. - */ - public boolean isBorderOpaque() - { - return delegate.isBorderOpaque(); - } - - - /** - * A {@link javax.swing.border.BevelBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class BevelBorderUIResource - extends BevelBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = -1275542891108351642L; - - /** - * Constructs a BevelBorderUIResource whose colors will be derived - * from the background of the enclosed component. The background - * color is retrieved each time the border is painted, so a border - * constructed by this method will automatically reflect a change - * to the component’s background color. - * - * <p><img src="../border/doc-files/BevelBorder-1.png" - * width="500" height="150" - * alt="[An illustration showing raised and lowered BevelBorders]" /></p> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link javax.swing.border.BevelBorder#RAISED} - * or {@link javax.swing.border.BevelBorder#LOWERED}. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - */ - public BevelBorderUIResource(int bevelType) - { - super(bevelType); - } - - - /** - * Constructs a BevelBorderUIResource given its appearance type - * and two colors for its highlight and shadow. - * - * <p><img src="../border/doc-files/BevelBorder-2.png" width="500" - * height="150" alt="[An illustration showing BevelBorders that were - * constructed with this method]" /></p> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link javax.swing.border.BevelBorder#RAISED} - * or {@link javax.swing.border.BevelBorder#LOWERED}. - * - * @param highlight the color that will be used for the inner side - * of the highlighted edges (top and left if if - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#RAISED}; bottom and right - * otherwise). The color for the outer side is a brightened - * version of this color. - * - * @param shadow the color that will be used for the outer side of - * the shadowed edges (bottom and right if - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#RAISED}; top and left - * otherwise). The color for the inner side is a brightened - * version of this color. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - * - * @throws NullPointerException if <code>highlight</code> or - * <code>shadow</code> is <code>null</code>. - */ - public BevelBorderUIResource(int bevelType, - Color highlight, - Color shadow) - { - super(bevelType, highlight, shadow); - } - - - /** - * Constructs a BevelBorderUIResource given its appearance type - * and all its colors. - * - * <p><img src="../border/doc-files/BevelBorder-3.png" width="500" - * height="150" alt="[An illustration showing BevelBorders that - * were constructed with this method]" /></p> - * - * @param bevelType the desired appearance of the border. The value - * must be either {@link javax.swing.border.BevelBorder#RAISED} - * or {@link javax.swing.border.BevelBorder#LOWERED}. - * - * @param highlightOuter the color that will be used for the outer - * side of the highlighted edges (top and left if - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#RAISED}; bottom and right - * otherwise). - * - * @param highlightInner the color that will be used for the inner - * side of the highlighted edges. - * - * @param shadowOuter the color that will be used for the outer - * side of the shadowed edges (bottom and right if - * <code>bevelType</code> is {@link - * javax.swing.border.BevelBorder#RAISED}; top and left - * otherwise). - * - * @param shadowInner the color that will be used for the inner - * side of the shadowed edges. - * - * @throws IllegalArgumentException if <code>bevelType</code> has - * an unsupported value. - * - * @throws NullPointerException if one of the passed colors - * is <code>null</code>. - */ - public BevelBorderUIResource(int bevelType, - Color highlightOuter, - Color highlightInner, - Color shadowOuter, - Color shadowInner) - { - super(bevelType, - highlightOuter, highlightInner, - shadowOuter, shadowInner); - } - } - - - /** - * A {@link javax.swing.border.CompoundBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class CompoundBorderUIResource - extends CompoundBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = 7550017084975167341L; - - /** - * Constructs a CompoundBorderUIResource with the specified inside - * and outside borders. - * - * @param outsideBorder the outside border, which is painted to the - * outside of both <code>insideBorder</code> and the enclosed - * component. It is acceptable to pass <code>null</code>, in - * which case no outside border is painted. - * - * @param insideBorder the inside border, which is painted to - * between <code>outsideBorder</code> and the enclosed - * component. It is acceptable to pass <code>null</code>, in - * which case no inside border is painted. - */ - public CompoundBorderUIResource(Border outsideBorder, - Border insideBorder) - { - super(outsideBorder, insideBorder); - } - } - - - /** - * An {@link javax.swing.border.EmptyBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * <p><img src="../border/doc-files/EmptyBorder-1.png" - * width="290" height="200" - * alt="[An illustration of EmptyBorder]" /></p> - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class EmptyBorderUIResource - extends EmptyBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = -4914187529340071708L; - - /** - * Constructs an empty border given the number of pixels required - * on each side. - * - * @param top the number of pixels that the border will need - * for its top edge. - * - * @param left the number of pixels that the border will need - * for its left edge. - * - * @param bottom the number of pixels that the border will need - * for its bottom edge. - * - * @param right the number of pixels that the border will need - * for its right edge. - */ - public EmptyBorderUIResource(int top, int left, int bottom, int right) - { - super(top, left, bottom, right); - } - - - /** - * Constructs an empty border given the number of pixels required - * on each side, passed in an Insets object. - * - * @param insets the Insets for the new border. - */ - public EmptyBorderUIResource(Insets insets) - { - super(insets); - } - } - - - /** - * An {@link javax.swing.border.EtchedBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * <p><img src="../border/doc-files/EtchedBorder-1.png" width="500" - * height="200" alt="[An illustration of the two EtchedBorder - * variants]" /></p> - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class EtchedBorderUIResource - extends EtchedBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = -8186391754165296656L; - - /** - * Constructs an EtchedBorderUIResource that appears lowered into - * the surface. The colors will be derived from the background - * color of the enclosed Component when the border gets painted. - */ - public EtchedBorderUIResource() - { - super(); - } - - - /** - * Constructs an EtchedBorderUIResource with the specified - * appearance. The colors will be derived from the background - * color of the enclosed Component when the border gets painted. - * - * <p><img src="../border/doc-files/EtchedBorder-1.png" - * width="500" height="200" alt="[An illustration of the two - * EtchedBorder variants]" /></p> - * - * @param etchType the desired appearance of the border. The value - * must be either {@link javax.swing.border.EtchedBorder#RAISED} - * or {@link javax.swing.border.EtchedBorder#LOWERED}. - * - * @throws IllegalArgumentException if <code>etchType</code> has - * an unsupported value. - */ - public EtchedBorderUIResource(int etchType) - { - super(etchType); - } - - - /** - * Constructs a lowered EtchedBorderUIResource, explicitly - * selecting the colors that will be used for highlight and - * shadow. - * - * @param highlight the color that will be used for painting - * the highlight part of the border. - * - * @param shadow the color that will be used for painting - * the shadow part of the border. - * - * @see EtchedBorderUIResource#EtchedBorderUIResource(int, Color, Color) - */ - public EtchedBorderUIResource(Color highlight, Color shadow) - { - super(highlight, shadow); - } - - - /** - * Constructs an EtchedBorderUIResource with the specified - * appearance, explicitly selecting the colors that will be used - * for highlight and shadow. - * - * <p><img src="../border/doc-files/EtchedBorder-2.png" width="500" - * height="200" alt="[An illustration that shows which pixels get - * painted in what color]" /></p> - * - * @param etchType the desired appearance of the border. The value - * must be either {@link javax.swing.border.EtchedBorder#RAISED} - * or {@link javax.swing.border.EtchedBorder#LOWERED}. - * - * @param highlight the color that will be used for painting - * the highlight part of the border. - * - * @param shadow the color that will be used for painting - * the shadow part of the border. - * - * @throws IllegalArgumentException if <code>etchType</code> has - * an unsupported value. - */ - public EtchedBorderUIResource(int etchType, - Color highlight, Color shadow) - { - super(etchType, highlight, shadow); - } - } - - - /** - * A {@link javax.swing.border.LineBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * <p><img src="../border/doc-files/LineBorder-1.png" width="500" - * height="200" alt="[An illustration of two LineBorders]" /></p> - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class LineBorderUIResource - extends LineBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = -6171232338180172310L; - - /** - * Constructs a LineBorderUIResource given its color. The border - * will be one pixel thick and have plain corners. - * - * @param color the color for drawing the border. - */ - public LineBorderUIResource(Color color) - { - super(color); - } - - - /** - * Constructs a LineBorder given its color and thickness. The - * border will have plain corners. - * - * @param color the color for drawing the border. - * @param thickness the width of the line in pixels. - */ - public LineBorderUIResource(Color color, int thickness) - { - super(color, thickness); - } - - - /* Note: Since JDK1.3, javax.swing.border.LineBorder also has a - * constructor which accepts a value for the roundedCorners - * property. However, as of JDK1.4.1, the LineBorderUIResource - * subclass does not have a corresponding constructor. - * - * A request for enhancing the Swing API has been filed with Sun: - * http://developer.java.sun.com/developer/bugParade/bugs/4879999.html - */ - } - - - /** - * A {@link javax.swing.border.MatteBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * <p><img src="../border/doc-files/MatteBorder-1.png" width="500" - * height="150" alt="[An illustration of two MatteBorders]" /></p> - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class MatteBorderUIResource - extends MatteBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = -8107923147541851122L; - - /** - * Constructs a MatteBorderUIResource given the width on each side - * and a fill color. - * - * <p><img src="../border/doc-files/MatteBorder-2.png" width="500" - * height="150" alt="[A picture of a MatteBorder made by this - * constructor]" /></p> - * - * @param top the width of the border at its top edge. - * @param left the width of the border at its left edge. - * @param bottom the width of the border at its bottom edge. - * @param right the width of the border at its right edge. - * @param color the color for filling the border. - */ - public MatteBorderUIResource(int top, int left, - int bottom, int right, - Color color) - { - super(top, left, bottom, right, color); - } - - - /** - * Constructs a MatteBorderUIResource given the width on each side - * and an icon for tiling the border area. - * - * <p><img src="../border/doc-files/MatteBorder-4.png" width="500" - * height="150" alt="[A picture of a MatteBorder made by this - * constructor]" /></p> - * - * @param top the width of the border at its top edge. - * @param left the width of the border at its left edge. - * @param bottom the width of the border at its bottom edge. - * @param right the width of the border at its right edge. - * @param tileIcon an icon for tiling the border area. - */ - public MatteBorderUIResource(int top, int left, - int bottom, int right, - Icon tileIcon) - { - super(top, left, bottom, right, tileIcon); - } - - - /** - * Constructs a MatteBorderUIResource given an icon for tiling the - * border area. The icon width is used for the border insets at - * the left and right edge, the icon height for the top and bottom - * edge. - * - * <p><img src="../border/doc-files/MatteBorder-6.png" width="500" - * height="150" alt="[A picture of a MatteBorder made by this - * constructor]" /></p> - * - * @param tileIcon an icon for tiling the border area. - */ - public MatteBorderUIResource(Icon tileIcon) - { - super(tileIcon); - } - } - - - /** - * A {@link javax.swing.border.TitledBorder} that also implements the - * {@link UIResource} marker interface. This is useful for - * implementing pluggable look-and-feels: When switching the current - * LookAndFeel, only those borders are replaced that are marked as - * {@link UIResource}. For this reason, a look-and-feel should - * always install borders that implement <code>UIResource</code>, - * such as the borders provided by this class. - * - * @author Brian Jones (cbj@gnu.org) - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class TitledBorderUIResource - extends TitledBorder - implements UIResource, Serializable - { - private static final long serialVersionUID = 7667113547406407427L; - - /** - * Constructs a TitledBorderUIResource given the text of its title. - * - * @param title the title text, or <code>null</code> to use no - * title text. - */ - public TitledBorderUIResource(String title) - { - super(title); - } - - - /** - * Constructs an initially untitled TitledBorderUIResource - * given another border. - * - * @param border the border underneath the title, or - * <code>null</code> to use a default from - * the current look and feel. - */ - public TitledBorderUIResource(Border border) - { - super(border); - } - - - /** - * Constructs a TitledBorder given its border and title text. - * - * @param border the border underneath the title, or - * <code>null</code> to use a default from - * the current look and feel. - * - * @param title the title text, or <code>null</code> - * to use no title text. - */ - public TitledBorderUIResource(Border border, String title) - { - super(border, title); - } - - - /** - * Constructs a TitledBorderUIResource given its border, title - * text, horizontal alignment, and vertical position. - * - * @param border the border underneath the title, or - * <code>null</code> to use a default - * from the current look and feel. - * - * @param title the title text, or <code>null</code> - * to use no title text. - * - * @param titleJustification the horizontal alignment of the title - * text in relation to the border. The value must be one of - * {@link javax.swing.border.TitledBorder#LEFT}, - * {@link javax.swing.border.TitledBorder#CENTER}, - * {@link javax.swing.border.TitledBorder#RIGHT}, - * {@link javax.swing.border.TitledBorder#LEADING}, - * {@link javax.swing.border.TitledBorder#TRAILING}, or - * {@link javax.swing.border.TitledBorder#DEFAULT_JUSTIFICATION}. - * - * @param titlePosition the vertical position of the title text - * in relation to the border. The value must be one of - * {@link javax.swing.border.TitledBorder#ABOVE_TOP}, - * {@link javax.swing.border.TitledBorder#TOP}, - * {@link javax.swing.border.TitledBorder#BELOW_TOP}, - * {@link javax.swing.border.TitledBorder#ABOVE_BOTTOM}, - * {@link javax.swing.border.TitledBorder#BOTTOM}, - * {@link javax.swing.border.TitledBorder#BELOW_BOTTOM}, - * or {@link javax.swing.border.TitledBorder#DEFAULT_POSITION}. - * - * @throws IllegalArgumentException if <code>titleJustification</code> - * or <code>titlePosition</code> have an unsupported value. - */ - public TitledBorderUIResource(Border border, String title, - int titleJustification, - int titlePosition) - { - super(border, title, titleJustification, titlePosition); - } - - - /** - * Constructs a TitledBorder given its border, title text, - * horizontal alignment, vertical position, and font. - * - * @param border the border underneath the title, or - * <code>null</code> to use a default - * from the current look and feel. - * - * @param title the title text, or <code>null</code> - * to use no title text. - * - * @param titleJustification the horizontal alignment of the title - * text in relation to the border. The value must be one of - * {@link javax.swing.border.TitledBorder#LEFT}, - * {@link javax.swing.border.TitledBorder#CENTER}, - * {@link javax.swing.border.TitledBorder#RIGHT}, - * {@link javax.swing.border.TitledBorder#LEADING}, - * {@link javax.swing.border.TitledBorder#TRAILING}, or - * {@link javax.swing.border.TitledBorder#DEFAULT_JUSTIFICATION}. - * - * @param titlePosition the vertical position of the title text - * in relation to the border. The value must be one of - * {@link javax.swing.border.TitledBorder#ABOVE_TOP}, - * {@link javax.swing.border.TitledBorder#TOP}, - * {@link javax.swing.border.TitledBorder#BELOW_TOP}, - * {@link javax.swing.border.TitledBorder#ABOVE_BOTTOM}, - * {@link javax.swing.border.TitledBorder#BOTTOM}, - * {@link javax.swing.border.TitledBorder#BELOW_BOTTOM}, - * or {@link javax.swing.border.TitledBorder#DEFAULT_POSITION}. - * - * @param titleFont the font for the title text, or <code>null</code> - * to use a default from the current look and feel. - * - * @throws IllegalArgumentException if <code>titleJustification</code> - * or <code>titlePosition</code> have an unsupported value. - */ - public TitledBorderUIResource(Border border, String title, - int titleJustification, - int titlePosition, - Font titleFont) - { - super(border, title, titleJustification, titlePosition, - titleFont); - } - - - /** - * Constructs a TitledBorder given its border, title text, - * horizontal alignment, vertical position, font, and color. - * - * @param border the border underneath the title, or - * <code>null</code> to use a default - * from the current look and feel. - * - * @param title the title text, or <code>null</code> - * to use no title text. - * - * @param titleJustification the horizontal alignment of the title - * text in relation to the border. The value must be one of - * {@link javax.swing.border.TitledBorder#LEFT}, - * {@link javax.swing.border.TitledBorder#CENTER}, - * {@link javax.swing.border.TitledBorder#RIGHT}, - * {@link javax.swing.border.TitledBorder#LEADING}, - * {@link javax.swing.border.TitledBorder#TRAILING}, or - * {@link javax.swing.border.TitledBorder#DEFAULT_JUSTIFICATION}. - * - * @param titlePosition the vertical position of the title text - * in relation to the border. The value must be one of - * {@link javax.swing.border.TitledBorder#ABOVE_TOP}, - * {@link javax.swing.border.TitledBorder#TOP}, - * {@link javax.swing.border.TitledBorder#BELOW_TOP}, - * {@link javax.swing.border.TitledBorder#ABOVE_BOTTOM}, - * {@link javax.swing.border.TitledBorder#BOTTOM}, - * {@link javax.swing.border.TitledBorder#BELOW_BOTTOM}, - * or {@link javax.swing.border.TitledBorder#DEFAULT_POSITION}. - * - * @param titleFont the font for the title text, or <code>null</code> - * to use a default from the current look and feel. - * - * @param titleColor the color for the title text, or <code>null</code> - * to use a default from the current look and feel. - * - * @throws IllegalArgumentException if <code>titleJustification</code> - * or <code>titlePosition</code> have an unsupported value. - */ - public TitledBorderUIResource(Border border, String title, - int titleJustification, int titlePosition, - Font titleFont, Color titleColor) - { - super(border, title, titleJustification, titlePosition, - titleFont, titleColor); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/ButtonUI.java b/libjava/classpath/javax/swing/plaf/ButtonUI.java deleted file mode 100644 index 6910e42..0000000 --- a/libjava/classpath/javax/swing/plaf/ButtonUI.java +++ /dev/null @@ -1,52 +0,0 @@ -/* ButtonUI.java - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JButton</code>. - * - * @see javax.swing.JButton - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ButtonUI extends ComponentUI -{ - // This abstract class does not define any methods of its own. -} diff --git a/libjava/classpath/javax/swing/plaf/ColorChooserUI.java b/libjava/classpath/javax/swing/plaf/ColorChooserUI.java deleted file mode 100644 index e9cb32c..0000000 --- a/libjava/classpath/javax/swing/plaf/ColorChooserUI.java +++ /dev/null @@ -1,58 +0,0 @@ -/* ColorChooserUI.java -- - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JColorChooser</code>. - * - * @see javax.swing.JColorChooser - * - * @author Andrew Selkirk - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ColorChooserUI extends ComponentUI -{ - /** - * Constructs a ColorChooserUI. - */ - public ColorChooserUI() - { - /* The constructor does not do anything. */ - } -} diff --git a/libjava/classpath/javax/swing/plaf/ColorUIResource.java b/libjava/classpath/javax/swing/plaf/ColorUIResource.java deleted file mode 100644 index 3c9db2e..0000000 --- a/libjava/classpath/javax/swing/plaf/ColorUIResource.java +++ /dev/null @@ -1,121 +0,0 @@ -/* ColorUIResource.java - Copyright (C) 2002, 2003, 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.plaf; - -import java.awt.Color; - - -/** - * A Color that is marked as <code>UIResource</code>, which indicates that - * the color has been installed by a pluggable LookAndFeel. Such colors - * are replaced when the LookAndFeel changes. - * - * @see java.awt.Color - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class ColorUIResource extends Color implements UIResource -{ - /** - * Constructs a <code>ColorUIResource</code> using the specified - * red, green, and blue values, which must be given as integers in - * the range of 0-255. The alpha channel value will default to 255, - * meaning that the color is fully opaque. - * - * @param r the red intensity, which must be in the range [0 .. 255]. - * @param g the green intensity, which must be in the range [0 .. 255]. - * @param b the blue intensity, which must be in the range [0 .. 255]. - * - * @throws IllegalArgumentException if any of the values is outside the - * specified range. - */ - public ColorUIResource(int r, int g, int b) - { - super(r, g, b); - } - - - /** - * Constructs a <code>ColorUIResource</code> using the specified - * RGB value. The blue value is in bits 0-7, green in bits 8-15, and - * red in bits 16-23. The other bits are ignored. The alpha value is set - * to 255, meaning that the color is fully opaque. - * - * @param rgb the rgb value, as discussed above. - */ - public ColorUIResource(int rgb) - { - super(rgb); - } - - - /** - * Constructs a <code>ColorUIResource</code> using the specified - * red, green, and blue intensities, which must be given as floats in - * the range of 0-1. The alpha channel value will default to 1.0f, - * meaning that the color is fully opaque. - * - * @param r the red intensity, which must be in the range [0.0 .. 1.0]. - * @param g the green intensity, which must be in the range [0.0 .. 1.0]. - * @param b the blue intensity, which must be in the range [0.0 .. 1.0]. - * - * @throws IllegalArgumentException if any of the values is outside the - * specified range. - */ - public ColorUIResource(float r, float g, float b) - { - super(r, g, b); - } - - - /** - * Constructs a <code>ColorUIResource</code>, using the intensities - * of another color. - * - * @param c the color whose intensities will be considered when - * constructing this <code>ColorUIResource</code> (<code>null</code> - * not permitted). - * - * @throws NullPointerException if <code>c</code> is <code>null</code>. - */ - public ColorUIResource(Color c) - { - super(c.getRGB()); - } -} diff --git a/libjava/classpath/javax/swing/plaf/ComboBoxUI.java b/libjava/classpath/javax/swing/plaf/ComboBoxUI.java deleted file mode 100644 index 0a06d26..0000000 --- a/libjava/classpath/javax/swing/plaf/ComboBoxUI.java +++ /dev/null @@ -1,92 +0,0 @@ -/* ComboBoxUI.java -- - Copyright (C) 2002, 2003, 2006, 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.plaf; - -import javax.swing.JComboBox; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a {@link JComboBox}. - * - * @author Andrew Selkirk - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ComboBoxUI extends ComponentUI -{ - /** - * Constructs a new <code>ComboBoxUI</code>. - */ - public ComboBoxUI() - { - // Nothing to do here. - } - - /** - * Sets the visibility of the popup button. - * - * @param c the <code>JComboBox</code> whose popup - * is shown or hidden. - * - * @param visible <code>true</code> to show the popup, <code>false</code> - * to hide it. - */ - public abstract void setPopupVisible(JComboBox c, boolean visible); - - /** - * Determines whether the popup button is currently visible. - * - * @param c the <code>JComboBox</code> whose popup visibility - * is retrieved. - * - * @return <code>true</code> if the popup button is currently - * visible, <code>false</code> otherwise. - */ - public abstract boolean isPopupVisible(JComboBox c); - - /** - * Determines whether the combo box can receive input focus. - * - * @param c <code>JComboBox</code> whose focus traversability - * is to be retrieved. - * - * @return <code>true</code> if <code>c</code> can receive - * input focus, <code>false</code> otherwise. - */ - public abstract boolean isFocusTraversable(JComboBox c); - -} diff --git a/libjava/classpath/javax/swing/plaf/ComponentInputMapUIResource.java b/libjava/classpath/javax/swing/plaf/ComponentInputMapUIResource.java deleted file mode 100644 index 4553562..0000000 --- a/libjava/classpath/javax/swing/plaf/ComponentInputMapUIResource.java +++ /dev/null @@ -1,68 +0,0 @@ -/* ComponentInputMapUIResource.java -- - Copyright (C) 2002, 2003 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.plaf; - -import javax.swing.ComponentInputMap; -import javax.swing.JComponent; - - -/** - * A <code>ComponentInputMap</code> that implements the {@link UIResource} - * interface to indicate that it belongs to a pluggable - * LookAndFeel. - * - * @see javax.swing.ComponentInputMap - * @see javax.swing.InputMap - * - * @author Andrew Selkirk - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class ComponentInputMapUIResource extends ComponentInputMap - implements UIResource -{ - /** - * Constructs a new <code>ComponentInputMapUIResource</code>. - * - * @param component the <code>JComponent</code> associated with - * this <code>InputMap</code>. - */ - public ComponentInputMapUIResource(JComponent component) - { - super(component); - } -} diff --git a/libjava/classpath/javax/swing/plaf/ComponentUI.java b/libjava/classpath/javax/swing/plaf/ComponentUI.java deleted file mode 100644 index 35f2de3..0000000 --- a/libjava/classpath/javax/swing/plaf/ComponentUI.java +++ /dev/null @@ -1,331 +0,0 @@ -/* ComponentUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; - -/** - * The abstract base class for all delegates that provide the - * pluggable look and feel for Swing components. User applications - * should not need to access this class; it is internal to Swing - * and the look-and-feel implementations. - * - * <p><img src="doc-files/ComponentUI-1.png" width="700" height="550" - * alt="[UML diagram illustrating the architecture for pluggable - * look and feels]" /></p> - * - * <p>Components such as {@link javax.swing.JSlider} do not directly - * implement operations related to the look and feel of the user - * interface, such as painting or layout. Instead, they use a delegate - * object for all such tasks. In the case of <code>JSlider</code>, the - * user interface would be provided by some concrete subclass of - * {@link javax.swing.plaf.SliderUI}. - * - * <p>Soon after its creation, a <code>ComponentUI</code> will be sent - * an {@link #installUI} message. The <code>ComponentUI</code> will - * react by setting properties such as the border or the background - * color of the <code>JComponent</code> for which it provides its - * services. Soon before the end of its lifecycle, the - * <code>ComponentUI</code> will receive an {@link #uninstallUI} - * message, at which time the <code>ComponentUI</code> is expected to - * undo any changes.</p> - * - * <p>Note that the <code>ui</code> of a <code>JComponent</code> - * changes whenever the user switches between look and feels. For - * example, the <code>ui</code> property of a <code>JSlider</code> - * could change from an instance of <code>MetalSliderUI</code> to an - * instance of <code>FooSliderUI</code>. This switch can happen at any - * time, but it will always be performed from inside the Swing thread.</p> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ComponentUI -{ - /** - * Constructs a new UI delegate. - */ - public ComponentUI() - { - // Nothing to do here. - } - - - /** - * Sets up the specified component so it conforms the the design - * guidelines of the implemented look and feel. When the look and - * feel changes, a <code>ComponentUI</code> delegate is created. - * The delegate object then receives an <code>installUI</code> - * message. - * - * <p>This method should perform the following tasks:</p> - * - * <ul> - * <li>Set visual properties such as borders, fonts, colors, or - * icons. However, no change should be performed for those - * properties whose values have been directly set by the client - * application. To allow the distinction, LookAndFeels are expected - * to use values that implement the {@link UIResource} marker - * interface, such as {@link BorderUIResource} or {@link - * ColorUIResource}.</li> - * <li>If necessary, install a {@link java.awt.LayoutManager}.</li> - * <li>Embed custom sub-components. For instance, the UI delegate - * for a {@link javax.swing.JSplitPane} might install a special - * component for the divider.</li> - * <li>Register event listeners.</li> - * <li>Set up properties related to keyborad navigation, such as - * mnemonics or focus traversal policies.</li> - * </ul> - * - * @param c the component for which this delegate will provide - * services. - * - * @see #uninstallUI - * @see javax.swing.JComponent#setUI - * @see javax.swing.JComponent#updateUI - */ - public void installUI(JComponent c) - { - // The default implementation does not change any properties. - } - - - /** - * Puts the specified component into the state it had before - * {@link #installUI} was called. - * - * @param c the component for which this delegate has provided - * services. - * - * @see #installUI - * @see javax.swing.JComponent#setUI - * @see javax.swing.JComponent#updateUI - */ - public void uninstallUI(JComponent c) - { - // The default implementation does not change any properties. - } - - - /** - * Paints the component according to the design guidelines - * of the look and feel. Most subclasses will want to override - * this method. - * - * @param g the graphics for painting. - * - * @param c the component for which this delegate performs - * services. - */ - public void paint(Graphics g, JComponent c) - { - // Nothing is done here. This method is meant to be overridden by - // subclasses. - } - - - /** - * Fills the specified component with its background color - * (unless the <code>opaque</code> property is <code>false</code>) - * before calling {@link #paint}. - * - * <p>It is unlikely that a subclass needs to override this method. - * The actual rendering should be performed by the {@link #paint} - * method. - * - * @param g the graphics for painting. - * - * @param c the component for which this delegate performs - * services. - * - * @see #paint - * @see javax.swing.JComponent#paintComponent - */ - public void update(Graphics g, JComponent c) - { - if (c.isOpaque()) - { - Color oldColor = g.getColor(); - g.setColor(c.getBackground()); - g.fillRect(0, 0, c.getWidth(), c.getHeight()); - g.setColor(oldColor); - } - paint(g, c); - } - - /** - * Determines the preferred size of a component. The default - * implementation returns <code>null</code>, which means that - * <code>c</code>’s layout manager should be asked to - * calculate the preferred size. - * - * @param c the component for which this delegate performs services. - * - * @return the preferred size, or <code>null</code> to indicate that - * <code>c</code>’s layout manager should be asked - * for the preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - return null; - } - - - /** - * Determines the minimum size of a component. The default - * implementation calls {@link #getPreferredSize}, but subclasses - * might want to override this. - * - * @param c the component for which this delegate performs services. - * - * @return the minimum size, or <code>null</code> to indicate that - * <code>c</code>’s layout manager should be asked - * to calculate the minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - - /** - * Determines the maximum size of a component. The default - * implementation calls {@link #getPreferredSize}, but subclasses - * might want to override this. - * - * @param c the component for which this delegate performs services. - * - * @return the maximum size, or <code>null</code> to indicate that - * <code>c</code>’s layout manager should be asked - * to calculate the maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - - /** - * Determines whether a click into the component at a specified - * location is considered as having hit the component. The default - * implementation checks whether the point falls into the - * component’s bounding rectangle. Some subclasses might want - * to override this, for example in the case of a rounded button. - * - * @param c the component for which this delegate performs services. - * - * @param x the x coordinate of the point, relative to the local - * coordinate system of the component. Zero would be be - * component’s left edge, irrespective of the location - * inside its parent. - * - * @param y the y coordinate of the point, relative to the local - * coordinate system of the component. Zero would be be - * component’s top edge, irrespective of the location - * inside its parent. - */ - public boolean contains(JComponent c, int x, int y) - { - /* JComponent.contains calls the ui delegate for hit - * testing. Therefore, endless mutual recursion would result if we - * called c.contains(x, y) here. - * - * The previous Classpath implementation called the deprecated - * method java.awt.Component.inside. In the Sun implementation, it - * can be observed that inside, other than contains, does not call - * the ui delegate. But that inside() behaves different to - * contains() clearly is in violation of the method contract, and - * it is not something that a good implementation should rely upon - * -- even if Classpath ends up being forced to replicate this - * apparent bug of the Sun implementation. - */ - return (x >= 0) && (x < c.getWidth()) - && (y >= 0) && (y < c.getHeight()); - } - - - /** - * Creates a delegate object for the specified component. Users - * should use the <code>createUI</code> method of a suitable - * subclass. The implementation of <code>ComponentUI</code> - * always throws an error. - * - * @param c the component for which a UI delegate is requested. - */ - public static ComponentUI createUI(JComponent c) - { - throw new Error( - "javax.swing.plaf.ComponentUI does not implement createUI; call " - + "createUI on a subclass."); - } - - - /** - * Counts the number of accessible children in the component. The - * default implementation delegates the inquiry to the {@link - * javax.accessibility.AccessibleContext} of <code>c</code>. - * - * @param c the component whose accessible children - * are to be counted. - */ - public int getAccessibleChildrenCount(JComponent c) - { - return c.getAccessibleContext().getAccessibleChildrenCount(); - } - - - /** - * Returns the specified accessible child of the component. The - * default implementation delegates the inquiry to the {@link - * javax.accessibility.AccessibleContext} of <code>c</code>. - * - * @param i the index of the accessible child, starting at zero. - * - * @param c the component whose <code>i</code>-th accessible child - * is requested. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - return c.getAccessibleContext().getAccessibleChild(i); - } -} diff --git a/libjava/classpath/javax/swing/plaf/DesktopIconUI.java b/libjava/classpath/javax/swing/plaf/DesktopIconUI.java deleted file mode 100644 index 676233e..0000000 --- a/libjava/classpath/javax/swing/plaf/DesktopIconUI.java +++ /dev/null @@ -1,56 +0,0 @@ -/* DesktopIconUI.java -- - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a desktop icon. - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class DesktopIconUI extends ComponentUI -{ - /** - * Constructs a new <code>DesktopIconUI</code>. - */ - public DesktopIconUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/DesktopPaneUI.java b/libjava/classpath/javax/swing/plaf/DesktopPaneUI.java deleted file mode 100644 index 3d4cfc8..0000000 --- a/libjava/classpath/javax/swing/plaf/DesktopPaneUI.java +++ /dev/null @@ -1,58 +0,0 @@ -/* DesktopPaneUI.java -- - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JDesktopPane</code>. - * - * @see javax.swing.JDesktopPane - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class DesktopPaneUI extends ComponentUI -{ - /** - * Constructs a new <code>DesktopPaneUI</code>. - */ - public DesktopPaneUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/DimensionUIResource.java b/libjava/classpath/javax/swing/plaf/DimensionUIResource.java deleted file mode 100644 index 618c220..0000000 --- a/libjava/classpath/javax/swing/plaf/DimensionUIResource.java +++ /dev/null @@ -1,66 +0,0 @@ -/* DimensionUIResource.java - Copyright (C) 2002, 2003 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.plaf; - -import java.awt.Dimension; - -/** - * A Dimension that is marked as <code>UIResource</code>, which - * indicates that it has been installed by a pluggable - * LookAndFeel. Such dimensions are replaced when the LookAndFeel - * changes. - * - * @see java.awt.Dimension - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class DimensionUIResource extends Dimension implements UIResource -{ - /** - * Constructs a new DimensionUIResource, given its width and height. - * - * @param width the width in pixels. - * @param height the height in pixels. - */ - public DimensionUIResource(int width, int height) - { - super(width, height); - } -} diff --git a/libjava/classpath/javax/swing/plaf/FileChooserUI.java b/libjava/classpath/javax/swing/plaf/FileChooserUI.java deleted file mode 100644 index fafd21d2..0000000 --- a/libjava/classpath/javax/swing/plaf/FileChooserUI.java +++ /dev/null @@ -1,138 +0,0 @@ -/* FileChooserUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.io.File; - -import javax.swing.JFileChooser; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileView; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JFileChooser</code>. - * - * @see javax.swing.JFileChooser - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class FileChooserUI extends ComponentUI -{ - /** - * Constructs a new <code>FileChooserUI</code>. - */ - public FileChooserUI() - { - // Nothing to do here. - } - - - /** - * Returns a <code>FileFilter</code> that accepts every file. While - * the filtering itself is not specific to any look and feel, the - * text returned by <code>FileFilter.getDescription()</code> need - * not be the same across all look and feels. - * - * @param chooser the <code>JFileChooser</code> for which - * a <code>FileFilter</code> is requested. - * - * @see javax.swing.JFileChooser#getAcceptAllFileFilter - * @see javax.swing.filechooser.FileFilter#getDescription - */ - public abstract FileFilter getAcceptAllFileFilter(JFileChooser chooser); - - - /** - * Returns a view to a file, which is able to retrieve its name, - * icon, and other properties that are relevant for presenting - * the file to the user. - * - * @param chooser the <code>JFileChooser</code> for which - * a <code>FileFilter</code> is requested. - */ - public abstract FileView getFileView(JFileChooser chooser); - - - /** - * Determines which text is appropriate for the approve button - * according to the design guidelines of the implemented - * look and feel. - * - * @param chooser the <code>JFileChooser</code> whose - * button text is requested. - * - * @see javax.swing.JFileChooser#getApproveButtonText - */ - public abstract String getApproveButtonText(JFileChooser chooser); - - - /** - * Determines which text is appropriate for the title bar of a - * <code>JFileChooser</code> according to the design guidelines of - * the implemented look and feel. - * - * @param chooser the <code>JFileChooser</code> whose - * dialog title is requested. - * - * @see javax.swing.JFileChooser#getDialogTitle - */ - public abstract String getDialogTitle(JFileChooser chooser); - - - /** - * Refreshes the currently displayed directory. - * - * @param chooser the <code>JFileChooser</code> whose - * dialog title needs re-scanning. - */ - public abstract void rescanCurrentDirectory(JFileChooser chooser); - - - /** - * Ensures that a specified file is visible in the - * <code>JFileChooser</code> - * - * @param chooser the <code>JFileChooser</code> that - * should display the file <code>file</code>. - * - * @param file the file that needs to be made visible. - */ - public abstract void ensureFileIsVisible(JFileChooser chooser, File file); -} diff --git a/libjava/classpath/javax/swing/plaf/FontUIResource.java b/libjava/classpath/javax/swing/plaf/FontUIResource.java deleted file mode 100644 index c54f987..0000000 --- a/libjava/classpath/javax/swing/plaf/FontUIResource.java +++ /dev/null @@ -1,99 +0,0 @@ -/* FontUIResource.java - Copyright (C) 2002, 2003 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.plaf; - -import java.awt.Font; - - -/** - * A font that is marked as <code>UIResource</code>, which - * indicates that it has been installed by a pluggable - * LookAndFeel. Such dimensions are replaced when the LookAndFeel - * changes. - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class FontUIResource extends Font implements UIResource -{ - /** - * Constructs a new <code>FontUIResource</code> given - * the name, style and size of the font. - * - * @param name the name of the font. A number of - * “logical” names are supported by any Java - * implementation. These are - * <code>“Dialog”</code>, - * <code>“DialogInput”</code>, - * <code>“Monospaced”</code>, - * <code>“Serif”</code>, and - * <code>“SansSerif”</code>. - * - * @param style the style of the font, for instance {@link - * java.awt.Font#BOLD} or {@link java.awt.Font#PLAIN}. - * - * @param size the size of the font in typographic points, for - * instance 10, 12 or 13. Designers of LookAndFeels should be - * aware that some languages (like Japanese and Chinese) have - * glyphs that are too complex to be legible at small point - * sizes. - */ - public FontUIResource(String name, int style, int size) - { - super(name, style, size); - } - - - /** - * Constructs a new <code>FontUIResource</code> given - * an existing font. - * - * @param f the font that serves as a template. - */ - public FontUIResource(Font f) - { - /* This implementation will get rid of many font properties, - * such as skewing, values of multiple master design axes, - * etc., unless they get encoded into the name. It probably - * is not a problem for LookAndFeels because user interfaces - * are usually not very advanced with respect to typography. - */ - super(f.getName(), f.getStyle(), f.getSize()); - } -} diff --git a/libjava/classpath/javax/swing/plaf/IconUIResource.java b/libjava/classpath/javax/swing/plaf/IconUIResource.java deleted file mode 100644 index 48503f8..0000000 --- a/libjava/classpath/javax/swing/plaf/IconUIResource.java +++ /dev/null @@ -1,124 +0,0 @@ -/* IconUIResource.java -- - Copyright (C) 2002, 2003, 2004, 2006, 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.plaf; - -import java.awt.Component; -import java.awt.Graphics; -import java.io.Serializable; - -import javax.swing.Icon; - -/** - * An icon that is marked as <code>UIResource</code>, which - * indicates that it has been installed by a pluggable - * LookAndFeel. Such icons are replaced when the LookAndFeel - * changes. - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class IconUIResource implements Icon, UIResource, Serializable -{ - /** - * Verified using the <code>serialver</code> tool of Sun JDK 1.4.1_01 - * on GNU/Linux 2.4.18. - */ - static final long serialVersionUID = 3327049506004830542L; - - - /** - * The icon that is wrapped by this <code>IconUIResource</code> (never - * <code>null</code>). - */ - private Icon delegate; - - - /** - * Constructs a <code>IconUIResource</code> that wraps another - * icon. All messages are forwarded to the delegate icon. - * - * @param delegate the icon that is wrapped by this - * <code>IconUIResource</code> (<code>null</code> not permitted). - */ - public IconUIResource(Icon delegate) - { - if (delegate == null) - throw new IllegalArgumentException("Null 'delegate' argument."); - this.delegate = delegate; - } - - - /** - * Paints the icon by asking the delegate icon to paint itself. - * - * @param c the Component whose icon is being painted. Some icons - * use this argument to retrieve properties like the - * background color. - * - * @param g the graphics into which the icon will be painted. - * - * @param x the horizontal position of the icon. - * - * @param y the vertical position of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - delegate.paintIcon(c, g, x, y); - } - - - /** - * Returns the width of the icon in pixels. The implementation - * determines and returns the width of the delegate icon. - */ - public int getIconWidth() - { - return delegate.getIconWidth(); - } - - - /** - * Returns the height of the icon in pixels. The implementation - * determines and returns the height of the delegate icon. - */ - public int getIconHeight() - { - return delegate.getIconHeight(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/InputMapUIResource.java b/libjava/classpath/javax/swing/plaf/InputMapUIResource.java deleted file mode 100644 index 0c5f6f9..0000000 --- a/libjava/classpath/javax/swing/plaf/InputMapUIResource.java +++ /dev/null @@ -1,61 +0,0 @@ -/* InputMapUIResource.java -- - Copyright (C) 2002, 2003 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.plaf; - -import javax.swing.InputMap; - - -/** - * An <code>InputMap</code> that is marked as <code>UIResource</code>, - * which indicates that it has been installed by a pluggable - * LookAndFeel. Such dimensions are replaced when the LookAndFeel - * changes. - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class InputMapUIResource extends InputMap implements UIResource -{ - /** - * Constructs a new <code>InputMapUIResource</code>. - */ - public InputMapUIResource() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/InsetsUIResource.java b/libjava/classpath/javax/swing/plaf/InsetsUIResource.java deleted file mode 100644 index d64feb4..0000000 --- a/libjava/classpath/javax/swing/plaf/InsetsUIResource.java +++ /dev/null @@ -1,76 +0,0 @@ -/* InsetsUIResource.java - Copyright (C) 2002, 2003 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.plaf; - -import java.awt.Insets; -import java.io.Serializable; - - -/** - * An <code>Insets</code> that is marked as <code>UIResource</code>, - * which indicates that it has been installed by a pluggable - * LookAndFeel. Such insets are replaced when the LookAndFeel changes. - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class InsetsUIResource extends Insets - implements Cloneable, UIResource, Serializable -{ - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = 5622110143266315421L; - - - /** - * Constructs a new <code>InsetsUIResource</code> given the - * inset at each edge. - * - * @param top the inset at the top, in pixels. - * @param left the inset at the left, in pixels. - * @param bottom the inset at the bottom, in pixels. - * @param right the inset at the right, in pixels. - */ - public InsetsUIResource(int top, int left, int bottom, int right) - { - super(top, left, bottom, right); - } -} diff --git a/libjava/classpath/javax/swing/plaf/InternalFrameUI.java b/libjava/classpath/javax/swing/plaf/InternalFrameUI.java deleted file mode 100644 index 0b2f77c..0000000 --- a/libjava/classpath/javax/swing/plaf/InternalFrameUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* InternalFrameUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JInternalFrame</code>. - * - * @see javax.swing.JInternalFrame - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class InternalFrameUI extends ComponentUI -{ - /** - * Constructs a new <code>InternalFrameUI</code>. - */ - public InternalFrameUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/LabelUI.java b/libjava/classpath/javax/swing/plaf/LabelUI.java deleted file mode 100644 index f4b74d5..0000000 --- a/libjava/classpath/javax/swing/plaf/LabelUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* LabelUI.java - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JLabel</code>. - * - * @see javax.swing.JLabel - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class LabelUI extends ComponentUI -{ - /** - * Constructs a new <code>LabelUI</code>. - */ - public LabelUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/ListUI.java b/libjava/classpath/javax/swing/plaf/ListUI.java deleted file mode 100644 index bdfe4b3..0000000 --- a/libjava/classpath/javax/swing/plaf/ListUI.java +++ /dev/null @@ -1,114 +0,0 @@ -/* ListUI.java -- - Copyright (C) 2002, 2003, 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.plaf; - -import java.awt.Point; -import java.awt.Rectangle; - -import javax.swing.JList; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JList</code>. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ListUI extends ComponentUI -{ - /** - * Constructs a new <code>ListUI</code>. - */ - public ListUI() - { - // Nothing to do here. - } - - - /** - * Determines the cell index which is the closest to the specified - * location. The find out whether the returned cell actually - * contains the location, the caller should also use {@link - * #getCellBounds}. - * - * @param list the <code>JList</code> for which this delegate object - * provides the pluggable user interface. - * - * @param location a point in the <code>JList</code> coordinate - * system. - * - * @return the index of the closest cell, or -1 if the list model - * is empty. - */ - public abstract int locationToIndex(JList list, Point location); - - - /** - * Determines the location of the specified cell. - * - * @param list the <code>JList</code> for which this delegate object - * provides the pluggable user interface. - * - * @param index the zero-based index of the cell whose location shall be - * determined. - * - * @return the position of the top left corner of the cell in the - * <code>JList</code> coordinate system, or <code>null</code> - * if <code>cell</code> does not designate a valid cell. - */ - public abstract Point indexToLocation(JList list, int index); - - - /** - * Determines the bounding box of the rectangle spanned by - * two list indices. - * - * @param list the <code>JList</code> for which this delegate object - * provides the pluggable user interface. - * - * @param index1 the zero-based index of the first cell. - * - * @param index2 the zero-based index of the second cell. - * - * @return the spanned rectangle, or <code>null</code> if either - * <code>index1</code> or <code>index2</code> does not - * designate a valid cell. - */ - public abstract Rectangle getCellBounds(JList list, - int index1, int index2); -} diff --git a/libjava/classpath/javax/swing/plaf/MenuBarUI.java b/libjava/classpath/javax/swing/plaf/MenuBarUI.java deleted file mode 100644 index 2c82adf..0000000 --- a/libjava/classpath/javax/swing/plaf/MenuBarUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* MenuBarUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JMenuBar</code>. - * - * @see javax.swing.JMenuBar - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class MenuBarUI extends ComponentUI -{ - /** - * Constructs a new <code>MenuBarUI</code>. - */ - public MenuBarUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/MenuItemUI.java b/libjava/classpath/javax/swing/plaf/MenuItemUI.java deleted file mode 100644 index 83ad52f..0000000 --- a/libjava/classpath/javax/swing/plaf/MenuItemUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* MenuItemUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JMenuItem</code>. - * - * @see javax.swing.JMenuItem - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class MenuItemUI extends ButtonUI -{ - /** - * Constructs a new <code>MenuItemUI</code>. - */ - public MenuItemUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/OptionPaneUI.java b/libjava/classpath/javax/swing/plaf/OptionPaneUI.java deleted file mode 100644 index 13d1caa..0000000 --- a/libjava/classpath/javax/swing/plaf/OptionPaneUI.java +++ /dev/null @@ -1,75 +0,0 @@ -/* OptionPaneUI.java - Copyright (C) 2002, 2003 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.plaf; - -import javax.swing.JOptionPane; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JOptionPane</code>. - * - * @see javax.swing.JOptionPane - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class OptionPaneUI - extends ComponentUI -{ - /** - * Gives keyboard input focus to the component that represents - * the default value. - * - * @param pane the <code>JOptionPane</code> for which this delegate - * object provides the pluggable user interface. - */ - public abstract void selectInitialValue(JOptionPane pane); - - - /** - * Determines whether the user has provided custom components - * for the options or the message. - * - * @param pane the <code>JOptionPane</code> for which this delegate - * object provides the pluggable user interface. - * - * @return <code>true</code> if the user has supplied any custom - * components; <code>false</code> if all components are - * provided by Swing or a LookAndFeel. - */ - public abstract boolean containsCustomComponents(JOptionPane pane); -} diff --git a/libjava/classpath/javax/swing/plaf/PanelUI.java b/libjava/classpath/javax/swing/plaf/PanelUI.java deleted file mode 100644 index 12a6f52..0000000 --- a/libjava/classpath/javax/swing/plaf/PanelUI.java +++ /dev/null @@ -1,58 +0,0 @@ -/* PanelUI.java - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JPanel</code>. - * - * @see javax.swing.JPanel - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class PanelUI extends ComponentUI -{ - /** - * Constructs a new <code>PanelUI</code>. - */ - public PanelUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/PopupMenuUI.java b/libjava/classpath/javax/swing/plaf/PopupMenuUI.java deleted file mode 100644 index de351f2..0000000 --- a/libjava/classpath/javax/swing/plaf/PopupMenuUI.java +++ /dev/null @@ -1,117 +0,0 @@ -/* PopupMenuUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.event.MouseEvent; - -import javax.swing.JPopupMenu; -import javax.swing.Popup; -import javax.swing.PopupFactory; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JPopupMenu</code>. - * - * @see javax.swing.JPopupMenu - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class PopupMenuUI extends ComponentUI -{ - /** - * Constructs a new <code>PopupMenuUI</code>. - */ - public PopupMenuUI() - { - // Nothing to do here. - } - - - /** - * Tests whether or not a mouse event triggers a popup menu. - * - * <p>The default implementation calls - * <code>event.isPopupTrigger()</code>, which checks for the gesture - * that is common for the platform on which the application runs. If - * a look and feel wants to employ non-standard conventions for - * triggering a popup menu, it can override this method. - * - * @param event the event to check. - * - * @return <code>true</code> if the event triggers a popup menu; - * <code>false</code> otherwise. - * - * @since 1.3 - */ - public boolean isPopupTrigger(MouseEvent event) - { - return event.isPopupTrigger(); - } - - - /** - * Creates a <code>Popup</code> for displaying the popup menu. The - * default implementation uses the {@link javax.swing.PopupFactory} - * for retrieving a suitable <code>Popup</code>, but subclasses - * might want to override this method if a LookAndFeel needs special - * Popups. - * - * @param popup the <code>JPopupMenu</code> for whose display - * a <code>Popup</code> is needed. - * - * @param x the horizontal position where the popup will be - * displayed. - * - * @param y the vertical position where the popup will be - * displayed. - * - * @return a <code>Popup</code> for showing and hiding - * the menu. - * - * @since 1.4 - */ - public Popup getPopup(JPopupMenu popup, int x, int y) - { - return PopupFactory.getSharedInstance().getPopup( - /* origin/owner of the popup */ popup.getInvoker(), - /* contents */ popup, - x, y); - } -} diff --git a/libjava/classpath/javax/swing/plaf/ProgressBarUI.java b/libjava/classpath/javax/swing/plaf/ProgressBarUI.java deleted file mode 100644 index 013b8c5..0000000 --- a/libjava/classpath/javax/swing/plaf/ProgressBarUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* ProgressBarUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JProgressBar</code>. - * - * @see javax.swing.JProgressBar - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ProgressBarUI extends ComponentUI -{ - /** - * Constructs a new <code>ProgressBarUI</code>. - */ - public ProgressBarUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/RootPaneUI.java b/libjava/classpath/javax/swing/plaf/RootPaneUI.java deleted file mode 100644 index 9637c9c..0000000 --- a/libjava/classpath/javax/swing/plaf/RootPaneUI.java +++ /dev/null @@ -1,58 +0,0 @@ -/* RootPaneUI.java -- - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JRootPane</code>. - * - * @see javax.swing.JRootPane - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class RootPaneUI extends ComponentUI -{ - /** - * Constructs a new <code>RootPaneUI</code>. - */ - public RootPaneUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/ScrollBarUI.java b/libjava/classpath/javax/swing/plaf/ScrollBarUI.java deleted file mode 100644 index 51b4bf2..0000000 --- a/libjava/classpath/javax/swing/plaf/ScrollBarUI.java +++ /dev/null @@ -1,58 +0,0 @@ -/* ScrollBarUI.java -- - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JScrollBar</code>. - * - * @see javax.swing.JScrollBar - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ScrollBarUI extends ComponentUI -{ - /** - * Constructs a new <code>ScrollBarUI</code>. - */ - public ScrollBarUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/ScrollPaneUI.java b/libjava/classpath/javax/swing/plaf/ScrollPaneUI.java deleted file mode 100644 index 8b37fed..0000000 --- a/libjava/classpath/javax/swing/plaf/ScrollPaneUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* ScrollPaneUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JScrollPane</code>. - * - * @see javax.swing.JScrollPane - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ScrollPaneUI extends ComponentUI -{ - /** - * Constructs a new <code>ScrollPaneUI</code>. - */ - public ScrollPaneUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/SeparatorUI.java b/libjava/classpath/javax/swing/plaf/SeparatorUI.java deleted file mode 100644 index 8a9f8cf..0000000 --- a/libjava/classpath/javax/swing/plaf/SeparatorUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* SeparatorUI.java -- - Copyright (C) 2002, 2003 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.plaf; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JSeparator</code>. - * - * @see javax.swing.JSeparator - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class SeparatorUI - extends ComponentUI -{ - /** - * Constructs a new <code>SeparatorUI</code>. - */ - public SeparatorUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/SliderUI.java b/libjava/classpath/javax/swing/plaf/SliderUI.java deleted file mode 100644 index 570e962..0000000 --- a/libjava/classpath/javax/swing/plaf/SliderUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* SliderUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JSlider</code>. - * - * @see javax.swing.JSlider - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class SliderUI extends ComponentUI -{ - /** - * Constructs a new <code>SliderUI</code>. - */ - public SliderUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/SpinnerUI.java b/libjava/classpath/javax/swing/plaf/SpinnerUI.java deleted file mode 100644 index ca29ddb..0000000 --- a/libjava/classpath/javax/swing/plaf/SpinnerUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* SpinnerUI.java -- - Copyright (C) 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JSpinner</code>. - * - * @since 1.4 - * @see javax.swing.JSpinner - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class SpinnerUI extends ComponentUI -{ - /** - * Constructs a new <code>SpinnerUI</code>. - */ - public SpinnerUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/SplitPaneUI.java b/libjava/classpath/javax/swing/plaf/SplitPaneUI.java deleted file mode 100644 index faf17cb..0000000 --- a/libjava/classpath/javax/swing/plaf/SplitPaneUI.java +++ /dev/null @@ -1,133 +0,0 @@ -/* SplitPaneUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.Graphics; - -import javax.swing.JSplitPane; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JSplitPane</code>. - * - * @see javax.swing.JSplitPane - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class SplitPaneUI extends ComponentUI -{ - /** - * Constructs a new <code>SplitPaneUI</code>. - */ - public SplitPaneUI() - { - // Nothing to do here. - } - - - /** - * Moves the divider to the location which best respects - * the preferred sizes of the children. - * - * @param pane the <code>JSplitPane</code> for thich this - * delegate provides the look and feel. - */ - public abstract void resetToPreferredSizes(JSplitPane pane); - - - /** - * Moves the divider to the specified location. - * - * @param pane the <code>JSplitPane</code> for thich this - * delegate provides the look and feel. - * - * @param location the new location of the divider. - */ - public abstract void setDividerLocation(JSplitPane pane, - int location); - - - /** - * Determines the current location of the divider. - * - * @param pane the <code>JSplitPane</code> for thich this - * delegate provides the look and feel. - * - * @return the current location of the divider. - */ - public abstract int getDividerLocation(JSplitPane pane); - - - /** - * Determines the minimum location of the divider. - * - * @param pane the <code>JSplitPane</code> for thich this - * delegate provides the look and feel. - * - * @return the leftmost (or topmost) possible location - * of the divider. - */ - public abstract int getMinimumDividerLocation(JSplitPane pane); - - - /** - * Determines the maximum location of the divider. - * - * @param pane the <code>JSplitPane</code> for thich this - * delegate provides the look and feel. - * - * @return the bottommost (or rightmost) possible location - * of the divider. - */ - public abstract int getMaximumDividerLocation(JSplitPane pane); - - - /** - * Called by the <code>JSplitPane</code> after it has finished - * painting its children. - * - * @param pane the <code>JSplitPane</code> for thich this - * delegate provides the look and feel. - * - * @param g the Graphics used for painting. - */ - public abstract void finishedPaintingChildren(JSplitPane pane, - Graphics g); -} diff --git a/libjava/classpath/javax/swing/plaf/TabbedPaneUI.java b/libjava/classpath/javax/swing/plaf/TabbedPaneUI.java deleted file mode 100644 index 59136e0..0000000 --- a/libjava/classpath/javax/swing/plaf/TabbedPaneUI.java +++ /dev/null @@ -1,110 +0,0 @@ -/* TabbedPaneUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.Rectangle; - -import javax.swing.JTabbedPane; - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JTabbedPane</code>. - * - * @see javax.swing.JTabbedPane - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class TabbedPaneUI extends ComponentUI -{ - /** - * Constructs a new <code>TabbedPaneUI</code>. - */ - public TabbedPaneUI() - { - // Nothing to do here. - } - - - /** - * Determines which tab lies at a given position. - * - * @param pane the <code>JTabbedPane</code> for which this - * delegate object provides the user interface. - * - * @param x the horizontal position, where zero is the left - * edge of <code>pane</code>. - * - * @param y the vertical position, where zero is the top - * edge of <code>pane</code>. - * - * @return the zero-based index of the tab, or -1 if no - * tab is at the specified position. - */ - public abstract int tabForCoordinate(JTabbedPane pane, - int x, int y); - - - /** - * Calculates the bounding box of a tab. - * - * @param pane the <code>JTabbedPane</code> for which this - * delegate object provides the user interface. - * - * @param index the index of the tab, which must be an integer - * in the range <code>[0 .. pane.getTabCount() - 1]</code>. - * - * @return the bounding box of the <code>index</code>-th tab, - * in the coordinate system of <code>pane</code>. - */ - public abstract Rectangle getTabBounds(JTabbedPane pane, int index); - - - /** - * Determines how many runs are used to display tabs. - * - * @param pane the <code>JTabbedPane</code> for which this - * delegate object provides the user interface. - * - * @return the number of tab runs. - * - * @see javax.swing.JTabbedPane#getTabRunCount() - */ - public abstract int getTabRunCount(JTabbedPane pane); -} diff --git a/libjava/classpath/javax/swing/plaf/TableHeaderUI.java b/libjava/classpath/javax/swing/plaf/TableHeaderUI.java deleted file mode 100644 index 34ac0e0..0000000 --- a/libjava/classpath/javax/swing/plaf/TableHeaderUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* TableHeaderUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JTableHeader</code>. - * - * @see javax.swing.table.JTableHeader - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class TableHeaderUI extends ComponentUI -{ - /** - * Constructs a new <code>TableHeaderUI</code>. - */ - public TableHeaderUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/TableUI.java b/libjava/classpath/javax/swing/plaf/TableUI.java deleted file mode 100644 index a8c6bf9..0000000 --- a/libjava/classpath/javax/swing/plaf/TableUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* TableUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JTable</code>. - * - * @see javax.swing.JTable - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class TableUI extends ComponentUI -{ - /** - * Constructs a new <code>TableUI</code>. - */ - public TableUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/TextUI.java b/libjava/classpath/javax/swing/plaf/TextUI.java deleted file mode 100644 index 424cee9..0000000 --- a/libjava/classpath/javax/swing/plaf/TextUI.java +++ /dev/null @@ -1,281 +0,0 @@ -/* TextUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; - -import javax.swing.text.BadLocationException; -import javax.swing.text.EditorKit; -import javax.swing.text.JTextComponent; -import javax.swing.text.Position; -import javax.swing.text.View; - -/** - * An abstract base class for delegates that provide the user - * interface for text editors. - * - * @see javax.swing.text.JTextComponent - * - * @author Ronald Veldema (rveldema@cs.vu.nl) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class TextUI extends ComponentUI -{ - /** - * Constructs a new <code>TextUI</code>. - */ - public TextUI() - { - // Nothing to do here. - } - - - /** - * Calculates the geometric extent of the character at the - * given offset. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param pos the zero-based index of the character into the - * document model. - * - * @return the bounding box of the character at index - * <code>pos</code>, in view coordinates. - * - * @throws BadLocationException if <code>pos</code> does not - * designate a valid position in the document model. - * - * @see javax.swing.text.ComponentView#modelToView(int, Shape, Position.Bias) - */ - public abstract Rectangle modelToView(JTextComponent tc, int pos) - throws BadLocationException; - - - /** - * Calculates the geometric extent of the character at the - * given offset. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param pos the zero-based index of the character into the - * document model. - * - * @param bias whether to take the character before or after the - * caret position indicated by <code>pos</code>. The value - * must be either {@link - * javax.swing.text.Position.Bias#Backward} or {@link - * javax.swing.text.Position.Bias#Forward}. - * - * @return the bounding box of the character at index - * <code>pos</code>, in view coordinates. - * - * @throws BadLocationException if <code>pos</code> does not - * designate a valid position in the document model. - * - * @see javax.swing.text.ComponentView#modelToView(int, Shape, Position.Bias) - */ - public abstract Rectangle modelToView(JTextComponent tc, int pos, - Position.Bias bias) - throws BadLocationException; - - - /** - * Finds the caret position which is closest to the specified visual - * location. - * - * @param t the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param pt the position in view coordinates. - * - * @return the caret position which is closest to <code>loc</code>. - * - * @see #viewToModel(JTextComponent, Point, Position.Bias[]) - */ - public abstract int viewToModel(JTextComponent t, Point pt); - - - /** - * Finds the caret position which is closest to the specified visual - * location. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param loc the position in view coordinates. - * - * @param outBias an array whose size must be at least one. - * After the call, <code>outBias[0]</code> will indicate - * whether <code>loc</code> is in the glyph before - * (<code>Position.Bias.Backward</code>) or after - * (<code>Position.Bias.Forward</code>) the returned - * caret position. - * - * @return the caret position which is closest to <code>loc</code>. - */ - public abstract int viewToModel(JTextComponent tc, Point loc, - Position.Bias[] outBias); - - - - /** - * Calculates the caret position that is visually next to the given - * position. This is useful to determine where to move the caret - * after the user has pressed an arrow key. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param pos the current caret position, a zero-based index - * into the document model. - * - * @param bias whether to take the character before or after the - * caret position indicated by <code>pos</code>. The value - * must be either {@link - * javax.swing.text.Position.Bias#Backward} or {@link - * javax.swing.text.Position.Bias#Forward}. - * - * @param direction the visual direction. Pass - * {@link javax.swing.SwingConstants#WEST} for the left - * arrow key, {@link javax.swing.SwingConstants#EAST} - * for the right arrow key, {@link - * javax.swing.SwingConstants#NORTH} for the up arrow - * key, or {@link javax.swing.SwingConstants#SOUTH} - * for the down arrow key. - * - * @throws BadLocationException if <code>pos</code> does not - * designate a valid position in the document model. - * - * @throws IllegalArgumentException if <code>direction</code> - * is not one of <code>Position.Bias.Forward</code> - * or <code>Position.Bias.Backward</code>. - */ - public abstract int getNextVisualPositionFrom(JTextComponent tc, - int pos, - Position.Bias bias, - int direction, - Position.Bias[] outBias) - throws BadLocationException; - - - /** - * Repaints a range of characters. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param start the first character in the range that needs - * painting, indicated as an index into the document model. - * - * @param end the last character in the range that needs - * painting, indicated as an index into the document model. - * <code>end</code> must be greater than or equal to - * <code>start</code>. - */ - public abstract void damageRange(JTextComponent tc, int start, int end); - - - /** - * Repaints a range of characters, also specifying the bias for the - * start and end of the range. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param start the first character in the range that needs - * painting, indicated as an index into the document model. - * - * @param end the last character in the range that needs - * painting, indicated as an index into the document model. - * <code>end</code> must be greater than or equal to - * <code>start</code>. - */ - public abstract void damageRange(JTextComponent tc, - int start, int end, - Position.Bias startBias, - Position.Bias endBias); - - - /** - * Retrieves the <code>EditorKit</code> managing policies and - * persistent state. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @return the <code>EditorKit</code> used by <code>tc</code>. - */ - public abstract EditorKit getEditorKit(JTextComponent tc); - - - /** - * Retrieves the root of the view tree that visually presents - * the text. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @return the root <code>View</code> used by <code>tc</code>. - */ - public abstract View getRootView(JTextComponent tc); - - - /** - * Returns a String for presenting a tool tip at the specified - * location. - * - * @param tc the <code>JTextComponent</code> for which this - * delegate object provides the user interface. - * - * @param loc the location for which the tool tip is requested. - * - * @return the text for the tool tip, or <code>null</code> to - * display no tool tip. - * - * @since 1.4 - */ - public String getToolTipText(JTextComponent tc, Point loc) - { - return null; - } -} diff --git a/libjava/classpath/javax/swing/plaf/ToolBarUI.java b/libjava/classpath/javax/swing/plaf/ToolBarUI.java deleted file mode 100644 index 9a26e7b..0000000 --- a/libjava/classpath/javax/swing/plaf/ToolBarUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* ToolBarUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JToolBar</code>. - * - * @see javax.swing.JToolBar - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ToolBarUI extends ComponentUI -{ - /** - * Constructs a new <code>ToolBarUI</code>. - */ - public ToolBarUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/ToolTipUI.java b/libjava/classpath/javax/swing/plaf/ToolTipUI.java deleted file mode 100644 index ae2d465..0000000 --- a/libjava/classpath/javax/swing/plaf/ToolTipUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* ToolTipUI.java -- - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JToolTip</code>. - * - * @see javax.swing.JToolTip - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ToolTipUI extends ComponentUI -{ - /** - * Constructs a new <code>ToolTipUI</code>. - */ - public ToolTipUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/TreeUI.java b/libjava/classpath/javax/swing/plaf/TreeUI.java deleted file mode 100644 index 308ec63..0000000 --- a/libjava/classpath/javax/swing/plaf/TreeUI.java +++ /dev/null @@ -1,211 +0,0 @@ -/* TreeUI.java -- - Copyright (C) 2002, 2003, 2004 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.plaf; - -import java.awt.Rectangle; - -import javax.swing.JTree; -import javax.swing.tree.TreePath; - -/** - * An abstract base class for delegates that provide the user - * interface for <code>JTree</code>. - * - * @see javax.swing.JTree - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class TreeUI extends ComponentUI -{ - /** - * Constructs a new <code>TreeUI</code>. - */ - public TreeUI() - { - // Nothing to do here. - } - - - /** - * Determines the geometric extent of the label that is - * drawn for a path. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @param path the path whose label extent is requested. - * - * @return a rectangle enclosing the label, or <code>null</code> - * if <code>path</code> contains invalid nodes. - */ - public abstract Rectangle getPathBounds(JTree tree, TreePath path); - - - /** - * Creates a <code>TreePath</code> for the specified row. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @param row the index of the row, which should be a number - * in the range <code>[0, getRowCount(tree) - 1]</code>. - * - * @return a <code>TreePath</code> for the specified row, or - * <code>null</code> if <code>row</code> is outside - * the valid range. - */ - public abstract TreePath getPathForRow(JTree tree, int row); - - - /** - * Determines in which row a <code>TreePath</code> is currently - * being displayed. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @param path the path for which the caller wants to know - * in which row it is being displayed. - * - * @return a number in the range <code>[0, getRowCount(tree) - * - 1]</code> if the path is currently on display; - * <code>-1</code> if the path is not shown to the - * user. - */ - public abstract int getRowForPath(JTree tree, TreePath path); - - - /** - * Counts how many rows are currently displayed. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @return the number of visible rows. - */ - public abstract int getRowCount(JTree tree); - - - /** - * Finds the path that is closest to the specified position. - * - * <p><img src="doc-files/TreeUI-1.png" width="300" height="250" - * alt="[A screen shot of a JTree]" /> - * - * <p>As shown by the above illustration, the bounds of the - * closest path do not necessarily need to contain the passed - * location. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @param x the horizontal location, relative to the origin - * of <code>tree</code>. - * - * @param y the vertical location, relative to the origin - * of <code>tree</code>. - * - * @return the closest path, or <code>null</code> if the - * tree is currenlty not displaying any paths at all. - */ - public abstract TreePath getClosestPathForLocation(JTree tree, - int x, int y); - - - /** - * Determines whether the user is currently editing a tree cell. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @see #getEditingPath - */ - public abstract boolean isEditing(JTree tree); - - - /** - * Stops editing a tree cell, committing the entered value into the - * tree’s model. If no editing session is active, or if the - * active editor does not agree to stopping, nothing happens. In - * some look and feels, this action happens when the user has - * pressed the enter key. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @return <code>false</code> if the editing still goes on because - * the cell editor has objected to stopping the session; - * <code>true</code> if editing has been stopped. - */ - public abstract boolean stopEditing(JTree tree); - - - /** - * Cancels editing a tree cell, discarding any entered value. - * If no editing session is active, nothing happens. The cell - * editor is not given an opportunity to veto the canceling. - * In some look and feels, this action happens when the user has - * pressed the escape key. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - */ - public abstract void cancelEditing(JTree tree); - - - /** - * Starts a session to edit a tree cell. If the cell editor - * rejects editing the cell, it will just be selected. - * - * @param tree the <code>JTree</code> for which this delegate - * object provides the user interface. - * - * @param path the cell to edit. - */ - public abstract void startEditingAtPath(JTree tree, TreePath path); - - - /** - * Retrieves the tree cell that is currently being edited. - * - * @return the currently edited path, or <code>null</code> - * if no editing session is currently active. - */ - public abstract TreePath getEditingPath(JTree tree); -} diff --git a/libjava/classpath/javax/swing/plaf/UIResource.java b/libjava/classpath/javax/swing/plaf/UIResource.java deleted file mode 100644 index 511aaa7..0000000 --- a/libjava/classpath/javax/swing/plaf/UIResource.java +++ /dev/null @@ -1,59 +0,0 @@ -/* UIResource.java - Copyright (C) 1999 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.plaf; - -/** - * This public interface is used to designate which objects were created by - * {@link ComponentUI} delegates. When uninstalling the user public interface - * renderer with <code>ComponentUI.uninstallUI()</code> the renderer - * property is set to <code>null</code>. - * <br> - * A comparison against null can be used with all properties except for - * the <code>java.awt.Component</code> properties font, foreground, and - * background. The container can provide the value of the properties if - * they are initialized or set to <code>null</code>. - * - * @author Brian Jones - * - * @see ComponentUI - */ -public interface UIResource -{ - // This is a marker interface and declares no methods. -} diff --git a/libjava/classpath/javax/swing/plaf/ViewportUI.java b/libjava/classpath/javax/swing/plaf/ViewportUI.java deleted file mode 100644 index db514de..0000000 --- a/libjava/classpath/javax/swing/plaf/ViewportUI.java +++ /dev/null @@ -1,60 +0,0 @@ -/* ViewportUI.java - Copyright (C) 2002, 2003 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.plaf; - - -/** - * An abstract base class for delegates that implement the pluggable - * look and feel for a <code>JViewport</code>. - * - * @see javax.swing.JViewport - * - * @author Andrew Selkirk (aselkirk@sympatico.ca) - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public abstract class ViewportUI extends ComponentUI -{ - /** - * Constructs a new <code>ViewportUI</code>. - */ - public ViewportUI() - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicArrowButton.java b/libjava/classpath/javax/swing/plaf/basic/BasicArrowButton.java deleted file mode 100644 index 1d6e887..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicArrowButton.java +++ /dev/null @@ -1,422 +0,0 @@ -/* BasicArrowButton.java -- - Copyright (C) 2004, 2005, 2006 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Polygon; - -import javax.swing.ButtonModel; -import javax.swing.JButton; -import javax.swing.SwingConstants; - -/** - * A button that displays an arrow (triangle) that points {@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} or {@link #WEST}. This button is used by - * the {@link BasicComboBoxUI} class. - * - * @see BasicComboBoxUI#createArrowButton - */ -public class BasicArrowButton extends JButton implements SwingConstants -{ - - /** - * The direction that the arrow points. - * - * @see #getDirection() - */ - protected int direction; - - /** - * The color the arrow is painted in if disabled and the bottom and right - * edges of the button. - * This is package-private to avoid an accessor method. - */ - transient Color shadow = Color.GRAY; - - /** - * The color the arrow is painted in if enabled and the bottom and right - * edges of the button. - * This is package-private to avoid an accessor method. - */ - transient Color darkShadow = new Color(102, 102, 102); - - /** - * The top and left edges of the button. - * This is package-private to avoid an accessor method. - */ - transient Color highlight = Color.WHITE; - - /** - * Creates a new <code>BasicArrowButton</code> object with an arrow pointing - * in the specified direction. If the <code>direction</code> is not one of - * the specified constants, no arrow is drawn. - * - * @param direction The direction the arrow points in (one of: - * {@link #NORTH}, {@link #SOUTH}, {@link #EAST} and {@link #WEST}). - */ - public BasicArrowButton(int direction) - { - super(); - setDirection(direction); - setFocusable(false); - } - - /** - * Creates a new BasicArrowButton object with the given colors and - * direction. - * - * @param direction The direction to point in (one of: - * {@link #NORTH}, {@link #SOUTH}, {@link #EAST} and {@link #WEST}). - * @param background The background color. - * @param shadow The shadow color. - * @param darkShadow The dark shadow color. - * @param highlight The highlight color. - */ - public BasicArrowButton(int direction, Color background, Color shadow, - Color darkShadow, Color highlight) - { - this(direction); - setBackground(background); - this.shadow = shadow; - this.darkShadow = darkShadow; - this.highlight = highlight; - setFocusable(false); - } - - /** - * Returns whether the focus can traverse to this component. This method - * always returns <code>false</code>. - * - * @return <code>false</code>. - */ - public boolean isFocusTraversable() - { - return false; - } - - /** - * Returns the direction of the arrow (one of: {@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} and {@link #WEST}). - * - * @return The direction of the arrow. - */ - public int getDirection() - { - return direction; - } - - /** - * Sets the direction of the arrow. - * - * @param dir The new direction of the arrow (one of: {@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} and {@link #WEST}). - */ - public void setDirection(int dir) - { - this.direction = dir; - } - - /** - * Paints the arrow button. The painting is delegated to the - * paintTriangle method. - * - * @param g The Graphics object to paint with. - */ - public void paint(Graphics g) - { - super.paint(g); - - int height = getHeight(); - int size = height / 4; - - int x = (getWidth() - size) / 2; - int y = (height - size) / 2; - - ButtonModel m = getModel(); - if (m.isArmed()) - { - x++; - y++; - } - - paintTriangle(g, x, y, size, direction, isEnabled()); - } - - /** - * Returns the preferred size of the arrow button. - * - * @return The preferred size (always 16 x 16). - */ - public Dimension getPreferredSize() - { - // since Dimension is NOT immutable, we must return a new instance - // every time (if we return a cached value, the caller might modify it) - // - tests show that the reference implementation does the same. - return new Dimension(16, 16); - } - - /** - * Returns the minimum size of the arrow button. - * - * @return The minimum size (always 5 x 5). - */ - public Dimension getMinimumSize() - { - // since Dimension is NOT immutable, we must return a new instance - // every time (if we return a cached value, the caller might modify it) - // - tests show that the reference implementation does the same. - return new Dimension(5, 5); - } - - /** - * Returns the maximum size of the arrow button. - * - * @return The maximum size (always Integer.MAX_VALUE x Integer.MAX_VALUE). - */ - public Dimension getMaximumSize() - { - // since Dimension is NOT immutable, we must return a new instance - // every time (if we return a cached value, the caller might modify it) - // - tests show that the reference implementation does the same. - return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - - /** - * Paints a triangle with the given size, location and direction. It is - * difficult to explain the rationale behind the positioning of the triangle - * relative to the given (x, y) position - by trial and error we seem to - * match the behaviour of the reference implementation (which is missing a - * specification for this method). - * - * @param g the graphics device. - * @param x the x-coordinate for the triangle's location. - * @param y the y-coordinate for the triangle's location. - * @param size the arrow size (depth). - * @param direction the direction of the arrow (one of: {@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} and {@link #WEST}). - * @param isEnabled if <code>true</code> the arrow is drawn in the enabled - * state, otherwise it is drawn in the disabled state. - */ - public void paintTriangle(Graphics g, int x, int y, int size, int direction, - boolean isEnabled) - { - Color savedColor = g.getColor(); - switch (direction) - { - case NORTH: - paintTriangleNorth(g, x, y, size, isEnabled); - break; - case SOUTH: - paintTriangleSouth(g, x, y, size, isEnabled); - break; - case LEFT: - case WEST: - paintTriangleWest(g, x, y, size, isEnabled); - break; - case RIGHT: - case EAST: - paintTriangleEast(g, x, y, size, isEnabled); - break; - } - g.setColor(savedColor); - } - - /** - * Paints an upward-pointing triangle. This method is called by the - * {@link #paintTriangle(Graphics, int, int, int, int, boolean)} method. - * - * @param g the graphics device. - * @param x the x-coordinate for the anchor point. - * @param y the y-coordinate for the anchor point. - * @param size the arrow size (depth). - * @param isEnabled if <code>true</code> the arrow is drawn in the enabled - * state, otherwise it is drawn in the disabled state. - */ - private void paintTriangleNorth(Graphics g, int x, int y, int size, - boolean isEnabled) - { - int tipX = x + (size - 2) / 2; - int tipY = y; - int baseX1 = tipX - (size - 1); - int baseX2 = tipX + (size - 1); - int baseY = y + (size - 1); - Polygon triangle = new Polygon(); - triangle.addPoint(tipX, tipY); - triangle.addPoint(baseX1, baseY); - triangle.addPoint(baseX2, baseY); - if (isEnabled) - { - g.setColor(Color.DARK_GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - } - else - { - g.setColor(Color.GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - g.setColor(Color.WHITE); - g.drawLine(baseX1 + 1, baseY + 1, baseX2 + 1, baseY + 1); - } - } - - /** - * Paints an downward-pointing triangle. This method is called by the - * {@link #paintTriangle(Graphics, int, int, int, int, boolean)} method. - * - * @param g the graphics device. - * @param x the x-coordinate for the anchor point. - * @param y the y-coordinate for the anchor point. - * @param size the arrow size (depth). - * @param isEnabled if <code>true</code> the arrow is drawn in the enabled - * state, otherwise it is drawn in the disabled state. - */ - private void paintTriangleSouth(Graphics g, int x, int y, int size, - boolean isEnabled) - { - int tipX = x + (size - 2) / 2; - int tipY = y + (size - 1); - int baseX1 = tipX - (size - 1); - int baseX2 = tipX + (size - 1); - int baseY = y; - Polygon triangle = new Polygon(); - triangle.addPoint(tipX, tipY); - triangle.addPoint(baseX1, baseY); - triangle.addPoint(baseX2, baseY); - if (isEnabled) - { - g.setColor(Color.DARK_GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - } - else - { - g.setColor(Color.GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - g.setColor(Color.WHITE); - g.drawLine(tipX + 1, tipY, baseX2, baseY + 1); - g.drawLine(tipX + 1, tipY + 1, baseX2 + 1, baseY + 1); - } - } - - /** - * Paints a right-pointing triangle. This method is called by the - * {@link #paintTriangle(Graphics, int, int, int, int, boolean)} method. - * - * @param g the graphics device. - * @param x the x-coordinate for the anchor point. - * @param y the y-coordinate for the anchor point. - * @param size the arrow size (depth). - * @param isEnabled if <code>true</code> the arrow is drawn in the enabled - * state, otherwise it is drawn in the disabled state. - */ - private void paintTriangleEast(Graphics g, int x, int y, int size, - boolean isEnabled) - { - int tipX = x + (size - 1); - int tipY = y + (size - 2) / 2; - int baseX = x; - int baseY1 = tipY - (size - 1); - int baseY2 = tipY + (size - 1); - - Polygon triangle = new Polygon(); - triangle.addPoint(tipX, tipY); - triangle.addPoint(baseX, baseY1); - triangle.addPoint(baseX, baseY2); - if (isEnabled) - { - g.setColor(Color.DARK_GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - } - else - { - g.setColor(Color.GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - g.setColor(Color.WHITE); - g.drawLine(baseX + 1, baseY2, tipX, tipY + 1); - g.drawLine(baseX + 1, baseY2 + 1, tipX + 1, tipY + 1); - } - } - - /** - * Paints a left-pointing triangle. This method is called by the - * {@link #paintTriangle(Graphics, int, int, int, int, boolean)} method. - * - * @param g the graphics device. - * @param x the x-coordinate for the anchor point. - * @param y the y-coordinate for the anchor point. - * @param size the arrow size (depth). - * @param isEnabled if <code>true</code> the arrow is drawn in the enabled - * state, otherwise it is drawn in the disabled state. - */ - private void paintTriangleWest(Graphics g, int x, int y, int size, - boolean isEnabled) - { - int tipX = x; - int tipY = y + (size - 2) / 2; - int baseX = x + (size - 1); - int baseY1 = tipY - (size - 1); - int baseY2 = tipY + (size - 1); - - Polygon triangle = new Polygon(); - triangle.addPoint(tipX, tipY); - triangle.addPoint(baseX, baseY1); - triangle.addPoint(baseX, baseY2); - if (isEnabled) - { - g.setColor(Color.DARK_GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - } - else - { - g.setColor(Color.GRAY); - g.fillPolygon(triangle); - g.drawPolygon(triangle); - g.setColor(Color.WHITE); - g.drawLine(baseX + 1, baseY1 + 1, baseX + 1, baseY2 + 1); - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicBorders.java b/libjava/classpath/javax/swing/plaf/basic/BasicBorders.java deleted file mode 100644 index 83afc33..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicBorders.java +++ /dev/null @@ -1,1768 +0,0 @@ -/* BasicBorders.java -- - Copyright (C) 2003, 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.io.Serializable; - -import javax.swing.AbstractButton; -import javax.swing.ButtonModel; -import javax.swing.JButton; -import javax.swing.JPopupMenu; -import javax.swing.JSplitPane; -import javax.swing.JToolBar; -import javax.swing.UIManager; -import javax.swing.border.AbstractBorder; -import javax.swing.border.BevelBorder; -import javax.swing.border.Border; -import javax.swing.plaf.BorderUIResource; -import javax.swing.plaf.UIResource; -import javax.swing.text.JTextComponent; - -/** - * Provides various borders for the Basic look and feel. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class BasicBorders -{ - /** - * A MarginBorder that gets shared by multiple components. - * Created on demand by the private helper function {@link - * #getMarginBorder()}. - */ - private static MarginBorder sharedMarginBorder; - - - /** - * Returns a border for drawing push buttons. - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“Button.shadow”</code>, - * <code>“Button.darkShadow”</code>, - * <code>“Button.light”</code>, and - * <code>“Button.highlight”</code>. - * - * <p><img src="doc-files/BasicBorders.ButtonBorder-1.png" width="300" - * height="170" alt="[A screen shot of the returned border]" /> - * - * @return a {@link - * javax.swing.plaf.BorderUIResource.CompoundBorderUIResource} - * whose outer border is a {@link ButtonBorder} and whose - * inner border is a {@link MarginBorder}. - */ - public static Border getButtonBorder() - { - Border outer; - - /* The keys for UIDefaults have been determined by writing a - * test program that dumps the UIDefaults to stdout; that program - * was run on a JDK 1.4.1_01 for GNU/Linux. Note that in the API, - * the key "light" is usually called "highlight", and "highlight" - * is usually called "lightHighlight". - */ - outer = new ButtonBorder(UIManager.getColor("Button.shadow"), - UIManager.getColor("Button.darkShadow"), - UIManager.getColor("Button.light"), - UIManager.getColor("Button.highlight")); - - /* While the inner border is shared between multiple buttons, - * we do not share the outer border because ButtonBorders store - * their border colors. We cannot guarantee that the colors - * (which come from UIDefaults) are unchanged between invocations - * of getButtonBorder. We could store the last colors, and share - * the button border if the colors are the same as in the last - * invocation, but it probably is not worth the effort. - */ - return new BorderUIResource.CompoundBorderUIResource( - outer, - /* inner */ getMarginBorder()); - } - - - /** - * Returns a border for drawing radio buttons. - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“RadioButton.shadow”</code>, - * <code>“RadioButton.darkShadow”</code>, - * <code>“RadioButton.light”</code>, and - * <code>“RadioButton.highlight”</code>. - * - * <p><img src="doc-files/BasicBorders.RadioButtonBorder-1.png" width="300" - * height="135" alt="[A screen shot of the returned border]" /> - * - * @return a {@link - * javax.swing.plaf.BorderUIResource.CompoundBorderUIResource} - * whose outer border is a {@link RadioButtonBorder} and whose - * inner border is a {@link MarginBorder}. - */ - public static Border getRadioButtonBorder() - { - Border outer; - - /* The keys for UIDefaults have been determined by writing a - * test program that dumps the UIDefaults to stdout; that program - * was run on a JDK 1.4.1_01 for GNU/Linux. Note that in the API, - * the key "light" is usually called "highlight", and "highlight" - * is usually called "lightHighlight". - */ - outer = new RadioButtonBorder( - UIManager.getColor("RadioButton.shadow"), - UIManager.getColor("RadioButton.darkShadow"), - UIManager.getColor("RadioButton.light"), - UIManager.getColor("RadioButton.highlight")); - - /* While the inner border is shared between multiple buttons, we - * do not share the outer border because RadioButtonBorders, being - * ButtonBorders, store their border colors. We cannot guarantee - * that the colors (which come from UIDefaults) are unchanged - * between invocations of getButtonBorder. We could store the last - * colors, and share the button border if the colors are the same - * as in the last invocation, but it probably is not worth the - * effort. - */ - return new BorderUIResource.CompoundBorderUIResource( - outer, - /* inner */ getMarginBorder()); - } - - - /** - * Returns a border for drawing toggle buttons. - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“ToggleButton.shadow”</code>, - * <code>“ToggleButton.darkShadow”</code>, - * <code>“ToggleButton.light”</code>, and - * <code>“ToggleButton.highlight”</code>. - * - * <p><img src="doc-files/BasicBorders.ToggleButtonBorder-1.png" width="270" - * height="135" alt="[A screen shot of the returned border]" /> - * - * @return a {@link - * javax.swing.plaf.BorderUIResource.CompoundBorderUIResource} - * whose outer border is a {@link ToggleButtonBorder} and whose - * inner border is a {@link MarginBorder}. - */ - public static Border getToggleButtonBorder() - { - Border outer; - - /* The keys for UIDefaults have been determined by writing a - * test program that dumps the UIDefaults to stdout; that program - * was run on a JDK 1.4.1_01 for GNU/Linux. Note that in the API, - * the key "light" is usually called "highlight", and "highlight" - * is usually called "lightHighlight". - */ - outer = new ToggleButtonBorder( - UIManager.getColor("ToggleButton.shadow"), - UIManager.getColor("ToggleButton.darkShadow"), - UIManager.getColor("ToggleButton.light"), - UIManager.getColor("ToggleButton.highlight")); - - /* While the inner border is shared between multiple buttons, we - * do not share the outer border because ToggleButtonBorders, being - * ButtonBorders, store their border colors. We cannot guarantee - * that the colors (which come from UIDefaults) are unchanged - * between invocations of getButtonBorder. We could store the last - * colors, and share the button border if the colors are the same - * as in the last invocation, but it probably is not worth the - * effort. - */ - return new BorderUIResource.CompoundBorderUIResource( - outer, - /* inner */ getMarginBorder()); - } - - - /** - * Returns a border for drawing a two-pixel thick separator line - * below menu bars. - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“MenuBar.shadow”</code> and - * <code>“MenuBar.highlight”</code>. - * - * <p><img src="doc-files/BasicBorders.MenuBarBorder-1.png" width="500" - * height="140" alt="[A screen shot of a JMenuBar with this border]" /> - * - * @return a {@link MenuBarBorder}. - * - * @see javax.swing.JMenuBar - */ - public static Border getMenuBarBorder() - { - /* See comment in methods above for why this border is not shared. */ - return new MenuBarBorder(UIManager.getColor("MenuBar.shadow"), - UIManager.getColor("MenuBar.highlight")); - } - - - /** - * Returns a border for drawing a one-pixel thick border around - * split panes that are interrupted where the divider joins the - * border. - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“SplitPane.darkShadow”</code> and - * <code>“SplitPane.highlight”</code>. - * - * <p><img src="doc-files/BasicBorders.SplitPaneBorder-1.png" width="520" - * height="200" alt="[A screen shot for JSplitPane.HORIZONTAL_SPLIT]" /> - * - * <p><img src="doc-files/BasicBorders.SplitPaneBorder-2.png" width="520" - * height="200" alt="[A screen shot for JSplitPane.VERTICAL_SPLIT]" /> - * - * @return a {@link SplitPaneBorder}. - * - * @see javax.swing.JSplitPane - * @see #getSplitPaneDividerBorder() - */ - public static Border getSplitPaneBorder() - { - /* See comment in methods above for why this border is not shared. */ - return new SplitPaneBorder(UIManager.getColor("SplitPane.highlight"), - UIManager.getColor("SplitPane.darkShadow")); - } - - - /** - * Returns a border for drawing a one-pixel thick border around - * the divider of split panes. - * - * <p>The colors of the edges that are adjacent to the child components - * of the <code>JSplitPane</code> are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“SplitPane.darkShadow”</code> and - * <code>“SplitPane.highlight”</code>. The color of the - * other two edges is the background color of the divider. - * - * <p><img src="doc-files/BasicBorders.SplitPaneDividerBorder-1.png" - * width="520" height="200" alt= - * "[A screen shot for JSplitPane.HORIZONTAL_SPLIT]" /> - * - * @return an instance of <code>SplitPaneDividerBorder</code>, which is - * not a public API class of this package. - * - * @see javax.swing.JSplitPane - * @see javax.swing.plaf.basic.BasicSplitPaneDivider - * @see #getSplitPaneBorder() - * - * @since 1.3 - */ - public static Border getSplitPaneDividerBorder() - { - /* See comment in methods above for why this border is not shared. */ - return new SplitPaneDividerBorder(); - } - - - /** - * Returns a border for drawing a border around a text field - * that makes the field appear as etched into the surface. - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“TextField.shadow”</code>, - * <code>“TextField.darkShadow”</code>, - * <code>“TextField.light”</code>, and - * <code>“TextField.highlight”</code>. - * - * <p><img src="doc-files/BasicBorders.FieldBorder-1.png" width="500" - * height="200" alt="[A screen shot of a border returned by - * this method]" /> - * - * @return an instance of {@link FieldBorder}. - * - * @see javax.swing.JTextField - * @see javax.swing.text.JTextComponent - */ - public static Border getTextFieldBorder() - { - /* See comment in methods above for why this border is not shared. */ - return new FieldBorder( - UIManager.getColor("TextField.shadow"), - UIManager.getColor("TextField.darkShadow"), - UIManager.getColor("TextField.light"), - UIManager.getColor("TextField.highlight")); - } - - - /** - * Returns a two-pixel thick, green - * <code>LineBorderUIResource</code>. This is so ugly that look and - * feels better use different borders for their progress bars, or - * they will look really terrible. - * - * <p><img src="doc-files/BasicBorders-1.png" width="120" height="80" - * alt="[A screen shot of a border returned by this method]" /> - */ - public static Border getProgressBarBorder() - { - /* There does not seem to exist a way to parametrize the color - * or thickness of the border through UIDefaults. - */ - return new BorderUIResource.LineBorderUIResource(Color.green, 2); - } - - - /** - * Returns a border that is composed of a raised bevel border and a - * one-pixel thick line border. - * - * <p><img src="doc-files/BasicBorders-2.png" width="300" height="200" - * alt="[A screen shot of a border returned by this method]" /> - * - * <p>The colors of the border are retrieved from the - * <code>UIDefaults</code> of the currently active look and feel - * using the keys <code>“InternalFrame.borderShadow”</code>, - * <code>“InternalFrame.borderDarkShadow”</code>, - * <code>“InternalFrame.borderLight”</code>, - * <code>“InternalFrame.borderHighlight”</code>, and - * (for the inner one-pixel thick line) - * <code>“InternalFrame.borderColor”</code>. - */ - public static Border getInternalFrameBorder() - { - Color shadow, darkShadow, highlight, lightHighlight, line; - - /* See comment in methods above for why this border is not shared. */ - shadow = UIManager.getColor("InternalFrame.borderShadow"); - darkShadow = UIManager.getColor("InternalFrame.borderDarkShadow"); - highlight = UIManager.getColor("InternalFrame.borderLight"); - lightHighlight = UIManager.getColor("InternalFrame.borderHighlight"); - line = UIManager.getColor("InternalFrame.borderColor"); - - return new BorderUIResource.CompoundBorderUIResource( - /* outer border */ - new BorderUIResource.BevelBorderUIResource( - BevelBorder.RAISED, - (highlight != null) ? highlight : Color.lightGray, - (lightHighlight != null) ? lightHighlight : Color.white, - (darkShadow != null) ? darkShadow : Color.black, - (shadow != null) ? shadow : Color.gray), - - /* inner border */ - new BorderUIResource.LineBorderUIResource( - (line != null) ? line : Color.lightGray)); - } - - - /** - * Returns a shared MarginBorder. - */ - static Border getMarginBorder() // intentionally not public - { - /* Swing is not designed to be thread-safe, so there is no - * need to synchronize the access to the global variable. - */ - if (sharedMarginBorder == null) - sharedMarginBorder = new MarginBorder(); - - return sharedMarginBorder; - } - - - /** - * A border whose appearance depends on the state of - * the enclosed button. - * - * <p><img src="doc-files/BasicBorders.ButtonBorder-1.png" width="300" - * height="170" alt="[A screen shot of this border]" /> - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class ButtonBorder - extends AbstractBorder - implements Serializable, UIResource - { - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -157053874580739687L; - - - /** - * The color for drawing the shaded parts of the border. - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - protected Color shadow; - - - /** - * The color for drawing the dark shaded parts of the border. - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - protected Color darkShadow; - - - /** - * The color for drawing the highlighted parts of the border. - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - protected Color highlight; - - - /** - * The color for drawing the bright highlighted parts of the border. - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - protected Color lightHighlight; - - - /** - * Constructs a new border for drawing a button in the Basic - * look and feel. - * - * @param shadow the shadow color. - * @param darkShadow a darker variant of the shadow color. - * @param highlight the highlight color. - * @param lightHighlight a brighter variant of the highlight color. - */ - public ButtonBorder(Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - /* These colors usually come from the UIDefaults of the current - * look and feel. Use fallback values if the colors are not - * supplied. The API specification is silent about what - * behavior is expected for null colors, so users should not - * rely on this fallback (which is why it is not documented in - * the above Javadoc). - */ - this.shadow = (shadow != null) ? shadow : Color.gray; - this.darkShadow = (darkShadow != null) ? darkShadow : Color.black; - this.highlight = (highlight != null) ? highlight : Color.lightGray; - this.lightHighlight = (lightHighlight != null) - ? lightHighlight - : Color.white; - } - - - /** - * Paints the ButtonBorder around a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - ButtonModel bmodel = null; - - if (c instanceof AbstractButton) - bmodel = ((AbstractButton) c).getModel(); - - BasicGraphicsUtils.drawBezel( - g, x, y, width, height, - /* pressed */ (bmodel != null) - && /* mouse button pressed */ bmodel.isPressed() - && /* mouse inside */ bmodel.isArmed(), - /* default */ (c instanceof JButton) - && ((JButton) c).isDefaultButton(), - shadow, darkShadow, highlight, lightHighlight); - } - - - /** - * Measures the width of this border. - * - * <p>Although the thickness of the actually painted border - * depends on the state of the enclosed component, this - * measurement always returns the same amount of pixels. Indeed, - * it would be rather confusing if a button was appearing to - * change its size depending on whether it is pressed or not. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - /* There is no obvious reason for overriding this method, but we - * try to have exactly the same API as the Sun reference - * implementation. - */ - return getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * <p>Although the thickness of the actually painted border - * depends on the state of the enclosed component, this - * measurement always returns the same amount of pixels. Indeed, - * it would be rather confusing if a button was appearing to - * change its size depending on whether it is pressed or not. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets(Component) - */ - public Insets getBorderInsets(Component c, Insets insets) - { - /* The exact amount has been determined using a test program - * that was run on the Sun reference implementation. With - * Apple/Sun JDK 1.3.1 on MacOS X 10.1.5, the result is - * [3, 3, 3, 3]. With Sun JDK 1.4.1_01 on Linux/x86, the - * result is [2, 3, 3, 3]. We use the values from the 1.4.1_01 - * release. - */ - if (insets == null) - return new Insets(2, 3, 3, 3); - - insets.top = 2; - insets.bottom = insets.left = insets.right = 3; - return insets; - } - } - - - /** - * A border that makes its enclosed component appear as lowered - * into the surface. Typically used for text fields. - * - * <p><img src="doc-files/BasicBorders.FieldBorder-1.png" width="500" - * height="200" alt="[A screen shot of this border]" /> - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawEtchedRect - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class FieldBorder - extends AbstractBorder - implements UIResource - { - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = 949220756998454908L; - - - /** - * The color for drawing the outer half of the top and left - * edges. - */ - protected Color shadow; - - - /** - * The color for drawing the inner half of the top and left - * edges. - */ - protected Color darkShadow; - - - /** - * The color for drawing the inner half of the bottom and right - * edges. - */ - protected Color highlight; - - - /** - * The color for drawing the outer half of the bottom and right - * edges. - */ - protected Color lightHighlight; - - - /** - * Constructs a new border for drawing a text field in the Basic - * look and feel. - * - * @param shadow the color for drawing the outer half - * of the top and left edges. - * - * @param darkShadow the color for drawing the inner half - * of the top and left edges. - * - * @param highlight the color for drawing the inner half - * of the bottom and right edges. - * - * @param lightHighlight the color for drawing the outer half - * of the bottom and right edges. - */ - public FieldBorder(Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - /* These colors usually come from the UIDefaults of the current - * look and feel. Use fallback values if the colors are not - * supplied. The API specification is silent about what - * behavior is expected for null colors, so users should not - * rely on this fallback (which is why it is not documented in - * the above Javadoc). - */ - this.shadow = (shadow != null) ? shadow : Color.gray; - this.darkShadow = (darkShadow != null) ? darkShadow : Color.black; - this.highlight = (highlight != null) ? highlight : Color.lightGray; - this.lightHighlight = (lightHighlight != null) - ? lightHighlight : Color.white; - } - - - /** - * Paints the FieldBorder around a given component. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawEtchedRect - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - BasicGraphicsUtils.drawEtchedRect(g, x, y, width, height, - shadow, darkShadow, - highlight, lightHighlight); - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * If <code>c</code> is an instance of {@link - * javax.swing.text.JTextComponent}, its margin is - * added to the border size. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param c the component whose border is to be measured. - * If <code>c</code> is an instance of {@link - * javax.swing.text.JTextComponent}, its margin is - * added to the border size. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets(Component) - */ - public Insets getBorderInsets(Component c, Insets insets) - { - if (insets == null) - insets = new Insets(2, 2, 2, 2); - else - insets.top = insets.left = insets.bottom = insets.right = 2; - - if (c instanceof JTextComponent) - { - Insets margin = ((JTextComponent) c).getMargin(); - insets.top += margin.top; - insets.left += margin.left; - insets.bottom += margin.bottom; - insets.right += margin.right; - } - - return insets; - } - } - - - /** - * An invisible, but spacing border whose margin is determined - * by calling the <code>getMargin()</code> method of the enclosed - * component. If the enclosed component has no such method, - * this border will not occupy any space. - * - * <p><img src="doc-files/BasicBorders.MarginBorder-1.png" width="325" - * height="200" alt="[An illustration that shows how MarginBorder - * determines its borders]" /> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class MarginBorder - extends AbstractBorder - implements Serializable, UIResource - { - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -3035848353448896090L; - - - /** - * Constructs a new MarginBorder. - */ - public MarginBorder() - { - // Nothing to do here. - } - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, new Insets(0, 0, 0, 0)); - } - - - /** - * Determines the insets of this border by calling the - * <code>getMargin()</code> method of the enclosed component. The - * resulting margin will be stored into the the <code>left</code>, - * <code>right</code>, <code>top</code> and <code>bottom</code> - * fields of the passed <code>insets</code> parameter. - * - * <p>Unfortunately, <code>getMargin()</code> is not a method of - * {@link javax.swing.JComponent} or some other common superclass - * of things with margins. While reflection could be used to - * determine the existence of this method, this would be slow on - * many virtual machines. Therefore, the current implementation - * knows about {@link javax.swing.AbstractButton#getMargin()}, - * {@link javax.swing.JPopupMenu#getMargin()}, {@link - * javax.swing.JToolBar#getMargin()}, and {@link - * javax.swing.text.JTextComponent}. If <code>c</code> is an - * instance of a known class, the respective - * <code>getMargin()</code> method is called to determine the - * correct margin. Otherwise, a zero-width margin is returned. - * - * @param c the component whose border is to be measured. - * - * @return the same object that was passed for <code>insets</code>, - * but with changed fields. - */ - public Insets getBorderInsets(Component c, Insets insets) - { - Insets margin = null; - - /* This is terrible object-oriented design. See the above Javadoc - * for an excuse. - */ - if (c instanceof AbstractButton) - margin = ((AbstractButton) c).getMargin(); - else if (c instanceof JPopupMenu) - margin = ((JPopupMenu) c).getMargin(); - else if (c instanceof JToolBar) - margin = ((JToolBar) c).getMargin(); - else if (c instanceof JTextComponent) - margin = ((JTextComponent) c).getMargin(); - - if (margin == null) - insets.top = insets.left = insets.bottom = insets.right = 0; - else - { - insets.top = margin.top; - insets.left = margin.left; - insets.bottom = margin.bottom; - insets.right = margin.right; - } - - return insets; - } - } - - - /** - * A border for drawing a separator line below JMenuBar. - * - * <p><img src="doc-files/BasicBorders.MenuBarBorder-1.png" width="500" - * height="140" alt="[A screen shot of a JMenuBar with this border]" /> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class MenuBarBorder - extends AbstractBorder - implements UIResource - { - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -6909056571935227506L; - - - /** - * The shadow color, which is used for the upper line of the - * two-pixel thick bottom edge. - */ - private Color shadow; - - - /** - * The highlight color, which is used for the lower line of the - * two-pixel thick bottom edge. - */ - private Color highlight; - - - /** - * Constructs a new MenuBarBorder for drawing a JMenuBar in - * the Basic look and feel. - * - * <p><img src="doc-files/BasicBorders.MenuBarBorder-1.png" width="500" - * height="140" alt="[A screen shot of a JMenuBar with this - * border]" /> - * - * @param shadow the shadow color, which is used for the upper - * line of the two-pixel thick bottom edge. - * - * @param highlight the shadow color, which is used for the lower - * line of the two-pixel thick bottom edge. - */ - public MenuBarBorder(Color shadow, Color highlight) - { - /* These colors usually come from the UIDefaults of the current - * look and feel. Use fallback values if the colors are not - * supplied. The API specification is silent about what - * behavior is expected for null colors, so users should not - * rely on this fallback (which is why it is not documented in - * the above Javadoc). - */ - this.shadow = (shadow != null) ? shadow : Color.gray; - this.highlight = (highlight != null) ? highlight : Color.white; - } - - - /** - * Paints the MenuBarBorder around a given component. - * - * @param c the component whose border is to be painted, usually - * an instance of {@link javax.swing.JMenuBar}. - * - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - Color oldColor; - - /* To understand this code, it might be helpful to look at the - * image "BasicBorders.MenuBarBorder-1.png" that is included - * with the JavaDoc. It is located in the "doc-files" - * subdirectory. - */ - oldColor = g.getColor(); - y = y + height - 2; - try - { - g.setColor(shadow); - g.drawLine(x, y, x + width - 2, y); - g.drawLine(x, y + 1, x, y + 1); - g.drawLine(x + width - 2, y + 1, x + width - 2, y + 1); - - g.setColor(highlight); - g.drawLine(x + 1, y + 1, x + width - 3, y + 1); - g.drawLine(x + width - 1, y, x + width - 1, y + 1); - } - finally - { - g.setColor(oldColor); - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - /* There is no obvious reason for overriding this method, but we - * try to have exactly the same API as the Sun reference - * implementation. - */ - return getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets(Component) - */ - public Insets getBorderInsets(Component c, Insets insets) - { - /* The exact amount has been determined using a test program - * that was run on the Apple/Sun JDK 1.3.1 on MacOS X, and the - * Sun JDK 1.4.1_01 on GNU/Linux for x86. Both gave [0,0,2,0], - * which was expected from looking at the screen shot. - */ - if (insets == null) - return new Insets(0, 0, 2, 0); - - insets.left = insets.right = insets.top = 0; - insets.bottom = 2; - return insets; - } - } - - - /** - * A border for drawing radio buttons in the Basic look and feel. - * - * <p><img src="doc-files/BasicBorders.RadioButtonBorder-1.png" width="300" - * height="135" alt="[A screen shot of this border]" /> - * - * <p>Note about the screen shot: Normally, the - * <code>borderPainted</code> property is <code>false</code> for - * JRadioButtons. For this screen shot, it has been set to - * <code>true</code> so the borders get drawn. Also, a - * concretization of the Basic look and would typically provide - * icons for the various states of radio buttons. - * - * <p>Note that the focus rectangle is invisible If the radio button - * is currently selected. While it might be debatable whether this - * makes a lot of sense, this behavior can be observed in the Sun - * reference implementation (in JDK 1.3.1 and 1.4.1). The Classpath - * implementation tries to exactly replicate the JDK appearance. - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class RadioButtonBorder - extends ButtonBorder - { - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = 1596945751743747369L; - - - /** - * Constructs a new border for drawing a JRadioButton in - * the Basic look and feel. - * - * @param shadow the shadow color. - * @param darkShadow a darker variant of the shadow color. - * @param highlight the highlight color. - * @param lightHighlight a brighter variant of the highlight color. - */ - public RadioButtonBorder(Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - /* The superclass ButtonBorder substitutes null arguments - * with fallback colors. - */ - super(shadow, darkShadow, highlight, lightHighlight); - } - - - /** - * Paints the RadioButtonBorder around a given component. - * - * <p>The Sun implementation always seems to draw exactly - * the same border, irrespective of the state of the button. - * This is rather surprising, but GNU Classpath emulates the - * observable behavior. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - AbstractButton button = null; - ButtonModel bmodel = null; - boolean lowered = false; - boolean focused = false; - - if (c instanceof AbstractButton) - { - button = (AbstractButton) c; - bmodel = button.getModel(); - } - - if (bmodel != null) - { - lowered = button.isSelected() - || (/* mouse inside */ bmodel.isArmed() && bmodel.isPressed()); - focused = button.hasFocus() && button.isFocusPainted(); - } - - if (lowered) - BasicGraphicsUtils.drawLoweredBezel(g, x, y, width, height, - shadow, darkShadow, - highlight, lightHighlight); - else - BasicGraphicsUtils.drawBezel(g, x, y, width, height, - /* isPressed */ false, - /* isPefault */ focused, - shadow, darkShadow, - highlight, lightHighlight); - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - /* There is no obvious reason for overriding this method, but we - * try to have exactly the same API as the Sun reference - * implementation. - */ - return getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets(Component) - */ - public Insets getBorderInsets(Component c, Insets insets) - { - /* The exact amount has been determined using a test program - * that was run on the Apple/Sun JDK 1.3.1 on MacOS X, and the - * Sun JDK 1.4.1_01 on GNU/Linux for x86. Both gave [2,2,2,2]. - */ - if (insets == null) - return new Insets(2, 2, 2, 2); - - insets.left = insets.right = insets.top = insets.bottom = 2; - return insets; - } - } - - - /** - * A one-pixel thick border for rollover buttons, for example in - * tool bars. - * - * @since 1.4 - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class RolloverButtonBorder - extends ButtonBorder - { - /** - * Determined using the <code>serialver</code> tool - * of Sun JDK 1.4.1_01 on GNU/Linux 2.4.20 for x86. - */ - static final long serialVersionUID = 1976364864896996846L; - - - /** - * Constructs a new border for drawing a roll-over button - * in the Basic look and feel. - * - * @param shadow the shadow color. - * @param darkShadow a darker variant of the shadow color. - * @param highlight the highlight color. - * @param lightHighlight a brighter variant of the highlight color. - */ - public RolloverButtonBorder(Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - super(shadow, darkShadow, highlight, lightHighlight); - } - - - /** - * Paints the border around a rollover button. If <code>c</code> - * is not an {@link javax.swing.AbstractButton} whose model - * returns <code>true</code> for {@link - * javax.swing.ButtonModel#isRollover}, nothing gets painted at - * all. - * - * @param c the button whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - ButtonModel bmodel = null; - boolean drawPressed; - Color oldColor = g.getColor(); - int x2, y2; - - if (c instanceof AbstractButton) - bmodel = ((AbstractButton) c).getModel(); - - /* Draw nothing if c is not a rollover button. */ - if ((bmodel == null) || !bmodel.isRollover()) - return; - - /* Draw nothing if the mouse is pressed, but outside the button. */ - if (bmodel.isPressed() && !bmodel.isArmed()) - return; - - drawPressed = bmodel.isSelected() || bmodel.isPressed(); - x2 = x + width - 1; - y2 = y + height - 1; - - try - { - g.setColor(drawPressed ? shadow : lightHighlight); - g.drawLine(x, y, x2 - 1, y); // top edge - g.drawLine(x, y + 1, x, y2 - 1); // left edge - - g.setColor(drawPressed ? lightHighlight : shadow); - g.drawLine(x, y2, x2, y2); // bottom edge - g.drawLine(x2, y, x2, y2 - 1); // right edge - } - finally - { - g.setColor(oldColor); - } - } - } - - - /** - * A border for JSplitPanes in the Basic look and feel. The divider - * in the middle of the JSplitPane has its own border class, of which - * an instance can be obtained with {@link #getSplitPaneDividerBorder()}. - * - * <p><img src="doc-files/BasicBorders.SplitPaneBorder-1.png" width="520" - * height="200" alt="[A screen shot for JSplitPane.HORIZONTAL_SPLIT]" /> - * - * <p><img src="doc-files/BasicBorders.SplitPaneBorder-2.png" width="520" - * height="200" alt="[A screen shot for JSplitPane.VERTICAL_SPLIT]" /> - * - * <p>In contrast to the other borders of the Basic look and feel, - * this class is not serializable. While this might be unintended, - * GNU Classpath follows the specification in order to be fully - * compatible with the Sun reference implementation. - * - * <p>In the Sun JDK, the bottom edge of the divider also gets - * painted if the orientation of the enclosed JSplitPane is - * <code>JSplitPane.VERTICAL_SPLIT</code> (at least in versions - * 1.3.1 and 1.4.1). GNU Classpath does not replicate this bug. A - * report has been filed with Sun (bug ID 4885629). - * - * <p>Note that the bottom left pixel of the border has a different - * color depending on the orientation of the enclosed JSplitPane. - * Although this is visually inconsistent, Classpath replicates the - * appearance of the Sun reference implementation. A bug report has - * been filed with Sun (review ID 188774). - * - * @see #getSplitPaneBorder() - * @see #getSplitPaneDividerBorder() - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class SplitPaneBorder implements Border, UIResource - { - /** - * Indicates that the top edge shall be not be painted - * by {@link #paintRect}. - */ - private static final int SUPPRESS_TOP = 1; - - - /** - * Indicates that the left edge shall be not be painted - * by {@link #paintRect}. - */ - private static final int SUPPRESS_LEFT = 2; - - - /** - * Indicates that the bottom edge shall be not be painted - * by {@link #paintRect}. - */ - private static final int SUPPRESS_BOTTOM = 4; - - - /** - * Indicates that the right edge shall be not be painted - * by {@link #paintRect}. - */ - private static final int SUPPRESS_RIGHT = 8; - - - /** - * The color for drawing the bottom and right edges of the border. - */ - protected Color highlight; - - - /** - * The color for drawing the top and left edges of the border. - */ - protected Color shadow; - - - /** - * Constructs a new border for drawing a JSplitPane in the Basic - * look and feel. The divider in the middle of the JSplitPane has - * its own border class, <code>SplitPaneDividerBorder</code>. - * - * @param shadow the shadow color. - * @param highlight the highlight color. - */ - public SplitPaneBorder(Color highlight, Color shadow) - { - /* These colors usually come from the UIDefaults of the current - * look and feel. Use fallback values if the colors are not - * supplied. The API specification is silent about what - * behavior is expected for null colors, so users should not - * rely on this fallback (which is why it is not documented in - * the above Javadoc). - */ - this.shadow = (shadow != null) ? shadow : Color.black; - this.highlight = (highlight != null) ? highlight : Color.white; - } - - - /** - * Paints the border around a <code>JSplitPane</code>. - * - * <p><img src="doc-files/BasicBorders.SplitPaneBorder-1.png" width="520" - * height="200" alt="[A screen shot for JSplitPane.HORIZONTAL_SPLIT]" /> - * - * <p><img src="doc-files/BasicBorders.SplitPaneBorder-2.png" width="520" - * height="200" alt="[A screen shot for JSplitPane.VERTICAL_SPLIT]" /> - * - * @param c the <code>JSplitPane</code> whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - JSplitPane splitPane; - Component content; - - if (!(c instanceof JSplitPane)) - return; - - splitPane = (JSplitPane) c; - switch (splitPane.getOrientation()) - { - case JSplitPane.HORIZONTAL_SPLIT: - if ((content = splitPane.getLeftComponent()) != null) - paintRect(g, SUPPRESS_RIGHT, true, x, y, content.getBounds()); - if ((content = splitPane.getRightComponent()) != null) - paintRect(g, SUPPRESS_LEFT, true, x, y, content.getBounds()); - break; - - case JSplitPane.VERTICAL_SPLIT: - if ((content = splitPane.getTopComponent()) != null) - paintRect(g, SUPPRESS_BOTTOM, false, x, y, content.getBounds()); - if ((content = splitPane.getBottomComponent()) != null) - paintRect(g, SUPPRESS_TOP, false, x, y, content.getBounds()); - break; - } - } - - - /** - * Paints a border around a child of a <code>JSplitPane</code>, - * omitting some of the edges. - * - * @param g the graphics for painting. - * - * @param suppress a bit mask indicating the set of suppressed - * edges, for example <code>SUPPRESS_TOP | SUPPRESS_RIGHT</code>. - * - * @param x the x coordinate of the SplitPaneBorder. - * - * @param y the y coordinate of the SplitPaneBorder. - * - * @param shadeBottomLeftPixel <code>true</code> to paint the - * bottom left pixel in the shadow color, - * <code>false</code> for the highlight color. The Basic - * look and feel uses the highlight color for the bottom - * left pixel of the border of a JSplitPane whose - * orientation is VERTICAL_SPLIT, and the shadow color - * otherwise. While this might be a strange distinction, - * Classpath tries to look identical to the reference - * implementation. A bug report has been filed with Sun; - * its review ID is 188774. We currently replicate the - * Sun behavior. - * - * @param rect the bounds of the child of JSplitPane whose - * border is to be painted. - */ - private void paintRect(Graphics g, int suppress, - boolean shadeBottomLeftPixel, - int x, int y, - Rectangle rect) - { - if (rect == null) - return; - - /* On each edge, the border exceeds the enclosed child by one - * pixel. See the image "BasicBorders.SplitPaneBorder-1.png" in - * the directory "doc-files". - */ - x += rect.x - 1; - y += rect.y - 1; - int right = x + rect.width + 1; - int bottom = y + rect.height + 1; - - Color oldColor = g.getColor(); - try - { - g.setColor(shadow); - if ((suppress & SUPPRESS_TOP) == 0) - g.drawLine(x, y, right, y); - if ((suppress & SUPPRESS_LEFT) == 0) - g.drawLine(x, y, x, bottom); - else - g.drawLine(x, bottom, x, bottom); // one pixel - - g.setColor(highlight); - if ((suppress & SUPPRESS_BOTTOM) == 0) - g.drawLine(x + (shadeBottomLeftPixel ? 1 : 0), bottom, right, bottom); - else if (!shadeBottomLeftPixel) - g.drawLine(x, bottom, x, bottom); // one pixel - - if ((suppress & SUPPRESS_RIGHT) == 0) - g.drawLine(right, y, right, bottom); - } - finally - { - g.setColor(oldColor); - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured, usually - * an instance of {@link javax.swing.JSplitPane}. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - */ - public Insets getBorderInsets(Component c) - { - return new Insets(1, 1, 1, 1); - } - - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * @return <code>false</code> because this border does not - * paint over the pixels where the divider joins - * the border. - */ - public boolean isBorderOpaque() - { - /* Strangely, the Sun implementation (tested with JDK 1.3.1 and - * 1.4.1_01) seems to always return true. It could be a bug, - * but without knowing the details of their implementation, it is - * hard to decide. - */ - return false; - } - } - - - /** - * A border for the divider inside a JSplitPane. - * - * <p><img src="doc-files/BasicBorders.SplitPaneDividerBorder-1.png" - * width="520" height="200" alt="[A screen shot of this border]" /> - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - private static class SplitPaneDividerBorder - implements Border, UIResource, Serializable - { - /** - * Constructs a new border for drawing the divider of a JSplitPane - * in the Basic look and feel. The outer parts of the JSplitPane have - * their own border class, <code>SplitPaneBorder</code>. - */ - public SplitPaneDividerBorder() - { - // Nothing to do here. - } - - /** - * Paints the border around the divider of a <code>JSplitPane</code>. - * - * <p><img src="doc-files/BasicBorders.SplitPaneDividerBorder-1.png" - * width="520" height="200" alt="[A picture that shows which pixels - * get painted in what color]" /> - * - * @param c the <code>JSplitPane</code> whose divider’s border - * is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - Color highlight = UIManager.getColor("SplitPane.highlight"); - Color shadow = UIManager.getColor("SplitPane.shadow"); - Color oldColor, dcol; - int x2, y2; - JSplitPane sp; - - sp = getSplitPane(c); - if (sp == null) - return; - - x2 = x + width - 1; - y2 = y + height - 1; - oldColor = g.getColor(); - dcol = c.getBackground(); - try - { - switch (sp.getOrientation()) - { - case JSplitPane.HORIZONTAL_SPLIT: - g.setColor(dcol); - g.drawLine(x + 1, y, x2 - 1, y); - g.drawLine(x + 1, y2, x2 - 1, y2); - g.setColor(sp.getLeftComponent() != null ? highlight : dcol); - g.drawLine(x, y, x, y2); - g.setColor(sp.getRightComponent() != null ? shadow : dcol); - g.drawLine(x2, y, x2, y2); - break; - - case JSplitPane.VERTICAL_SPLIT: - g.setColor(dcol); - g.drawLine(x, y + 1, x, y2 - 1); - g.drawLine(x2, y + 1, x2, y2 - 1); - g.setColor(sp.getTopComponent() != null ? highlight : dcol); - g.drawLine(x, y, x2, y); - g.setColor(sp.getBottomComponent() != null ? shadow : dcol); - g.drawLine(x, y2, x2, y2); - break; - } - } - finally - { - g.setColor(oldColor); - } - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured, usually - * an instance of {@link javax.swing.JSplitPane}. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - */ - public Insets getBorderInsets(Component c) - { - return new Insets(1, 1, 1, 1); - } - - /** - * Determines whether this border fills every pixel in its area - * when painting. - * - * @return <code>true</code> - */ - public boolean isBorderOpaque() - { - return true; - } - - - /** - * Determines the JSplitPane whose divider is being painted. - * - * @param c an instance of BasicSplitPaneDivider. - * - * @return a <code>JSplitPane</code>, or <code>null</code> if - * <code>c</code> is not an instance of {@link - * javax.swing.plaf.basic.BasicSplitPaneDivider}. - */ - private JSplitPane getSplitPane(Component c) - { - if (c instanceof BasicSplitPaneDivider) - return (((BasicSplitPaneDivider) c).getBasicSplitPaneUI()) - .getSplitPane(); - else - return null; - } - } - - - /** - * A border for toggle buttons in the Basic look and feel. - * - * <p><img src="doc-files/BasicBorders.ToggleButtonBorder-1.png" - * width="270" height="135" alt="[A screen shot of this border]" /> - * - * <p>The Sun implementation always seems to draw exactly - * the same border, irrespective of the state of the button. - * This is rather surprising, but GNU Classpath emulates the - * observable behavior. - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ - public static class ToggleButtonBorder - extends ButtonBorder - { - /** - * Determined using the <code>serialver</code> tool - * of Apple/Sun JDK 1.3.1 on MacOS X 10.1.5. - */ - static final long serialVersionUID = -3528666548001058394L; - - - /** - * Constructs a new border for drawing a JToggleButton in - * the Basic look and feel. - * - * @param shadow the shadow color. - * @param darkShadow a darker variant of the shadow color. - * @param highlight the highlight color. - * @param lightHighlight a brighter variant of the highlight color. - */ - public ToggleButtonBorder(Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - /* The superclass ButtonBorder substitutes null arguments - * with fallback colors. - */ - super(shadow, darkShadow, highlight, lightHighlight); - } - - - /** - * Paints the ToggleButtonBorder around a given component. - * - * <p>The Sun implementation always seems to draw exactly - * the same border, irrespective of the state of the button. - * This is rather surprising, but GNU Classpath emulates the - * observable behavior. - * - * @param c the component whose border is to be painted. - * @param g the graphics for painting. - * @param x the horizontal position for painting the border. - * @param y the vertical position for painting the border. - * @param width the width of the available area for painting the border. - * @param height the height of the available area for painting the border. - * - * @see javax.swing.plaf.basic.BasicGraphicsUtils#drawBezel - */ - public void paintBorder(Component c, Graphics g, - int x, int y, int width, int height) - { - /* The author of this code tried various variants for setting - * the state of the enclosed JToggleButton, but it seems that - * the drawn border is always identical. Weird, because this - * means that the user does not see whether the JToggleButton - * is selected or not. - */ - BasicGraphicsUtils.drawBezel(g, x, y, width, height, - /* pressed */ false, - /* default */ false, - shadow, darkShadow, - highlight, lightHighlight); - } - - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - /* There is no obvious reason for overriding this method, but we - * try to have exactly the same API as the Sun reference - * implementation. - */ - return getBorderInsets(c, null); - } - - - /** - * Measures the width of this border, storing the results into a - * pre-existing Insets object. - * - * @param insets an Insets object for holding the result values. - * After invoking this method, the <code>left</code>, - * <code>right</code>, <code>top</code> and - * <code>bottom</code> fields indicate the width of the - * border at the respective edge. - * - * @return the same object that was passed for <code>insets</code>. - * - * @see #getBorderInsets(Component) - */ - public Insets getBorderInsets(Component c, Insets insets) - { - /* The exact amount has been determined using a test program - * that was run on the Apple/Sun JDK 1.3.1 on MacOS X, and the - * Sun JDK 1.4.1_01 on GNU/Linux for x86. Both gave [2,2,2,2]. - */ - if (insets == null) - return new Insets(2, 2, 2, 2); - - insets.left = insets.right = insets.top = insets.bottom = 2; - return insets; - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java b/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java deleted file mode 100644 index 22033b6..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicButtonListener.java +++ /dev/null @@ -1,370 +0,0 @@ -/* BasicButtonListener.java -- - Copyright (C) 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.plaf.basic; - -import gnu.classpath.SystemProperties; - -import java.awt.event.ActionEvent; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.awt.font.FontRenderContext; -import java.awt.font.TextLayout; -import java.awt.geom.AffineTransform; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.AbstractButton; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.ButtonModel; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ButtonUI; - -public class BasicButtonListener - implements MouseListener, MouseMotionListener, FocusListener, ChangeListener, - PropertyChangeListener -{ - /** - * Implements the keyboard action for Swing buttons. - */ - private class ButtonAction - extends AbstractAction - { - /** - * The key for pressed action. - */ - static final String PRESSED = "pressed"; - - /** - * The key for released action. - */ - static final String RELEASED = "released"; - - /** - * Performs the action. - */ - public void actionPerformed(ActionEvent event) - { - Object cmd = getValue("__command__"); - AbstractButton b = (AbstractButton) event.getSource(); - ButtonModel m = b.getModel(); - if (PRESSED.equals(cmd)) - { - m.setArmed(true); - m.setPressed(true); - if (! b.isFocusOwner()) - b.requestFocus(); - } - else if (RELEASED.equals(cmd)) - { - m.setPressed(false); - m.setArmed(false); - } - } - - /** - * Indicates if this action is enabled. - * - * @param source the source of the action - * - * @return <code>true</code> when enabled, <code>false</code> otherwise - */ - public boolean isEnabled(Object source) - { - boolean enabled = true; - if (source instanceof AbstractButton) - { - AbstractButton b = (AbstractButton) source; - enabled = b.isEnabled(); - } - return enabled; - } - } - - public BasicButtonListener(AbstractButton b) - { - // Do nothing here. - } - - public void propertyChange(PropertyChangeEvent e) - { - // Store the TextLayout for this in a client property for speed-up - // painting of the label. - String property = e.getPropertyName(); - AbstractButton b = (AbstractButton) e.getSource(); - if ((property.equals(AbstractButton.TEXT_CHANGED_PROPERTY) - || property.equals("font")) - && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") - == null) - { - String text = b.getText(); - if (text == null) - text = ""; - FontRenderContext frc = new FontRenderContext(new AffineTransform(), - false, false); - TextLayout layout = new TextLayout(text, b.getFont(), frc); - b.putClientProperty(BasicGraphicsUtils.CACHED_TEXT_LAYOUT, layout); - - // Update HTML renderer. - BasicHTML.updateRenderer(b, b.getText()); - } - else if (property.equals(AbstractButton.CONTENT_AREA_FILLED_CHANGED_PROPERTY)) - { - checkOpacity(b); - } - } - - /** - * Checks the <code>contentAreaFilled</code> property and updates the - * opaque property of the button. - * - * @param b the button to check - */ - protected void checkOpacity(AbstractButton b) - { - b.setOpaque(b.isContentAreaFilled()); - } - - public void focusGained(FocusEvent e) - { - if (e.getSource() instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) e.getSource(); - if (button.isFocusPainted()) - button.repaint(); - } - } - - public void focusLost(FocusEvent e) - { - if (e.getSource() instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) e.getSource(); - if (button.isFocusPainted()) - button.repaint(); - } - } - - public void installKeyboardActions(JComponent c) - { - ButtonUI ui = ((AbstractButton) c).getUI(); - if (ui instanceof BasicButtonUI) - { - // Install InputMap. - BasicButtonUI basicUI = (BasicButtonUI) ui; - String prefix = basicUI.getPropertyPrefix(); - InputMap focusInputMap = - (InputMap) UIManager.get(prefix + "focusInputMap"); - SwingUtilities.replaceUIInputMap(c, JComponent.WHEN_FOCUSED, - focusInputMap); - - ActionMap am = (ActionMap) UIManager.get(prefix + "actionMap"); - if (am == null) - { - am = createDefaultActionMap(); - UIManager.put(prefix + "actionMap", am); - } - SwingUtilities.replaceUIActionMap(c, am); - } - - c.getActionMap().put("pressed", - new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - AbstractButton button = (AbstractButton) e.getSource(); - ButtonModel model = button.getModel(); - // It is important that these transitions happen in this order. - model.setArmed(true); - model.setPressed(true); - } - }); - - c.getActionMap().put("released", - new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - AbstractButton button = (AbstractButton) e.getSource(); - ButtonModel model = button.getModel(); - // It is important that these transitions happen in this order. - model.setPressed(false); - model.setArmed(false); - } - }); - } - - /** - * Creates and returns the default action map for Swing buttons. - * - * @return the default action map for Swing buttons - */ - private ActionMap createDefaultActionMap() - { - Action action = new ButtonAction(); - ActionMapUIResource am = new ActionMapUIResource(); - am.put(ButtonAction.PRESSED, action); - am.put(ButtonAction.RELEASED, action); - return am; - } - - public void uninstallKeyboardActions(JComponent c) - { - SwingUtilities.replaceUIActionMap(c, null); - SwingUtilities.replaceUIInputMap(c, JComponent.WHEN_FOCUSED, null); - } - - public void stateChanged(ChangeEvent e) - { - // Need to repaint when the button state changes. - ((AbstractButton) e.getSource()).repaint(); - } - - public void mouseMoved(MouseEvent e) - { - // Nothing to do here. - } - - public void mouseDragged(MouseEvent e) - { - // Nothing to do here. - } - - public void mouseClicked(MouseEvent e) - { - // Nothing to do here. - } - - /** - * Accept a mouse press event and arm the button. - * - * @param e The mouse press event to accept - */ - public void mousePressed(MouseEvent e) - { - if (e.getSource() instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) e.getSource(); - ButtonModel model = button.getModel(); - if (SwingUtilities.isLeftMouseButton(e)) - { - // It is important that these transitions happen in this order. - model.setArmed(true); - model.setPressed(true); - - if (! button.isFocusOwner() && button.isRequestFocusEnabled()) - button.requestFocus(); - } - } - } - - /** - * Accept a mouse release event and set the button's - * "pressed" property to <code>true</code>, if the model - * is armed. If the model is not armed, ignore the event. - * - * @param e The mouse release event to accept - */ - public void mouseReleased(MouseEvent e) - { - if (e.getSource() instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) e.getSource(); - ButtonModel model = button.getModel(); - if (e.getButton() == MouseEvent.BUTTON1) - { - // It is important that these transitions happen in this order. - model.setPressed(false); - model.setArmed(false); - } - } - } - - /** - * Accept a mouse enter event and set the button's "rollover" property to - * <code>true</code>, if the button's "rolloverEnabled" property is - * <code>true</code>. If the button is currently armed and the mouse - * button is not held down, this enter event will also disarm the model. - * - * @param e The mouse enter event to accept - */ - public void mouseEntered(MouseEvent e) - { - if (e.getSource() instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) e.getSource(); - ButtonModel model = button.getModel(); - if (button.isRolloverEnabled() - && ! SwingUtilities.isLeftMouseButton(e)) - model.setRollover(true); - - if (model.isPressed()) - model.setArmed(true); - } - } - - /** - * Accept a mouse exit event and set the button's model's "rollover" - * property to <code>false</code>, if it's "rolloverEnabled" property is - * <code>true</code>. Also disarm the button. - * - * @param e The mouse exit event to accept - */ - public void mouseExited(MouseEvent e) - { - if (e.getSource() instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) e.getSource(); - ButtonModel model = button.getModel(); - if (button.isRolloverEnabled()) - model.setRollover(false); - model.setArmed(false); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java deleted file mode 100644 index 1697c24..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicButtonUI.java +++ /dev/null @@ -1,636 +0,0 @@ -/* BasicButtonUI.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.plaf.basic; - -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractButton; -import javax.swing.ButtonModel; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ButtonUI; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.text.View; - -/** - * A UI delegate for the {@link JButton} component. - */ -public class BasicButtonUI extends ButtonUI -{ - /** - * Cached rectangle for layouting the label. Used in paint() and - * BasicGraphicsUtils.getPreferredButtonSize(). - */ - static Rectangle viewR = new Rectangle(); - - /** - * Cached rectangle for layouting the label. Used in paint() and - * BasicGraphicsUtils.getPreferredButtonSize(). - */ - static Rectangle iconR = new Rectangle(); - - /** - * Cached rectangle for layouting the label. Used in paint() and - * BasicGraphicsUtils.getPreferredButtonSize(). - */ - static Rectangle textR = new Rectangle(); - - /** - * Cached Insets instance, used in paint(). - */ - static Insets cachedInsets; - - /** - * The shared button UI. - */ - private static BasicButtonUI sharedUI; - - /** - * The shared BasicButtonListener. - */ - private static BasicButtonListener sharedListener; - - /** - * A constant used to pad out elements in the button's layout and - * preferred size calculations. - */ - protected int defaultTextIconGap = 4; - - /** - * A constant added to the defaultTextIconGap to adjust the text - * within this particular button. - */ - protected int defaultTextShiftOffset; - - private int textShiftOffset; - - /** - * Factory method to create an instance of BasicButtonUI for a given - * {@link JComponent}, which should be an {@link AbstractButton}. - * - * @param c The component. - * - * @return A new UI capable of drawing the component - */ - public static ComponentUI createUI(final JComponent c) - { - if (sharedUI == null) - sharedUI = new BasicButtonUI(); - return sharedUI; - } - - /** - * Returns the default gap between the button's text and icon (in pixels). - * - * @param b the button (ignored). - * - * @return The gap. - */ - public int getDefaultTextIconGap(AbstractButton b) - { - return defaultTextIconGap; - } - - /** - * Sets the text shift offset to zero. - * - * @see #setTextShiftOffset() - */ - protected void clearTextShiftOffset() - { - textShiftOffset = 0; - } - - /** - * Returns the text shift offset. - * - * @return The text shift offset. - * - * @see #clearTextShiftOffset() - * @see #setTextShiftOffset() - */ - protected int getTextShiftOffset() - { - return textShiftOffset; - } - - /** - * Sets the text shift offset to the value in {@link #defaultTextShiftOffset}. - * - * @see #clearTextShiftOffset() - */ - protected void setTextShiftOffset() - { - textShiftOffset = defaultTextShiftOffset; - } - - /** - * Returns the prefix for the UI defaults property for this UI class. - * This is 'Button' for this class. - * - * @return the prefix for the UI defaults property - */ - protected String getPropertyPrefix() - { - return "Button."; - } - - /** - * Installs the default settings. - * - * @param b the button (<code>null</code> not permitted). - */ - protected void installDefaults(AbstractButton b) - { - String prefix = getPropertyPrefix(); - // Install colors and font. - LookAndFeel.installColorsAndFont(b, prefix + "background", - prefix + "foreground", prefix + "font"); - // Install border. - LookAndFeel.installBorder(b, prefix + "border"); - - // Install margin property. - if (b.getMargin() == null || b.getMargin() instanceof UIResource) - b.setMargin(UIManager.getInsets(prefix + "margin")); - - // Install rollover property. - Object rollover = UIManager.get(prefix + "rollover"); - if (rollover != null) - LookAndFeel.installProperty(b, "rolloverEnabled", rollover); - - // Fetch default textShiftOffset. - defaultTextShiftOffset = UIManager.getInt(prefix + "textShiftOffset"); - - // Make button opaque if needed. - if (b.isContentAreaFilled()) - LookAndFeel.installProperty(b, "opaque", Boolean.TRUE); - else - LookAndFeel.installProperty(b, "opaque", Boolean.FALSE); - } - - /** - * Removes the defaults added by {@link #installDefaults(AbstractButton)}. - * - * @param b the button (<code>null</code> not permitted). - */ - protected void uninstallDefaults(AbstractButton b) - { - // The other properties aren't uninstallable. - LookAndFeel.uninstallBorder(b); - } - - /** - * Creates and returns a new instance of {@link BasicButtonListener}. This - * method provides a hook to make it easy for subclasses to install a - * different listener. - * - * @param b the button. - * - * @return A new listener. - */ - protected BasicButtonListener createButtonListener(AbstractButton b) - { - // Note: The RI always returns a new instance here. However, - // the BasicButtonListener class is perfectly suitable to be shared - // between multiple buttons, so we return a shared instance here - // for efficiency. - if (sharedListener == null) - sharedListener = new BasicButtonListener(b); - return sharedListener; - } - - /** - * Installs listeners for the button. - * - * @param b the button (<code>null</code> not permitted). - */ - protected void installListeners(AbstractButton b) - { - BasicButtonListener listener = createButtonListener(b); - if (listener != null) - { - b.addChangeListener(listener); - b.addPropertyChangeListener(listener); - b.addFocusListener(listener); - b.addMouseListener(listener); - b.addMouseMotionListener(listener); - } - // Fire synthetic property change event to let the listener update - // the TextLayout cache. - listener.propertyChange(new PropertyChangeEvent(b, "font", null, - b.getFont())); - } - - /** - * Uninstalls listeners for the button. - * - * @param b the button (<code>null</code> not permitted). - */ - protected void uninstallListeners(AbstractButton b) - { - BasicButtonListener listener = getButtonListener(b); - if (listener != null) - { - b.removeChangeListener(listener); - b.removePropertyChangeListener(listener); - b.removeFocusListener(listener); - b.removeMouseListener(listener); - b.removeMouseMotionListener(listener); - } - } - - protected void installKeyboardActions(AbstractButton b) - { - BasicButtonListener listener = getButtonListener(b); - if (listener != null) - listener.installKeyboardActions(b); - } - - protected void uninstallKeyboardActions(AbstractButton b) - { - BasicButtonListener listener = getButtonListener(b); - if (listener != null) - listener.uninstallKeyboardActions(b); - } - - /** - * Install the BasicButtonUI as the UI for a particular component. - * This means registering all the UI's listeners with the component, - * and setting any properties of the button which are particular to - * this look and feel. - * - * @param c The component to install the UI into - */ - public void installUI(final JComponent c) - { - super.installUI(c); - if (c instanceof AbstractButton) - { - AbstractButton b = (AbstractButton) c; - installDefaults(b); - // It is important to install the listeners before installing - // the keyboard actions, because the keyboard actions - // are actually installed on the listener instance. - installListeners(b); - installKeyboardActions(b); - BasicHTML.updateRenderer(b, b.getText()); - } - } - - /** - * Uninstalls the UI from the component. - * - * @param c the component from which to uninstall the UI - */ - public void uninstallUI(JComponent c) - { - if (c instanceof AbstractButton) - { - AbstractButton b = (AbstractButton) c; - uninstallKeyboardActions(b); - uninstallListeners(b); - uninstallDefaults(b); - BasicHTML.updateRenderer(b, ""); - b.putClientProperty(BasicGraphicsUtils.CACHED_TEXT_LAYOUT, null); - } - } - - /** - * Calculates the minimum size for the specified component. - * - * @param c the component for which to compute the minimum size - * - * @return the minimum size for the specified component - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension size = getPreferredSize(c); - // When the HTML view has a minimum width different from the preferred - // width, then substract this here accordingly. The height is not - // affected by that. - View html = (View) c.getClientProperty(BasicHTML.propertyKey); - if (html != null) - { - size.width -= html.getPreferredSpan(View.X_AXIS) - - html.getPreferredSpan(View.X_AXIS); - } - return size; - } - - /** - * Calculates the maximum size for the specified component. - * - * @param c the component for which to compute the maximum size - * - * @return the maximum size for the specified component - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension size = getPreferredSize(c); - // When the HTML view has a maximum width different from the preferred - // width, then add this here accordingly. The height is not - // affected by that. - View html = (View) c.getClientProperty(BasicHTML.propertyKey); - if (html != null) - { - size.width += html.getMaximumSpan(View.X_AXIS) - - html.getPreferredSpan(View.X_AXIS); - } - return size; - } - - /** - * Calculate the preferred size of this component, by delegating to - * {@link BasicGraphicsUtils#getPreferredButtonSize}. - * - * @param c The component to measure - * - * @return The preferred dimensions of the component - */ - public Dimension getPreferredSize(JComponent c) - { - AbstractButton b = (AbstractButton) c; - Dimension d = BasicGraphicsUtils.getPreferredButtonSize(b, - b.getIconTextGap()); - return d; - } - - static Icon currentIcon(AbstractButton b) - { - Icon i = b.getIcon(); - ButtonModel model = b.getModel(); - - if (model.isPressed() && b.getPressedIcon() != null && b.isEnabled()) - i = b.getPressedIcon(); - - else if (model.isRollover()) - { - if (b.isSelected() && b.getRolloverSelectedIcon() != null) - i = b.getRolloverSelectedIcon(); - else if (b.getRolloverIcon() != null) - i = b.getRolloverIcon(); - } - - else if (b.isSelected() && b.isEnabled()) - { - if (b.isEnabled() && b.getSelectedIcon() != null) - i = b.getSelectedIcon(); - else if (b.getDisabledSelectedIcon() != null) - i = b.getDisabledSelectedIcon(); - } - - else if (! b.isEnabled() && b.getDisabledIcon() != null) - i = b.getDisabledIcon(); - - return i; - } - - /** - * Paint the component, which is an {@link AbstractButton}, according to - * its current state. - * - * @param g The graphics context to paint with - * @param c The component to paint the state of - */ - public void paint(Graphics g, JComponent c) - { - AbstractButton b = (AbstractButton) c; - - Insets i = c.getInsets(cachedInsets); - viewR.x = i.left; - viewR.y = i.top; - viewR.width = c.getWidth() - i.left - i.right; - viewR.height = c.getHeight() - i.top - i.bottom; - textR.x = 0; - textR.y = 0; - textR.width = 0; - textR.height = 0; - iconR.x = 0; - iconR.y = 0; - iconR.width = 0; - iconR.height = 0; - - Font f = c.getFont(); - g.setFont(f); - Icon icon = b.getIcon(); - String text = b.getText(); - text = SwingUtilities.layoutCompoundLabel(c, g.getFontMetrics(f), - text, icon, - b.getVerticalAlignment(), - b.getHorizontalAlignment(), - b.getVerticalTextPosition(), - b.getHorizontalTextPosition(), - viewR, iconR, textR, - text == null ? 0 - : b.getIconTextGap()); - - ButtonModel model = b.getModel(); - if (model.isArmed() && model.isPressed()) - paintButtonPressed(g, b); - - if (icon != null) - paintIcon(g, c, iconR); - if (text != null) - { - View html = (View) b.getClientProperty(BasicHTML.propertyKey); - if (html != null) - html.paint(g, textR); - else - paintText(g, b, textR, text); - } - if (b.isFocusOwner() && b.isFocusPainted()) - paintFocus(g, b, viewR, textR, iconR); - } - - /** - * Paint any focus decoration this {@link JComponent} might have. The - * component, which in this case will be an {@link AbstractButton}, - * should only have focus decoration painted if it has the focus, and its - * "focusPainted" property is <code>true</code>. - * - * @param g Graphics context to paint with - * @param b Button to paint the focus of - * @param vr Visible rectangle, the area in which to paint - * @param tr Text rectangle, contained in visible rectangle - * @param ir Icon rectangle, contained in visible rectangle - * - * @see AbstractButton#isFocusPainted() - * @see JComponent#hasFocus() - */ - protected void paintFocus(Graphics g, AbstractButton b, Rectangle vr, - Rectangle tr, Rectangle ir) - { - // In the BasicLookAndFeel no focus border is drawn. This can be - // overridden in subclasses to implement such behaviour. - } - - /** - * Paint the icon for this component. Depending on the state of the - * component and the availability of the button's various icon - * properties, this might mean painting one of several different icons. - * - * @param g Graphics context to paint with - * @param c Component to paint the icon of - * @param iconRect Rectangle in which the icon should be painted - */ - protected void paintIcon(Graphics g, JComponent c, Rectangle iconRect) - { - AbstractButton b = (AbstractButton) c; - Icon i = currentIcon(b); - - if (i != null) - { - ButtonModel m = b.getModel(); - if (m.isPressed() && m.isArmed()) - { - int offs = getTextShiftOffset(); - i.paintIcon(c, g, iconRect.x + offs, iconRect.y + offs); - } - else - i.paintIcon(c, g, iconRect.x, iconRect.y); - } - } - - /** - * Paints the background area of an {@link AbstractButton} in the pressed - * state. This means filling the supplied area with a darker than normal - * background. - * - * @param g The graphics context to paint with - * @param b The button to paint the state of - */ - protected void paintButtonPressed(Graphics g, AbstractButton b) - { - if (b.isContentAreaFilled() && b.isOpaque()) - { - Rectangle area = new Rectangle(); - SwingUtilities.calculateInnerArea(b, area); - g.setColor(UIManager.getColor(getPropertyPrefix() + "shadow")); - g.fillRect(area.x, area.y, area.width, area.height); - } - } - - /** - * Paints the "text" property of an {@link AbstractButton}. - * - * @param g The graphics context to paint with - * @param c The component to paint the state of - * @param textRect The area in which to paint the text - * @param text The text to paint - */ - protected void paintText(Graphics g, JComponent c, Rectangle textRect, - String text) - { - AbstractButton b = (AbstractButton) c; - Font f = b.getFont(); - g.setFont(f); - FontMetrics fm = g.getFontMetrics(f); - - if (b.isEnabled()) - { - g.setColor(b.getForeground()); - // FIXME: Underline mnemonic. - BasicGraphicsUtils.drawString(b, g, text, -1, textRect.x, - textRect.y + fm.getAscent()); - } - else - { - String prefix = getPropertyPrefix(); - g.setColor(UIManager.getColor(prefix + "disabledText")); - // FIXME: Underline mnemonic. - BasicGraphicsUtils.drawString(b, g, text, -1, textRect.x, - textRect.y + fm.getAscent()); - } - } - - /** - * Paints the "text" property of an {@link AbstractButton}. - * - * @param g The graphics context to paint with - * @param b The button to paint the state of - * @param textRect The area in which to paint the text - * @param text The text to paint - * - * @since 1.4 - */ - protected void paintText(Graphics g, AbstractButton b, Rectangle textRect, - String text) - { - paintText(g, (JComponent) b, textRect, text); - } - - /** - * A helper method that finds the BasicButtonListener for the specified - * button. This is there because this UI class is stateless and - * shared for all buttons, and thus can't store the listener - * as instance field. (We store our shared instance in sharedListener, - * however, subclasses may override createButtonListener() and we would - * be lost in this case). - * - * @param b the button - * - * @return the UI event listener - */ - private BasicButtonListener getButtonListener(AbstractButton b) - { - // The listener gets installed as PropertyChangeListener, - // so look for it in the list of property change listeners. - PropertyChangeListener[] listeners = b.getPropertyChangeListeners(); - BasicButtonListener l = null; - for (int i = 0; listeners != null && l == null && i < listeners.length; - i++) - { - if (listeners[i] instanceof BasicButtonListener) - l = (BasicButtonListener) listeners[i]; - } - return l; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java deleted file mode 100644 index 79ce7b8..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.java +++ /dev/null @@ -1,102 +0,0 @@ -/* BasicCheckBoxMenuItemUI.java -- - Copyright (C) 2002, 2004 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.plaf.basic; - -import java.awt.event.MouseEvent; - -import javax.swing.JComponent; -import javax.swing.JMenuItem; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; - -/** - * DOCUMENT ME! - */ -public class BasicCheckBoxMenuItemUI extends BasicMenuItemUI -{ - - /** - * Creates a new BasicCheckBoxMenuItemUI object. - */ - public BasicCheckBoxMenuItemUI() - { - super(); - } - - /** - * Factory method to create a BasicCheckBoxMenuItemUI for the given {@link - * JComponent}, which should be a JCheckBoxMenuItem - * - * @param c The {@link JComponent} a UI is being created for. - * - * @return A BasicCheckBoxMenuItemUI for the {@link JComponent}. - */ - public static ComponentUI createUI(final JComponent c) - { - return new BasicCheckBoxMenuItemUI(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "CheckBoxMenuItem" - */ - protected String getPropertyPrefix() - { - return "CheckBoxMenuItem"; - } - - /** - * DOCUMENT ME! - * - * @param item DOCUMENT ME! - * @param e DOCUMENT ME! - * @param path DOCUMENT ME! - * @param manager DOCUMENT ME! - */ - public void processMouseEvent(JMenuItem item, MouseEvent e, - MenuElement[] path, - MenuSelectionManager manager) - { - // TODO: May not be implemented properly. - item.processMouseEvent(e, path, manager); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicCheckBoxUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicCheckBoxUI.java deleted file mode 100644 index 0a4da00..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicCheckBoxUI.java +++ /dev/null @@ -1,75 +0,0 @@ -/* BasicCheckBoxUI.java - Copyright (C) 2002, 2004, 2005, 2006, 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.plaf.basic; - -import javax.swing.JCheckBox; -import javax.swing.JComponent; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate for the {@link JCheckBox} component. - */ -public class BasicCheckBoxUI extends BasicRadioButtonUI -{ - - /** - * Returns a UI delegate (that is, an instance of this class) for the - * specified component. - * - * @param c the component (this should be a {@link JCheckBox}). - * - * @return A new instance of <code>BasicCheckBoxUI</code>. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicCheckBoxUI(); - } - - /** - * Returns the prefix for entries in the {@link UIManager} defaults table - * (<code>"CheckBox."</code> in this case). - * - * @return "CheckBox." - */ - public String getPropertyPrefix() - { - return "CheckBox."; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicColorChooserUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicColorChooserUI.java deleted file mode 100644 index 10b5643..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicColorChooserUI.java +++ /dev/null @@ -1,344 +0,0 @@ -/* BasicColorChooserUI.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.BorderLayout; -import java.awt.Container; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JColorChooser; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.LookAndFeel; -import javax.swing.colorchooser.AbstractColorChooserPanel; -import javax.swing.colorchooser.ColorChooserComponentFactory; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ColorChooserUI; -import javax.swing.plaf.ComponentUI; - -/** - * This is the UI Class for the JColorChooser in the Basic Look and Feel. - */ -public class BasicColorChooserUI extends ColorChooserUI -{ - /** - * This helper class handles property changes from the JColorChooser. - */ - public class PropertyHandler implements PropertyChangeListener - { - /** - * This method is called when any of the properties of the JColorChooser - * change. - * - * @param e The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName() == JColorChooser.CHOOSER_PANELS_PROPERTY) - makeTabs(chooser.getChooserPanels()); - else if (e.getPropertyName() == JColorChooser.PREVIEW_PANEL_PROPERTY) - updatePreviewPanel(chooser.getPreviewPanel()); - else if (e.getPropertyName() == JColorChooser.SELECTION_MODEL_PROPERTY) - ((AbstractColorChooserPanel) pane.getSelectedComponent()) - .updateChooser(); - - chooser.repaint(); - } - } - - /** - * This is a helper class that listens to the Model of the JColorChooser for - * color change events so it can update the preview panel. - */ - private class PreviewListener implements ChangeListener - { - /** - * This method is called whenever the JColorChooser's color changes. - * - * @param e The ChangeEvent. - */ - public void stateChanged(ChangeEvent e) - { - if (pane != null) - { - AbstractColorChooserPanel panel = (AbstractColorChooserPanel) pane - .getSelectedComponent(); - if (panel != null) - panel.updateChooser(); - } - chooser.repaint(); - } - } - - /** - * This helper class listens to the JTabbedPane that is used for tab - * changes. - */ - private class TabPaneListener implements ChangeListener - { - /** - * This method is called whenever a different tab is selected in the - * JTabbedPane. - * - * @param e The ChangeEvent. - */ - public void stateChanged(ChangeEvent e) - { - // Need to do this because we don't update all the tabs when they're not - // visible, so they are not informed of new colors when they're hidden. - AbstractColorChooserPanel comp = (AbstractColorChooserPanel) pane - .getSelectedComponent(); - comp.updateChooser(); - } - } - - /** An array of default choosers to use in the JColorChooser. */ - protected AbstractColorChooserPanel[] defaultChoosers; - - /** The listener for the preview panel. */ - protected ChangeListener previewListener; - - /** The PropertyChangeListener for the JColorChooser. */ - protected PropertyChangeListener propertyChangeListener; - - /** - * The JColorChooser this is installed on. - */ - protected JColorChooser chooser; - - /** The JTabbedPane that is used. */ - JTabbedPane pane; - - /** The Container that holds the preview panel. */ - private Container prevContainer; - - /** - * Creates a new BasicColorChooserUI object. - */ - public BasicColorChooserUI() - { - super(); - } - - /** - * This method creates a new UI Component for the given JComponent. - * - * @param c The JComponent to create an UI for. - * - * @return A new BasicColorChooserUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicColorChooserUI(); - } - - /** - * This method creates the default chooser panels for the JColorChooser. - * - * @return The default chooser panels. - */ - protected AbstractColorChooserPanel[] createDefaultChoosers() - { - return ColorChooserComponentFactory.getDefaultChooserPanels(); - } - - /** - * This method installs the UI Component for the given JComponent. - * - * @param c The JComponent to install this UI for. - */ - public void installUI(JComponent c) - { - if (c instanceof JColorChooser) - { - chooser = (JColorChooser) c; - chooser.setLayout(new BorderLayout()); - - // Do this first, so we avoid doing work for property change events. - defaultChoosers = createDefaultChoosers(); - chooser.setChooserPanels(defaultChoosers); - pane = new JTabbedPane(); - - pane.addChangeListener(new ChangeListener() - { - public void stateChanged(ChangeEvent e) - { - pane.repaint(); - } - }); - - makeTabs(defaultChoosers); - - chooser.add(pane, BorderLayout.NORTH); - - installPreviewPanel(); - - installDefaults(); - installListeners(); - } - } - - /** - * This method adds tabs to the JTabbedPane for the chooserPanels defined in - * the JColorChooser. - * This is package-private to avoid an accessor method. - * - * @param panels The Panels that need tabs to be made for them. - */ - void makeTabs(AbstractColorChooserPanel[] panels) - { - pane.removeAll(); - for (int i = 0; i < panels.length; i++) - pane.addTab(panels[i].getDisplayName(), panels[i].getSmallDisplayIcon(), - panels[i]); - } - - /** - * This method uninstalls this UI for the given JComponent. - * - * @param c The JComponent that will have this UI removed. - */ - public void uninstallUI(JComponent c) - { - uninstallListeners(); - uninstallDefaults(); - uninstallDefaultChoosers(); - - pane = null; - chooser = null; - } - - /** - * Uninstalls the default color choosers that have been installed by this UI. - */ - protected void uninstallDefaultChoosers() - { - defaultChoosers = null; - } - - /** - * This method installs the preview panel for the JColorChooser. - */ - protected void installPreviewPanel() - { - updatePreviewPanel(ColorChooserComponentFactory.getPreviewPanel()); - } - - /** - * This is a helper method that swaps the existing preview panel with the - * given panel. - * This is package-private to avoid an accessor method. - * - * @param preview The new preview panel. - */ - void updatePreviewPanel(JComponent preview) - { - if (prevContainer == null) - { - prevContainer = new JPanel(); - prevContainer.setLayout(new BorderLayout()); - chooser.add(prevContainer, BorderLayout.CENTER); - } - prevContainer.removeAll(); - prevContainer.add(preview, BorderLayout.CENTER); - } - - /** - * This method installs the default properties given by the Basic Look and - * Feel. - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(chooser, "ColorChooser.background", - "ColorChooser.foreground", - "ColorChooser.font"); - } - - /** - * This method uninstalls the default properties given by the Basic Look and - * Feel. - */ - protected void uninstallDefaults() - { - chooser.setBackground(null); - chooser.setForeground(null); - chooser.setFont(null); - } - - /** - * This method installs any listeners required for this UI to function. - */ - protected void installListeners() - { - propertyChangeListener = createPropertyChangeListener(); - previewListener = new PreviewListener(); - - chooser.addPropertyChangeListener(propertyChangeListener); - chooser.getSelectionModel().addChangeListener(previewListener); - - pane.addChangeListener(new TabPaneListener()); - } - - /** - * This method creates the PropertyChangeListener used for listening to the - * JColorChooser. - * - * @return A PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyHandler(); - } - - /** - * This method uninstalls any listeners that were previously installed by - * the UI. - */ - protected void uninstallListeners() - { - chooser.removePropertyChangeListener(propertyChangeListener); - chooser.getSelectionModel().removeChangeListener(previewListener); - - previewListener = null; - propertyChangeListener = null; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java deleted file mode 100644 index b04f3fa..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxEditor.java +++ /dev/null @@ -1,181 +0,0 @@ -/* BasicComboBoxEditor.java -- - Copyright (C) 2004, 2005, 2006 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.plaf.basic; - -import java.awt.Component; -import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; - -import javax.swing.ComboBoxEditor; -import javax.swing.JTextField; - -/** - * An editor used by the {@link BasicComboBoxUI} class. This editor uses a - * {@link JTextField} as the editor component. - * - * @author Olga Rodimina - */ -public class BasicComboBoxEditor extends Object implements ComboBoxEditor, - FocusListener -{ - /** The editor component. */ - protected JTextField editor; - - /** - * Creates a new <code>BasicComboBoxEditor</code> instance. - */ - public BasicComboBoxEditor() - { - editor = new JTextField(); - editor.setBorder(null); - editor.setColumns(9); - } - - /** - * Returns the component that will be used by the combo box to display and - * edit the currently selected item in the combo box. - * - * @return The editor component, which is a {@link JTextField} in this case. - */ - public Component getEditorComponent() - { - return editor; - } - - /** - * Sets item that should be edited when any editing operation is performed - * by the user. The value is always equal to the currently selected value - * in the combo box. Thus whenever a different value is selected from the - * combo box list then this method should be called to change editing - * item to the new selected item. - * - * @param item item that is currently selected in the combo box - */ - public void setItem(Object item) - { - if (item == null) - editor.setText(""); - else - editor.setText(item.toString()); - } - - /** - * Returns the text from the editor component. - * - * @return The text from the editor component. - */ - public Object getItem() - { - return editor.getText(); - } - - /** - * Selects all the text in the editor component. - */ - public void selectAll() - { - editor.selectAll(); - } - - /** - * This method is called when textfield gains focus. This will enable - * editing of the selected item. - * - * @param e the FocusEvent describing change in focus. - */ - public void focusGained(FocusEvent e) - { - // FIXME: Need to implement - } - - /** - * This method is called when textfield loses focus. If during this time any - * editting operation was performed by the user, then it will be cancelled - * and selected item will not be changed. - * - * @param e the FocusEvent describing change in focus - */ - public void focusLost(FocusEvent e) - { - // FIXME: Need to implement - } - - /** - * Adds an {@link ActionListener} to the editor component. If the user will - * edit currently selected item in the textfield and pressEnter, then action - * will be performed. The actionPerformed of this ActionListener should - * change the selected item of the comboBox to the newly editted selected - * item. - * - * @param l the ActionListener responsible for changing selected item of the - * combo box when it is editted by the user. - */ - public void addActionListener(ActionListener l) - { - editor.addActionListener(l); - } - - /** - * Removes the {@link ActionListener} from the editor component. - * - * @param l the listener to remove. - */ - public void removeActionListener(ActionListener l) - { - editor.removeActionListener(l); - } - - /** - * A subclass of {@link BasicComboBoxEditor} that implements the - * {@link UIResource} interface. - */ - public static class UIResource extends BasicComboBoxEditor - implements javax.swing.plaf.UIResource - { - /** - * Creates a new <code>BasicComboBoxEditor.UIResource</code> instance. - */ - public UIResource() - { - // Nothing to do here. - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java deleted file mode 100644 index 761d7d1..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java +++ /dev/null @@ -1,151 +0,0 @@ -/* BasicComboBoxRenderer.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.Component; -import java.awt.Dimension; -import java.io.Serializable; - -import javax.swing.Icon; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.ListCellRenderer; -import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; - -/** - * A renderer for a {@link JComboBox}. - * - * @author Olga Rodimina - */ -public class BasicComboBoxRenderer - extends JLabel - implements ListCellRenderer, Serializable -{ - /** - * A shared border instance for all renderers. - */ - protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); - - /** - * Creates a new <code>BasicComboBoxRenderer</code> object. - */ - public BasicComboBoxRenderer() - { - setOpaque(true); - setBorder(noFocusBorder); - } - - /** - * Returns preferredSize of the renderer - * - * @return preferredSize of the renderer - */ - public Dimension getPreferredSize() - { - if (this.getText() != null && ! this.getText().equals("")) - return super.getPreferredSize(); - else - { - // If the combo box option's text is empty or null, it won't size - // properly (ie, it'll be way too short)... so we throw in a dummy - // space to trick the superclass's sizing methods. - String oldText = this.getText(); - this.setText(" "); - Dimension d = super.getPreferredSize(); - this.setText(oldText); - return d; - } - } - - /** - * Returns a component that has been configured to display the given - * <code>value</code>. - * - * @param list List of items for which to the background and foreground - * colors - * @param value object that should be rendered in the cell - * @param index index of the cell in the list of items. - * @param isSelected draw cell highlighted if isSelected is true - * @param cellHasFocus draw focus rectangle around cell if the cell has - * focus - * - * @return Component that will be used to draw the desired cell. - */ - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, - boolean cellHasFocus) - { - if (isSelected) - { - setBackground(list.getSelectionBackground()); - setForeground(list.getSelectionForeground()); - } - else - { - setBackground(list.getBackground()); - setForeground(list.getForeground()); - } - setFont(list.getFont()); - - if (value instanceof Icon) - setIcon((Icon) value); - else - setText(value == null ? "" : value.toString()); - - return this; - } - - /** - * A subclass of {@link BasicComboBoxRenderer} that implements the - * {@link javax.swing.plaf.UIResource} interface. - */ - public static class UIResource extends BasicComboBoxRenderer - implements javax.swing.plaf.UIResource - { - /** - * Creates a new <code>UIResource</code> object. - */ - public UIResource() - { - // Nothing to do here. - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java deleted file mode 100644 index 07d4f42..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicComboBoxUI.java +++ /dev/null @@ -1,1410 +0,0 @@ -/* BasicComboBoxUI.java -- - Copyright (C) 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.accessibility.Accessible; -import javax.accessibility.AccessibleContext; -import javax.swing.CellRendererPane; -import javax.swing.ComboBoxEditor; -import javax.swing.ComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.InputMap; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JList; -import javax.swing.ListCellRenderer; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ListDataEvent; -import javax.swing.event.ListDataListener; -import javax.swing.plaf.ComboBoxUI; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; - -/** - * A UI delegate for the {@link JComboBox} component. - * - * @author Olga Rodimina - * @author Robert Schuster - */ -public class BasicComboBoxUI extends ComboBoxUI -{ - /** - * The arrow button that is displayed in the right side of JComboBox. This - * button is used to hide and show combo box's list of items. - */ - protected JButton arrowButton; - - /** - * The combo box represented by this UI delegate. - */ - protected JComboBox comboBox; - - /** - * The component that is responsible for displaying/editing the selected - * item of the combo box. - * - * @see BasicComboBoxEditor#getEditorComponent() - */ - protected Component editor; - - /** - * A listener listening to focus events occurring in the {@link JComboBox}. - */ - protected FocusListener focusListener; - - /** - * A flag indicating whether JComboBox currently has the focus. - */ - protected boolean hasFocus; - - /** - * A listener listening to item events fired by the {@link JComboBox}. - */ - protected ItemListener itemListener; - - /** - * A listener listening to key events that occur while {@link JComboBox} has - * the focus. - */ - protected KeyListener keyListener; - - /** - * List used when rendering selected item of the combo box. The selection - * and foreground colors for combo box renderer are configured from this - * list. - */ - protected JList listBox; - - /** - * ListDataListener listening to JComboBox model - */ - protected ListDataListener listDataListener; - - /** - * Popup list containing the combo box's menu items. - */ - protected ComboPopup popup; - - protected KeyListener popupKeyListener; - - protected MouseListener popupMouseListener; - - protected MouseMotionListener popupMouseMotionListener; - - /** - * Listener listening to changes in the bound properties of JComboBox - */ - protected PropertyChangeListener propertyChangeListener; - - /* Size of the largest item in the comboBox - * This is package-private to avoid an accessor method. - */ - Dimension displaySize = new Dimension(); - - /** - * Used to render the combo box values. - */ - protected CellRendererPane currentValuePane; - - /** - * The current minimum size if isMinimumSizeDirty is false. - * Setup by getMinimumSize() and invalidated by the various listeners. - */ - protected Dimension cachedMinimumSize; - - /** - * Indicates whether or not the cachedMinimumSize field is valid or not. - */ - protected boolean isMinimumSizeDirty = true; - - /** - * Creates a new <code>BasicComboBoxUI</code> object. - */ - public BasicComboBoxUI() - { - currentValuePane = new CellRendererPane(); - cachedMinimumSize = new Dimension(); - } - - /** - * A factory method to create a UI delegate for the given - * {@link JComponent}, which should be a {@link JComboBox}. - * - * @param c The {@link JComponent} a UI is being created for. - * - * @return A UI delegate for the {@link JComponent}. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicComboBoxUI(); - } - - /** - * Installs the UI for the given {@link JComponent}. - * - * @param c the JComponent to install a UI for. - * - * @see #uninstallUI(JComponent) - */ - public void installUI(JComponent c) - { - super.installUI(c); - - if (c instanceof JComboBox) - { - isMinimumSizeDirty = true; - comboBox = (JComboBox) c; - installDefaults(); - popup = createPopup(); - listBox = popup.getList(); - - // Set editor and renderer for the combo box. Editor is used - // only if combo box becomes editable, otherwise renderer is used - // to paint the selected item; combobox is not editable by default. - ListCellRenderer renderer = comboBox.getRenderer(); - if (renderer == null || renderer instanceof UIResource) - comboBox.setRenderer(createRenderer()); - - ComboBoxEditor currentEditor = comboBox.getEditor(); - if (currentEditor == null || currentEditor instanceof UIResource) - { - currentEditor = createEditor(); - comboBox.setEditor(currentEditor); - } - - installComponents(); - installListeners(); - comboBox.setLayout(createLayoutManager()); - comboBox.setFocusable(true); - installKeyboardActions(); - comboBox.putClientProperty(BasicLookAndFeel.DONT_CANCEL_POPUP, - Boolean.TRUE); - } - } - - /** - * Uninstalls the UI for the given {@link JComponent}. - * - * @param c The JComponent that is having this UI removed. - * - * @see #installUI(JComponent) - */ - public void uninstallUI(JComponent c) - { - setPopupVisible(comboBox, false); - popup.uninstallingUI(); - uninstallKeyboardActions(); - comboBox.setLayout(null); - uninstallComponents(); - uninstallListeners(); - uninstallDefaults(); - comboBox = null; - } - - /** - * Installs the defaults that are defined in the {@link BasicLookAndFeel} - * for this {@link JComboBox}. - * - * @see #uninstallDefaults() - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(comboBox, "ComboBox.background", - "ComboBox.foreground", "ComboBox.font"); - LookAndFeel.installBorder(comboBox, "ComboBox.border"); - } - - /** - * Creates and installs the listeners for this UI. - * - * @see #uninstallListeners() - */ - protected void installListeners() - { - // install combo box's listeners - propertyChangeListener = createPropertyChangeListener(); - comboBox.addPropertyChangeListener(propertyChangeListener); - - focusListener = createFocusListener(); - comboBox.addFocusListener(focusListener); - - itemListener = createItemListener(); - comboBox.addItemListener(itemListener); - - keyListener = createKeyListener(); - comboBox.addKeyListener(keyListener); - - // install listeners that listen to combo box model - listDataListener = createListDataListener(); - comboBox.getModel().addListDataListener(listDataListener); - - // Install mouse and key listeners from the popup. - popupMouseListener = popup.getMouseListener(); - comboBox.addMouseListener(popupMouseListener); - - popupMouseMotionListener = popup.getMouseMotionListener(); - comboBox.addMouseMotionListener(popupMouseMotionListener); - - popupKeyListener = popup.getKeyListener(); - comboBox.addKeyListener(popupKeyListener); - } - - /** - * Uninstalls the defaults and sets any objects created during - * install to <code>null</code>. - * - * @see #installDefaults() - */ - protected void uninstallDefaults() - { - if (comboBox.getFont() instanceof UIResource) - comboBox.setFont(null); - - if (comboBox.getForeground() instanceof UIResource) - comboBox.setForeground(null); - - if (comboBox.getBackground() instanceof UIResource) - comboBox.setBackground(null); - - LookAndFeel.uninstallBorder(comboBox); - } - - /** - * Detaches all the listeners we attached in {@link #installListeners}. - * - * @see #installListeners() - */ - protected void uninstallListeners() - { - comboBox.removePropertyChangeListener(propertyChangeListener); - propertyChangeListener = null; - - comboBox.removeFocusListener(focusListener); - listBox.removeFocusListener(focusListener); - focusListener = null; - - comboBox.removeItemListener(itemListener); - itemListener = null; - - comboBox.removeKeyListener(keyListener); - keyListener = null; - - comboBox.getModel().removeListDataListener(listDataListener); - listDataListener = null; - - if (popupMouseListener != null) - comboBox.removeMouseListener(popupMouseListener); - popupMouseListener = null; - - if (popupMouseMotionListener != null) - comboBox.removeMouseMotionListener(popupMouseMotionListener); - popupMouseMotionListener = null; - - if (popupKeyListener != null) - comboBox.removeKeyListener(popupKeyListener); - popupKeyListener = null; - } - - /** - * Creates the popup that will contain list of combo box's items. - * - * @return popup containing list of combo box's items - */ - protected ComboPopup createPopup() - { - return new BasicComboPopup(comboBox); - } - - /** - * Creates a {@link KeyListener} to listen to key events. - * - * @return KeyListener that listens to key events. - */ - protected KeyListener createKeyListener() - { - return new KeyHandler(); - } - - /** - * Creates the {@link FocusListener} that will listen to changes in this - * JComboBox's focus. - * - * @return the FocusListener. - */ - protected FocusListener createFocusListener() - { - return new FocusHandler(); - } - - /** - * Creates a {@link ListDataListener} to listen to the combo box's data model. - * - * @return The new listener. - */ - protected ListDataListener createListDataListener() - { - return new ListDataHandler(); - } - - /** - * Creates an {@link ItemListener} that will listen to the changes in - * the JComboBox's selection. - * - * @return The ItemListener - */ - protected ItemListener createItemListener() - { - return new ItemHandler(); - } - - /** - * Creates a {@link PropertyChangeListener} to listen to the changes in - * the JComboBox's bound properties. - * - * @return The PropertyChangeListener - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * Creates and returns a layout manager for the combo box. Subclasses can - * override this method to provide a different layout. - * - * @return a layout manager for the combo box. - */ - protected LayoutManager createLayoutManager() - { - return new ComboBoxLayoutManager(); - } - - /** - * Creates a component that will be responsible for rendering the - * selected component in the combo box. - * - * @return A renderer for the combo box. - */ - protected ListCellRenderer createRenderer() - { - return new BasicComboBoxRenderer.UIResource(); - } - - /** - * Creates the component that will be responsible for displaying/editing - * the selected item in the combo box. This editor is used only when combo - * box is editable. - * - * @return A new component that will be responsible for displaying/editing - * the selected item in the combo box. - */ - protected ComboBoxEditor createEditor() - { - return new BasicComboBoxEditor.UIResource(); - } - - /** - * Installs the components for this JComboBox. ArrowButton, main - * part of combo box (upper part) and popup list of items are created and - * configured here. - */ - protected void installComponents() - { - // create and install arrow button - arrowButton = createArrowButton(); - comboBox.add(arrowButton); - if (arrowButton != null) - configureArrowButton(); - - if (comboBox.isEditable()) - addEditor(); - - comboBox.add(currentValuePane); - } - - /** - * Uninstalls components from this {@link JComboBox}. - * - * @see #installComponents() - */ - protected void uninstallComponents() - { - // Unconfigure arrow button. - if (arrowButton != null) - { - unconfigureArrowButton(); - } - - // Unconfigure editor. - if (editor != null) - { - unconfigureEditor(); - } - - comboBox.removeAll(); - arrowButton = null; - } - - /** - * Adds the current editor to the combo box. - */ - public void addEditor() - { - removeEditor(); - editor = comboBox.getEditor().getEditorComponent(); - if (editor != null) - { - configureEditor(); - comboBox.add(editor); - } - } - - /** - * Removes the current editor from the combo box. - */ - public void removeEditor() - { - if (editor != null) - { - unconfigureEditor(); - comboBox.remove(editor); - } - } - - /** - * Configures the editor for this combo box. - */ - protected void configureEditor() - { - editor.setFont(comboBox.getFont()); - if (popupKeyListener != null) - editor.addKeyListener(popupKeyListener); - if (keyListener != null) - editor.addKeyListener(keyListener); - comboBox.configureEditor(comboBox.getEditor(), - comboBox.getSelectedItem()); - } - - /** - * Unconfigures the editor for this combo box. - */ - protected void unconfigureEditor() - { - if (popupKeyListener != null) - editor.removeKeyListener(popupKeyListener); - if (keyListener != null) - editor.removeKeyListener(keyListener); - } - - /** - * Configures the arrow button. - * - * @see #configureArrowButton() - */ - public void configureArrowButton() - { - if (arrowButton != null) - { - arrowButton.setEnabled(comboBox.isEnabled()); - arrowButton.setFocusable(false); - arrowButton.addMouseListener(popup.getMouseListener()); - arrowButton.addMouseMotionListener(popup.getMouseMotionListener()); - - // Mark the button as not closing the popup, we handle this ourselves. - arrowButton.putClientProperty(BasicLookAndFeel.DONT_CANCEL_POPUP, - Boolean.TRUE); - } - } - - /** - * Unconfigures the arrow button. - * - * @see #configureArrowButton() - * - * @specnote The specification says this method is implementation specific - * and should not be used or overridden. - */ - public void unconfigureArrowButton() - { - if (arrowButton != null) - { - if (popupMouseListener != null) - arrowButton.removeMouseListener(popupMouseListener); - if (popupMouseMotionListener != null) - arrowButton.removeMouseMotionListener(popupMouseMotionListener); - } - } - - /** - * Creates an arrow button for this {@link JComboBox}. The arrow button is - * displayed at the right end of the combo box and is used to display/hide - * the drop down list of items. - * - * @return A new button. - */ - protected JButton createArrowButton() - { - return new BasicArrowButton(BasicArrowButton.SOUTH); - } - - /** - * Returns <code>true</code> if the popup is visible, and <code>false</code> - * otherwise. - * - * @param c The JComboBox to check - * - * @return <code>true</code> if popup part of the JComboBox is visible and - * <code>false</code> otherwise. - */ - public boolean isPopupVisible(JComboBox c) - { - return popup.isVisible(); - } - - /** - * Displays/hides the {@link JComboBox}'s list of items on the screen. - * - * @param c The combo box, for which list of items should be - * displayed/hidden - * @param v true if show popup part of the jcomboBox and false to hide. - */ - public void setPopupVisible(JComboBox c, boolean v) - { - if (v) - popup.show(); - else - popup.hide(); - } - - /** - * JComboBox is focus traversable if it is editable and not otherwise. - * - * @param c combo box for which to check whether it is focus traversable - * - * @return true if focus tranversable and false otherwise - */ - public boolean isFocusTraversable(JComboBox c) - { - if (!comboBox.isEditable()) - return true; - - return false; - } - - /** - * Paints given menu item using specified graphics context - * - * @param g The graphics context used to paint this combo box - * @param c comboBox which needs to be painted. - */ - public void paint(Graphics g, JComponent c) - { - hasFocus = comboBox.hasFocus(); - if (! comboBox.isEditable()) - { - Rectangle rect = rectangleForCurrentValue(); - paintCurrentValueBackground(g, rect, hasFocus); - paintCurrentValue(g, rect, hasFocus); - } - } - - /** - * Returns preferred size for the combo box. - * - * @param c comboBox for which to get preferred size - * - * @return The preferred size for the given combo box - */ - public Dimension getPreferredSize(JComponent c) - { - return getMinimumSize(c); - } - - /** - * Returns the minimum size for this {@link JComboBox} for this - * look and feel. Also makes sure cachedMinimimSize is setup correctly. - * - * @param c The {@link JComponent} to find the minimum size for. - * - * @return The dimensions of the minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - if (isMinimumSizeDirty) - { - Insets i = getInsets(); - Dimension d = getDisplaySize(); - d.width += i.left + i.right + d.height; - cachedMinimumSize = new Dimension(d.width, d.height + i.top + i.bottom); - isMinimumSizeDirty = false; - } - return new Dimension(cachedMinimumSize); - } - - /** - * Returns the maximum size for this {@link JComboBox} for this - * look and feel. - * - * @param c The {@link JComponent} to find the maximum size for - * - * @return The maximum size (<code>Dimension(32767, 32767)</code>). - */ - public Dimension getMaximumSize(JComponent c) - { - return new Dimension(32767, 32767); - } - - /** - * Returns the number of accessible children of the combobox. - * - * @param c the component (combobox) to check, ignored - * - * @return the number of accessible children of the combobox - */ - public int getAccessibleChildrenCount(JComponent c) - { - int count = 1; - if (comboBox.isEditable()) - count = 2; - return count; - } - - /** - * Returns the accessible child with the specified index. - * - * @param c the component, this is ignored - * @param i the index of the accessible child to return - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible child = null; - switch (i) - { - case 0: // The popup. - if (popup instanceof Accessible) - { - AccessibleContext ctx = ((Accessible) popup).getAccessibleContext(); - ctx.setAccessibleParent(comboBox); - child = (Accessible) popup; - } - break; - case 1: // The editor, if any. - if (comboBox.isEditable() && editor instanceof Accessible) - { - AccessibleContext ctx = - ((Accessible) editor).getAccessibleContext(); - ctx.setAccessibleParent(comboBox); - child = (Accessible) editor; - } - break; - } - return child; - } - - /** - * Returns true if the specified key is a navigation key and false otherwise - * - * @param keyCode a key for which to check whether it is navigation key or - * not. - * - * @return true if the specified key is a navigation key and false otherwis - */ - protected boolean isNavigationKey(int keyCode) - { - return keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_DOWN - || keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_RIGHT - || keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_ESCAPE - || keyCode == KeyEvent.VK_TAB; - } - - /** - * Selects next possible item relative to the current selection - * to be next selected item in the combo box. - */ - protected void selectNextPossibleValue() - { - int index = comboBox.getSelectedIndex(); - if (index != comboBox.getItemCount() - 1) - comboBox.setSelectedIndex(index + 1); - } - - /** - * Selects previous item relative to current selection to be - * next selected item. - */ - protected void selectPreviousPossibleValue() - { - int index = comboBox.getSelectedIndex(); - if (index > 0) - comboBox.setSelectedIndex(index - 1); - } - - /** - * Displays combo box popup if the popup is not currently shown - * on the screen and hides it if it is currently shown - */ - protected void toggleOpenClose() - { - setPopupVisible(comboBox, ! isPopupVisible(comboBox)); - } - - /** - * Returns the bounds in which comboBox's selected item will be - * displayed. - * - * @return rectangle bounds in which comboBox's selected Item will be - * displayed - */ - protected Rectangle rectangleForCurrentValue() - { - int w = comboBox.getWidth(); - int h = comboBox.getHeight(); - Insets i = comboBox.getInsets(); - int arrowSize = h - (i.top + i.bottom); - if (arrowButton != null) - arrowSize = arrowButton.getWidth(); - return new Rectangle(i.left, i.top, w - (i.left + i.right + arrowSize), - h - (i.top + i.left)); - } - - /** - * Returns the insets of the current border. - * - * @return Insets representing space between combo box and its border - */ - protected Insets getInsets() - { - return comboBox.getInsets(); - } - - /** - * Paints currently selected value in the main part of the combo - * box (part without popup). - * - * @param g graphics context - * @param bounds Rectangle representing the size of the area in which - * selected item should be drawn - * @param hasFocus true if combo box has focus and false otherwise - */ - public void paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus) - { - /* Gets the component to be drawn for the current value. - * If there is currently no selected item we will take an empty - * String as replacement. - */ - ListCellRenderer renderer = comboBox.getRenderer(); - if (comboBox.getSelectedIndex() != -1) - { - Component comp; - if (hasFocus && ! isPopupVisible(comboBox)) - { - comp = renderer.getListCellRendererComponent(listBox, - comboBox.getSelectedItem(), -1, true, false); - } - else - { - comp = renderer.getListCellRendererComponent(listBox, - comboBox.getSelectedItem(), -1, false, false); - Color bg = UIManager.getColor("ComboBox.disabledForeground"); - comp.setBackground(bg); - } - comp.setFont(comboBox.getFont()); - if (hasFocus && ! isPopupVisible(comboBox)) - { - comp.setForeground(listBox.getSelectionForeground()); - comp.setBackground(listBox.getSelectionBackground()); - } - else if (comboBox.isEnabled()) - { - comp.setForeground(comboBox.getForeground()); - comp.setBackground(comboBox.getBackground()); - } - else - { - Color fg = UIManager.getColor("ComboBox.disabledForeground"); - comp.setForeground(fg); - Color bg = UIManager.getColor("ComboBox.disabledBackground"); - comp.setBackground(bg); - } - currentValuePane.paintComponent(g, comp, comboBox, bounds.x, bounds.y, - bounds.width, bounds.height); - } - } - - /** - * Paints the background of part of the combo box, where currently - * selected value is displayed. If the combo box has focus this method - * should also paint focus rectangle around the combo box. - * - * @param g graphics context - * @param bounds Rectangle representing the size of the largest item in the - * comboBox - * @param hasFocus true if combo box has fox and false otherwise - */ - public void paintCurrentValueBackground(Graphics g, Rectangle bounds, - boolean hasFocus) - { - Color saved = g.getColor(); - if (comboBox.isEnabled()) - g.setColor(UIManager.getColor("UIManager.background")); - else - g.setColor(UIManager.getColor("UIManager.disabledBackground")); - g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height); - g.setColor(saved); - } - - private static final ListCellRenderer DEFAULT_RENDERER - = new DefaultListCellRenderer(); - - /** - * Returns the default size for the display area of a combo box that does - * not contain any elements. This method returns the width and height of - * a single space in the current font, plus a margin of 1 pixel. - * - * @return The default display size. - * - * @see #getDisplaySize() - */ - protected Dimension getDefaultSize() - { - Component comp = DEFAULT_RENDERER.getListCellRendererComponent(listBox, - " ", -1, false, false); - currentValuePane.add(comp); - comp.setFont(comboBox.getFont()); - Dimension d = comp.getPreferredSize(); - currentValuePane.remove(comp); - return d; - } - - /** - * Returns the size of the display area for the combo box. This size will be - * the size of the combo box, not including the arrowButton. - * - * @return The size of the display area for the combo box. - */ - protected Dimension getDisplaySize() - { - Dimension dim = new Dimension(); - ListCellRenderer renderer = comboBox.getRenderer(); - if (renderer == null) - { - renderer = DEFAULT_RENDERER; - } - - Object prototype = comboBox.getPrototypeDisplayValue(); - if (prototype != null) - { - Component comp = renderer.getListCellRendererComponent(listBox, - prototype, -1, false, false); - currentValuePane.add(comp); - comp.setFont(comboBox.getFont()); - Dimension renderSize = comp.getPreferredSize(); - currentValuePane.remove(comp); - dim.height = renderSize.height; - dim.width = renderSize.width; - } - else - { - ComboBoxModel model = comboBox.getModel(); - int size = model.getSize(); - if (size > 0) - { - for (int i = 0; i < size; ++i) - { - Component comp = renderer.getListCellRendererComponent(listBox, - model.getElementAt(i), -1, false, false); - currentValuePane.add(comp); - comp.setFont(comboBox.getFont()); - Dimension renderSize = comp.getPreferredSize(); - currentValuePane.remove(comp); - dim.width = Math.max(dim.width, renderSize.width); - dim.height = Math.max(dim.height, renderSize.height); - } - } - else - { - dim = getDefaultSize(); - if (comboBox.isEditable()) - dim.width = 100; - } - } - if (comboBox.isEditable()) - { - Dimension editSize = editor.getPreferredSize(); - dim.width = Math.max(dim.width, editSize.width); - dim.height = Math.max(dim.height, editSize.height); - } - displaySize.setSize(dim.width, dim.height); - return dim; - } - - /** - * Installs the keyboard actions for the {@link JComboBox} as specified - * by the look and feel. - */ - protected void installKeyboardActions() - { - SwingUtilities.replaceUIInputMap(comboBox, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, - (InputMap) UIManager.get("ComboBox.ancestorInputMap")); - // Install any action maps here. - } - - /** - * Uninstalls the keyboard actions for the {@link JComboBox} there were - * installed by in {@link #installListeners}. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(comboBox, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - // Uninstall any action maps here. - } - - /** - * A {@link LayoutManager} used to position the sub-components of the - * {@link JComboBox}. - * - * @see BasicComboBoxUI#createLayoutManager() - */ - public class ComboBoxLayoutManager implements LayoutManager - { - /** - * Creates a new ComboBoxLayoutManager object. - */ - public ComboBoxLayoutManager() - { - // Nothing to do here. - } - - /** - * Adds a component to the layout. This method does nothing, since the - * layout manager doesn't need to track the components. - * - * @param name the name to associate the component with (ignored). - * @param comp the component (ignored). - */ - public void addLayoutComponent(String name, Component comp) - { - // Do nothing - } - - /** - * Removes a component from the layout. This method does nothing, since - * the layout manager doesn't need to track the components. - * - * @param comp the component. - */ - public void removeLayoutComponent(Component comp) - { - // Do nothing - } - - /** - * Returns preferred layout size of the JComboBox. - * - * @param parent the Container for which the preferred size should be - * calculated. - * - * @return The preferred size for the given container - */ - public Dimension preferredLayoutSize(Container parent) - { - return parent.getPreferredSize(); - } - - /** - * Returns the minimum layout size. - * - * @param parent the container. - * - * @return The minimum size. - */ - public Dimension minimumLayoutSize(Container parent) - { - return parent.getMinimumSize(); - } - - /** - * Arranges the components in the container. It puts arrow - * button right end part of the comboBox. If the comboBox is editable - * then editor is placed to the left of arrow button, starting from the - * beginning. - * - * @param parent Container that should be layed out. - */ - public void layoutContainer(Container parent) - { - // Position editor component to the left of arrow button if combo box is - // editable - Insets i = getInsets(); - int arrowSize = comboBox.getHeight() - (i.top + i.bottom); - - if (arrowButton != null) - arrowButton.setBounds(comboBox.getWidth() - (i.right + arrowSize), - i.top, arrowSize, arrowSize); - if (editor != null) - editor.setBounds(rectangleForCurrentValue()); - } - } - - /** - * Handles focus changes occuring in the combo box. This class is - * responsible for repainting combo box whenever focus is gained or lost - * and also for hiding popup list of items whenever combo box loses its - * focus. - */ - public class FocusHandler extends Object implements FocusListener - { - /** - * Creates a new FocusHandler object. - */ - public FocusHandler() - { - // Nothing to do here. - } - - /** - * Invoked when combo box gains focus. It repaints main - * part of combo box accordingly. - * - * @param e the FocusEvent - */ - public void focusGained(FocusEvent e) - { - hasFocus = true; - comboBox.repaint(); - } - - /** - * Invoked when the combo box loses focus. It repaints the main part - * of the combo box accordingly and hides the popup list of items. - * - * @param e the FocusEvent - */ - public void focusLost(FocusEvent e) - { - hasFocus = false; - if (! e.isTemporary() && comboBox.isLightWeightPopupEnabled()) - setPopupVisible(comboBox, false); - comboBox.repaint(); - } - } - - /** - * Handles {@link ItemEvent}s fired by the {@link JComboBox} when its - * selected item changes. - */ - public class ItemHandler extends Object implements ItemListener - { - /** - * Creates a new ItemHandler object. - */ - public ItemHandler() - { - // Nothing to do here. - } - - /** - * Invoked when selected item becomes deselected or when - * new item becomes selected. - * - * @param e the ItemEvent representing item's state change. - */ - public void itemStateChanged(ItemEvent e) - { - ComboBoxModel model = comboBox.getModel(); - Object v = model.getSelectedItem(); - if (editor != null) - comboBox.configureEditor(comboBox.getEditor(), v); - comboBox.repaint(); - } - } - - /** - * KeyHandler handles key events occuring while JComboBox has focus. - */ - public class KeyHandler extends KeyAdapter - { - public KeyHandler() - { - // Nothing to do here. - } - - /** - * Invoked whenever key is pressed while JComboBox is in focus. - */ - public void keyPressed(KeyEvent e) - { - if (comboBox.getModel().getSize() != 0 && comboBox.isEnabled()) - { - if (! isNavigationKey(e.getKeyCode())) - { - if (! comboBox.isEditable()) - if (comboBox.selectWithKeyChar(e.getKeyChar())) - e.consume(); - } - else - { - if (e.getKeyCode() == KeyEvent.VK_UP && comboBox.isPopupVisible()) - selectPreviousPossibleValue(); - else if (e.getKeyCode() == KeyEvent.VK_DOWN) - { - if (comboBox.isPopupVisible()) - selectNextPossibleValue(); - else - comboBox.showPopup(); - } - else if (e.getKeyCode() == KeyEvent.VK_ENTER - || e.getKeyCode() == KeyEvent.VK_ESCAPE) - popup.hide(); - } - } - } - } - - /** - * Handles the changes occurring in the JComboBox's data model. - */ - public class ListDataHandler extends Object implements ListDataListener - { - /** - * Creates a new ListDataHandler object. - */ - public ListDataHandler() - { - // Nothing to do here. - } - - /** - * Invoked if the content's of JComboBox's data model are changed. - * - * @param e ListDataEvent describing the change. - */ - public void contentsChanged(ListDataEvent e) - { - if (e.getIndex0() != -1 || e.getIndex1() != -1) - { - isMinimumSizeDirty = true; - comboBox.revalidate(); - } - if (editor != null) - comboBox.configureEditor(comboBox.getEditor(), - comboBox.getSelectedItem()); - comboBox.repaint(); - } - - /** - * Invoked when items are added to the JComboBox's data model. - * - * @param e ListDataEvent describing the change. - */ - public void intervalAdded(ListDataEvent e) - { - int start = e.getIndex0(); - int end = e.getIndex1(); - if (start == 0 && comboBox.getItemCount() - (end - start + 1) == 0) - contentsChanged(e); - else if (start != -1 || end != -1) - { - ListCellRenderer renderer = comboBox.getRenderer(); - ComboBoxModel model = comboBox.getModel(); - int w = displaySize.width; - int h = displaySize.height; - // TODO: Optimize using prototype here. - for (int i = start; i <= end; ++i) - { - Component comp = renderer.getListCellRendererComponent(listBox, - model.getElementAt(i), -1, false, false); - currentValuePane.add(comp); - comp.setFont(comboBox.getFont()); - Dimension dim = comp.getPreferredSize(); - w = Math.max(w, dim.width); - h = Math.max(h, dim.height); - currentValuePane.remove(comp); - } - if (displaySize.width < w || displaySize.height < h) - { - if (displaySize.width < w) - displaySize.width = w; - if (displaySize.height < h) - displaySize.height = h; - comboBox.revalidate(); - if (editor != null) - { - comboBox.configureEditor(comboBox.getEditor(), - comboBox.getSelectedItem()); - } - } - } - - } - - /** - * Invoked when items are removed from the JComboBox's - * data model. - * - * @param e ListDataEvent describing the change. - */ - public void intervalRemoved(ListDataEvent e) - { - contentsChanged(e); - } - } - - /** - * Handles {@link PropertyChangeEvent}s fired by the {@link JComboBox}. - */ - public class PropertyChangeHandler extends Object - implements PropertyChangeListener - { - /** - * Creates a new instance. - */ - public PropertyChangeHandler() - { - // Nothing to do here. - } - - /** - * Invoked whenever bound property of JComboBox changes. - * - * @param e the event. - */ - public void propertyChange(PropertyChangeEvent e) - { - // Lets assume every change invalidates the minimumsize. - String propName = e.getPropertyName(); - if (propName.equals("enabled")) - { - boolean enabled = comboBox.isEnabled(); - if (editor != null) - editor.setEnabled(enabled); - if (arrowButton != null) - arrowButton.setEnabled(enabled); - - comboBox.repaint(); - } - else if (propName.equals("editor") && comboBox.isEditable()) - { - addEditor(); - comboBox.revalidate(); - } - else if (e.getPropertyName().equals("editable")) - { - if (comboBox.isEditable()) - { - addEditor(); - } - else - { - removeEditor(); - } - - comboBox.revalidate(); - } - else if (propName.equals("model")) - { - // remove ListDataListener from old model and add it to new model - ComboBoxModel oldModel = (ComboBoxModel) e.getOldValue(); - if (oldModel != null && listDataListener != null) - oldModel.removeListDataListener(listDataListener); - - ComboBoxModel newModel = (ComboBoxModel) e.getNewValue(); - if (newModel != null && listDataListener != null) - comboBox.getModel().addListDataListener(listDataListener); - - if (editor != null) - { - comboBox.configureEditor(comboBox.getEditor(), - comboBox.getSelectedItem()); - } - isMinimumSizeDirty = true; - comboBox.revalidate(); - comboBox.repaint(); - } - else if (propName.equals("font")) - { - Font font = (Font) e.getNewValue(); - if (editor != null) - { - editor.setFont(font); - } - listBox.setFont(font); - isMinimumSizeDirty = true; - comboBox.revalidate(); - } - else if (propName.equals("prototypeDisplayValue")) - { - isMinimumSizeDirty = true; - comboBox.revalidate(); - } - else if (propName.equals("renderer")) - { - isMinimumSizeDirty = true; - comboBox.revalidate(); - } - // FIXME: Need to handle changes in other bound properties. - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java b/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java deleted file mode 100644 index 3e54ca7..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicComboPopup.java +++ /dev/null @@ -1,1104 +0,0 @@ -/* BasicComboPopup.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionAdapter; -import java.awt.event.MouseMotionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.BorderFactory; -import javax.swing.ComboBoxModel; -import javax.swing.JComboBox; -import javax.swing.JList; -import javax.swing.JPopupMenu; -import javax.swing.JScrollBar; -import javax.swing.JScrollPane; -import javax.swing.ListCellRenderer; -import javax.swing.ListSelectionModel; -import javax.swing.MenuSelectionManager; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.event.ListDataEvent; -import javax.swing.event.ListDataListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.PopupMenuEvent; -import javax.swing.event.PopupMenuListener; - -/** - * UI Delegate for ComboPopup - * - * @author Olga Rodimina - */ -public class BasicComboPopup extends JPopupMenu implements ComboPopup -{ - /* Timer for autoscrolling */ - protected Timer autoscrollTimer; - - /** ComboBox associated with this popup */ - protected JComboBox comboBox; - - /** FIXME: Need to document */ - protected boolean hasEntered; - - /** - * Indicates whether the scroll bar located in popup menu with comboBox's - * list of items is currently autoscrolling. This happens when mouse event - * originated in the combo box and is dragged outside of its bounds - */ - protected boolean isAutoScrolling; - - /** ItemListener listening to the selection changes in the combo box */ - protected ItemListener itemListener; - - /** This listener is not used */ - protected KeyListener keyListener; - - /** JList which is used to display item is the combo box */ - protected JList list; - - /** This listener is not used */ - protected ListDataListener listDataListener; - - /** - * MouseListener listening to mouse events occuring in the combo box's - * list. - */ - protected MouseListener listMouseListener; - - /** - * MouseMotionListener listening to mouse motion events occuring in the - * combo box's list - */ - protected MouseMotionListener listMouseMotionListener; - - /** This listener is not used */ - protected ListSelectionListener listSelectionListener; - - /** MouseListener listening to mouse events occuring in the combo box */ - protected MouseListener mouseListener; - - /** - * MouseMotionListener listening to mouse motion events occuring in the - * combo box - */ - protected MouseMotionListener mouseMotionListener; - - /** - * PropertyChangeListener listening to changes occuring in the bound - * properties of the combo box - */ - protected PropertyChangeListener propertyChangeListener; - - /** direction for scrolling down list of combo box's items */ - protected static final int SCROLL_DOWN = 1; - - /** direction for scrolling up list of combo box's items */ - protected static final int SCROLL_UP = 0; - - /** Indicates auto scrolling direction */ - protected int scrollDirection; - - /** JScrollPane that contains list portion of the combo box */ - protected JScrollPane scroller; - - /** This field is not used */ - protected boolean valueIsAdjusting; - - /** - * Creates a new BasicComboPopup object. - * - * @param comboBox the combo box with which this popup should be associated - */ - public BasicComboPopup(JComboBox comboBox) - { - this.comboBox = comboBox; - mouseListener = createMouseListener(); - mouseMotionListener = createMouseMotionListener(); - keyListener = createKeyListener(); - - list = createList(); - configureList(); - scroller = createScroller(); - configureScroller(); - configurePopup(); - installComboBoxListeners(); - installKeyboardActions(); - } - - /** - * This method displays drow down list of combo box items on the screen. - */ - public void show() - { - Dimension size = comboBox.getSize(); - size.height = getPopupHeightForRowCount(comboBox.getMaximumRowCount()); - Insets i = getInsets(); - size.width -= i.left + i.right; - Rectangle bounds = computePopupBounds(0, comboBox.getBounds().height, - size.width, size.height); - - scroller.setMaximumSize(bounds.getSize()); - scroller.setPreferredSize(bounds.getSize()); - scroller.setMinimumSize(bounds.getSize()); - list.invalidate(); - - syncListSelection(); - - list.ensureIndexIsVisible(list.getSelectedIndex()); - setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled()); - show(comboBox, bounds.x, bounds.y); - } - - /** - * This method hides drop down list of items - */ - public void hide() - { - MenuSelectionManager menuSelectionManager = - MenuSelectionManager.defaultManager(); - javax.swing.MenuElement[] menuElements = - menuSelectionManager.getSelectedPath(); - for (int i = 0; i < menuElements.length; i++) - { - if (menuElements[i] == this) - { - menuSelectionManager.clearSelectedPath(); - break; - } - } - comboBox.repaint(); - } - - /** - * Return list cointaining JComboBox's items - * - * @return list cointaining JComboBox's items - */ - public JList getList() - { - return list; - } - - /** - * Returns MouseListener that is listening to mouse events occuring in the - * combo box. - * - * @return MouseListener - */ - public MouseListener getMouseListener() - { - return mouseListener; - } - - /** - * Returns MouseMotionListener that is listening to mouse motion events - * occuring in the combo box. - * - * @return MouseMotionListener - */ - public MouseMotionListener getMouseMotionListener() - { - return mouseMotionListener; - } - - /** - * Returns KeyListener listening to key events occuring in the combo box. - * This method returns null because KeyHandler is not longer used. - * - * @return KeyListener - */ - public KeyListener getKeyListener() - { - return keyListener; - } - - /** - * This method uninstalls the UI for the given JComponent. - */ - public void uninstallingUI() - { - if (propertyChangeListener != null) - { - comboBox.removePropertyChangeListener(propertyChangeListener); - } - if (itemListener != null) - { - comboBox.removeItemListener(itemListener); - } - uninstallComboBoxModelListeners(comboBox.getModel()); - uninstallKeyboardActions(); - uninstallListListeners(); - } - - /** - * This method uninstalls listeners that were listening to changes occuring - * in the comb box's data model - * - * @param model data model for the combo box from which to uninstall - * listeners - */ - protected void uninstallComboBoxModelListeners(ComboBoxModel model) - { - model.removeListDataListener(listDataListener); - } - - /** - * This method uninstalls keyboard actions installed by the UI. - */ - protected void uninstallKeyboardActions() - { - // Nothing to do here. - } - - /** - * This method fires PopupMenuEvent indicating that combo box's popup list - * of items will become visible - */ - protected void firePopupMenuWillBecomeVisible() - { - PopupMenuListener[] ll = comboBox.getPopupMenuListeners(); - - for (int i = 0; i < ll.length; i++) - ll[i].popupMenuWillBecomeVisible(new PopupMenuEvent(comboBox)); - } - - /** - * This method fires PopupMenuEvent indicating that combo box's popup list - * of items will become invisible. - */ - protected void firePopupMenuWillBecomeInvisible() - { - PopupMenuListener[] ll = comboBox.getPopupMenuListeners(); - - for (int i = 0; i < ll.length; i++) - ll[i].popupMenuWillBecomeInvisible(new PopupMenuEvent(comboBox)); - } - - /** - * This method fires PopupMenuEvent indicating that combo box's popup list - * of items was closed without selection. - */ - protected void firePopupMenuCanceled() - { - PopupMenuListener[] ll = comboBox.getPopupMenuListeners(); - - for (int i = 0; i < ll.length; i++) - ll[i].popupMenuCanceled(new PopupMenuEvent(comboBox)); - } - - /** - * Creates MouseListener to listen to mouse events occuring in the combo - * box. Note that this listener doesn't listen to mouse events occuring in - * the popup portion of the combo box, it only listens to main combo box - * part. - * - * @return new MouseMotionListener that listens to mouse events occuring in - * the combo box - */ - protected MouseListener createMouseListener() - { - return new InvocationMouseHandler(); - } - - /** - * Create Mouse listener that listens to mouse dragging events occuring in - * the combo box. This listener is responsible for changing the selection - * in the combo box list to the component over which mouse is being - * currently dragged - * - * @return new MouseMotionListener that listens to mouse dragging events - * occuring in the combo box - */ - protected MouseMotionListener createMouseMotionListener() - { - return new InvocationMouseMotionHandler(); - } - - /** - * KeyListener created in this method is not used anymore. - * - * @return KeyListener that does nothing - */ - protected KeyListener createKeyListener() - { - return new InvocationKeyHandler(); - } - - /** - * ListSelectionListener created in this method is not used anymore - * - * @return ListSelectionListener that does nothing - */ - protected ListSelectionListener createListSelectionListener() - { - return new ListSelectionHandler(); - } - - /** - * Creates ListDataListener. This method returns null, because - * ListDataHandler class is obsolete and is no longer used. - * - * @return null - */ - protected ListDataListener createListDataListener() - { - return null; - } - - /** - * This method creates ListMouseListener to listen to mouse events occuring - * in the combo box's item list. - * - * @return MouseListener to listen to mouse events occuring in the combo - * box's items list. - */ - protected MouseListener createListMouseListener() - { - return new ListMouseHandler(); - } - - /** - * Creates ListMouseMotionlistener to listen to mouse motion events occuring - * in the combo box's list. This listener is responsible for highlighting - * items in the list when mouse is moved over them. - * - * @return MouseMotionListener that handles mouse motion events occuring in - * the list of the combo box. - */ - protected MouseMotionListener createListMouseMotionListener() - { - return new ListMouseMotionHandler(); - } - - /** - * Creates PropertyChangeListener to handle changes in the JComboBox's bound - * properties. - * - * @return PropertyChangeListener to handle changes in the JComboBox's bound - * properties. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * Creates new ItemListener that will listen to ItemEvents occuring in the - * combo box. - * - * @return ItemListener to listen to ItemEvents occuring in the combo box. - */ - protected ItemListener createItemListener() - { - return new ItemHandler(); - } - - /** - * Creates JList that will be used to display items in the combo box. - * - * @return JList that will be used to display items in the combo box. - */ - protected JList createList() - { - JList l = new JList(comboBox.getModel()); - return l; - } - - /** - * This method configures the list of comboBox's items by setting default - * properties and installing listeners. - */ - protected void configureList() - { - list.setFont(comboBox.getFont()); - list.setForeground(comboBox.getForeground()); - list.setBackground(comboBox.getBackground()); - Color sfg = UIManager.getColor("ComboBox.selectionForeground"); - list.setSelectionForeground(sfg); - Color sbg = UIManager.getColor("ComboBox.selectionBackground"); - list.setSelectionBackground(sbg); - list.setBorder(null); - list.setCellRenderer(comboBox.getRenderer()); - list.setFocusable(false); - list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); - installListListeners(); - } - - /** - * This method installs list listeners. - */ - protected void installListListeners() - { - // mouse listener listening to mouse events occuring in the - // combo box's list of items. - listMouseListener = createListMouseListener(); - list.addMouseListener(listMouseListener); - - // mouse listener listening to mouse motion events occuring in the - // combo box's list of items - listMouseMotionListener = createListMouseMotionListener(); - list.addMouseMotionListener(listMouseMotionListener); - - listSelectionListener = createListSelectionListener(); - list.addListSelectionListener(listSelectionListener); - } - - /** - * This method creates scroll pane that will contain the list of comboBox's - * items inside of it. - * - * @return JScrollPane - */ - protected JScrollPane createScroller() - { - return new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - } - - /** - * This method configures scroll pane to contain list of comboBox's items - */ - protected void configureScroller() - { - scroller.setBorder(null); - scroller.setFocusable(false); - scroller.getVerticalScrollBar().setFocusable(false); - } - - /** - * This method configures popup menu that will be used to display Scrollpane - * with list of items inside of it. - */ - protected void configurePopup() - { - setBorderPainted(true); - setBorder(BorderFactory.createLineBorder(Color.BLACK)); - setOpaque(false); - add(scroller); - setFocusable(false); - } - - /* - * This method installs listeners that will listen to changes occuring - * in the combo box. - */ - protected void installComboBoxListeners() - { - // item listener listenening to selection events in the combo box - itemListener = createItemListener(); - comboBox.addItemListener(itemListener); - - propertyChangeListener = createPropertyChangeListener(); - comboBox.addPropertyChangeListener(propertyChangeListener); - - installComboBoxModelListeners(comboBox.getModel()); - } - - /** - * This method installs listeners that will listen to changes occuring in - * the comb box's data model - * - * @param model data model for the combo box for which to install listeners - */ - protected void installComboBoxModelListeners(ComboBoxModel model) - { - // list data listener to listen for ListDataEvents in combo box. - // This listener is now obsolete and nothing is done here - listDataListener = createListDataListener(); - comboBox.getModel().addListDataListener(listDataListener); - } - - /** - * Installs the keyboard actions. - */ - protected void installKeyboardActions() - { - // Nothing to do here - } - - /** - * This method always returns false to indicate that items in the combo box - * list are not focus traversable. - * - * @return false - */ - public boolean isFocusTraversable() - { - return false; - } - - /** - * This method start scrolling combo box's list of items either up or down - * depending on the specified 'direction' - * - * @param direction of the scrolling. - */ - protected void startAutoScrolling(int direction) - { - // FIXME: add timer - isAutoScrolling = true; - - if (direction == SCROLL_UP) - autoScrollUp(); - else - autoScrollDown(); - } - - /** - * This method stops scrolling the combo box's list of items - */ - protected void stopAutoScrolling() - { - // FIXME: add timer - isAutoScrolling = false; - } - - /** - * This method scrolls up list of combo box's items up and highlights that - * just became visible. - */ - protected void autoScrollUp() - { - // scroll up the scroll bar to make the item above visible - JScrollBar scrollbar = scroller.getVerticalScrollBar(); - int scrollToNext = list.getScrollableUnitIncrement(super.getBounds(), - SwingConstants.VERTICAL, - SCROLL_UP); - - scrollbar.setValue(scrollbar.getValue() - scrollToNext); - - // If we haven't reached the begging of the combo box's list of items, - // then highlight next element above currently highlighted element - if (list.getSelectedIndex() != 0) - list.setSelectedIndex(list.getSelectedIndex() - 1); - } - - /** - * This method scrolls down list of combo box's and highlights item in the - * list that just became visible. - */ - protected void autoScrollDown() - { - // scroll scrollbar down to make next item visible - JScrollBar scrollbar = scroller.getVerticalScrollBar(); - int scrollToNext = list.getScrollableUnitIncrement(super.getBounds(), - SwingConstants.VERTICAL, - SCROLL_DOWN); - scrollbar.setValue(scrollbar.getValue() + scrollToNext); - - // If we haven't reached the end of the combo box's list of items - // then highlight next element below currently highlighted element - if (list.getSelectedIndex() + 1 != comboBox.getItemCount()) - list.setSelectedIndex(list.getSelectedIndex() + 1); - } - - /** - * This method helps to delegate focus to the right component in the - * JComboBox. If the comboBox is editable then focus is sent to - * ComboBoxEditor, otherwise it is delegated to JComboBox. - * - * @param e MouseEvent - */ - protected void delegateFocus(MouseEvent e) - { - if (comboBox.isEditable()) - comboBox.getEditor().getEditorComponent().requestFocus(); - else - comboBox.requestFocus(); - } - - /** - * This method displays combo box popup if the popup is not currently shown - * on the screen and hides it if it is currently visible - */ - protected void togglePopup() - { - if (isVisible()) - hide(); - else - show(); - } - - /** - * DOCUMENT ME! - * - * @param e DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - protected MouseEvent convertMouseEvent(MouseEvent e) - { - Point point = SwingUtilities.convertPoint((Component) e.getSource(), - e.getPoint(), list); - MouseEvent newEvent = new MouseEvent((Component) e.getSource(), - e.getID(), e.getWhen(), - e.getModifiers(), point.x, point.y, - e.getModifiers(), - e.isPopupTrigger()); - return newEvent; - } - - /** - * Returns required height of the popup such that number of items visible in - * it are equal to the maximum row count. By default - * comboBox.maximumRowCount=8 - * - * @param maxRowCount number of maximum visible rows in the combo box's - * popup list of items - * - * @return height of the popup required to fit number of items equal to - * JComboBox.maximumRowCount. - */ - protected int getPopupHeightForRowCount(int maxRowCount) - { - int totalHeight = 0; - ListCellRenderer rend = list.getCellRenderer(); - - if (comboBox.getItemCount() < maxRowCount) - maxRowCount = comboBox.getItemCount(); - - for (int i = 0; i < maxRowCount; i++) - { - Component comp = rend.getListCellRendererComponent(list, - comboBox.getModel() - .getElementAt(i), - -1, false, false); - Dimension dim = comp.getPreferredSize(); - totalHeight += dim.height; - } - - return totalHeight == 0 ? 100 : totalHeight; - } - - /** - * DOCUMENT ME! - * - * @param px DOCUMENT ME! - * @param py DOCUMENT ME! - * @param pw DOCUMENT ME! - * @param ph DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - protected Rectangle computePopupBounds(int px, int py, int pw, int ph) - { - return new Rectangle(px, py, pw, ph); - } - - /** - * This method changes the selection in the list to the item over which the - * mouse is currently located. - * - * @param anEvent MouseEvent - * @param shouldScroll DOCUMENT ME! - */ - protected void updateListBoxSelectionForEvent(MouseEvent anEvent, - boolean shouldScroll) - { - Point point = anEvent.getPoint(); - if (list != null) - { - int index = list.locationToIndex(point); - if (index == -1) - { - if (point.y < 0) - index = 0; - else - index = comboBox.getModel().getSize() - 1; - } - if (list.getSelectedIndex() != index) - { - list.setSelectedIndex(index); - if (shouldScroll) - list.ensureIndexIsVisible(index); - } - } - } - - /** - * InvocationMouseHandler is a listener that listens to mouse events - * occuring in the combo box. Note that this listener doesn't listen to - * mouse events occuring in the popup portion of the combo box, it only - * listens to main combo box part(area that displays selected item). This - * listener is responsible for showing and hiding popup portion of the - * combo box. - */ - protected class InvocationMouseHandler extends MouseAdapter - { - /** - * Creates a new InvocationMouseHandler object. - */ - protected InvocationMouseHandler() - { - // Nothing to do here. - } - - /** - * This method is invoked whenever mouse is being pressed over the main - * part of the combo box. This method will show popup if the popup is - * not shown on the screen right now, and it will hide popup otherwise. - * - * @param e MouseEvent that should be handled - */ - public void mousePressed(MouseEvent e) - { - if (SwingUtilities.isLeftMouseButton(e) && comboBox.isEnabled()) - { - delegateFocus(e); - togglePopup(); - } - } - - /** - * This method is invoked whenever mouse event was originated in the combo - * box and released either in the combBox list of items or in the combo - * box itself. - * - * @param e MouseEvent that should be handled - */ - public void mouseReleased(MouseEvent e) - { - Component component = (Component) e.getSource(); - Dimension size = component.getSize(); - Rectangle bounds = new Rectangle(0, 0, size.width - 1, size.height - 1); - // If mouse was released inside the bounds of combo box then do nothing, - // Otherwise if mouse was released inside the list of combo box items - // then change selection and close popup - if (! bounds.contains(e.getPoint())) - { - MouseEvent convEvent = convertMouseEvent(e); - Point point = convEvent.getPoint(); - Rectangle visRect = new Rectangle(); - list.computeVisibleRect(visRect); - if (visRect.contains(point)) - { - updateListBoxSelectionForEvent(convEvent, false); - comboBox.setSelectedIndex(list.getSelectedIndex()); - } - hide(); - } - hasEntered = false; - stopAutoScrolling(); - } - } - - /** - * InvocationMouseMotionListener is a mouse listener that listens to mouse - * dragging events occuring in the combo box. - */ - protected class InvocationMouseMotionHandler extends MouseMotionAdapter - { - /** - * Creates a new InvocationMouseMotionHandler object. - */ - protected InvocationMouseMotionHandler() - { - // Nothing to do here. - } - - /** - * This method is responsible for highlighting item in the drop down list - * over which the mouse is currently being dragged. - */ - public void mouseDragged(MouseEvent e) - { - if (isVisible()) - { - MouseEvent convEvent = convertMouseEvent(e); - Rectangle visRect = new Rectangle(); - list.computeVisibleRect(visRect); - if (convEvent.getPoint().y >= visRect.y - && (convEvent.getPoint().y <= visRect.y + visRect.height - 1)) - { - hasEntered = true; - if (isAutoScrolling) - stopAutoScrolling(); - Point point = convEvent.getPoint(); - if (visRect.contains(point)) - { - valueIsAdjusting = true; - updateListBoxSelectionForEvent(convEvent, false); - valueIsAdjusting = false; - } - } - else if (hasEntered) - { - int dir = convEvent.getPoint().y < visRect.y ? SCROLL_UP - : SCROLL_DOWN; - if (isAutoScrolling && scrollDirection != dir) - { - stopAutoScrolling(); - startAutoScrolling(dir); - } - else if (!isAutoScrolling) - startAutoScrolling(dir); - } - else if (e.getPoint().y < 0) - { - hasEntered = true; - startAutoScrolling(SCROLL_UP); - } - } - } - } - - /** - * ItemHandler is an item listener that listens to selection events occuring - * in the combo box. FIXME: should specify here what it does when item is - * selected or deselected in the combo box list. - */ - protected class ItemHandler extends Object implements ItemListener - { - /** - * Creates a new ItemHandler object. - */ - protected ItemHandler() - { - // Nothing to do here. - } - - /** - * This method responds to the selection events occuring in the combo box. - * - * @param e ItemEvent specifying the combo box's selection - */ - public void itemStateChanged(ItemEvent e) - { - if (e.getStateChange() == ItemEvent.SELECTED && ! valueIsAdjusting) - { - valueIsAdjusting = true; - syncListSelection(); - valueIsAdjusting = false; - list.ensureIndexIsVisible(comboBox.getSelectedIndex()); - } - } - } - - /** - * ListMouseHandler is a listener that listens to mouse events occuring in - * the combo box's list of items. This class is responsible for hiding - * popup portion of the combo box if the mouse is released inside the combo - * box's list. - */ - protected class ListMouseHandler extends MouseAdapter - { - protected ListMouseHandler() - { - // Nothing to do here. - } - - public void mousePressed(MouseEvent e) - { - // Nothing to do here. - } - - public void mouseReleased(MouseEvent anEvent) - { - comboBox.setSelectedIndex(list.getSelectedIndex()); - hide(); - } - } - - /** - * ListMouseMotionHandler listens to mouse motion events occuring in the - * combo box's list. This class is responsible for highlighting items in - * the list when mouse is moved over them - */ - protected class ListMouseMotionHandler extends MouseMotionAdapter - { - protected ListMouseMotionHandler() - { - // Nothing to do here. - } - - public void mouseMoved(MouseEvent anEvent) - { - Point point = anEvent.getPoint(); - Rectangle visRect = new Rectangle(); - list.computeVisibleRect(visRect); - if (visRect.contains(point)) - { - valueIsAdjusting = true; - updateListBoxSelectionForEvent(anEvent, false); - valueIsAdjusting = false; - } - } - } - - /** - * This class listens to changes occuring in the bound properties of the - * combo box - */ - protected class PropertyChangeHandler extends Object - implements PropertyChangeListener - { - protected PropertyChangeHandler() - { - // Nothing to do here. - } - - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals("renderer")) - { - list.setCellRenderer(comboBox.getRenderer()); - if (isVisible()) - hide(); - } - if (e.getPropertyName().equals("model")) - { - ComboBoxModel oldModel = (ComboBoxModel) e.getOldValue(); - uninstallComboBoxModelListeners(oldModel); - ComboBoxModel newModel = (ComboBoxModel) e.getNewValue(); - list.setModel(newModel); - installComboBoxModelListeners(newModel); - if (comboBox.getItemCount() > 0) - comboBox.setSelectedIndex(0); - if (isVisible()) - hide(); - } - } - } - - // ------ private helper methods -------------------- - - /** - * This method uninstalls Listeners registered with combo boxes list of - * items - */ - private void uninstallListListeners() - { - list.removeMouseListener(listMouseListener); - listMouseListener = null; - - list.removeMouseMotionListener(listMouseMotionListener); - listMouseMotionListener = null; - } - - void syncListSelection() - { - int index = comboBox.getSelectedIndex(); - if (index == -1) - list.clearSelection(); - else - list.setSelectedIndex(index); - } - - // -------------------------------------------------------------------- - // The following classes are here only for backwards API compatibility - // They aren't used. - // -------------------------------------------------------------------- - - /** - * This class is not used any more. - */ - public class ListDataHandler extends Object implements ListDataListener - { - public ListDataHandler() - { - // Nothing to do here. - } - - public void contentsChanged(ListDataEvent e) - { - // Nothing to do here. - } - - public void intervalAdded(ListDataEvent e) - { - // Nothing to do here. - } - - public void intervalRemoved(ListDataEvent e) - { - // Nothing to do here. - } - } - - /** - * This class is not used anymore - */ - protected class ListSelectionHandler extends Object - implements ListSelectionListener - { - protected ListSelectionHandler() - { - // Nothing to do here. - } - - public void valueChanged(ListSelectionEvent e) - { - // Nothing to do here. - } - } - - /** - * This class is not used anymore - */ - public class InvocationKeyHandler extends KeyAdapter - { - public InvocationKeyHandler() - { - // Nothing to do here. - } - - public void keyReleased(KeyEvent e) - { - // Nothing to do here. - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicDesktopIconUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicDesktopIconUI.java deleted file mode 100644 index e522938..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicDesktopIconUI.java +++ /dev/null @@ -1,592 +0,0 @@ -/* BasicDesktopIconUI.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyVetoException; - -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDesktopPane; -import javax.swing.JInternalFrame; -import javax.swing.JInternalFrame.JDesktopIcon; -import javax.swing.SwingConstants; -import javax.swing.border.Border; -import javax.swing.event.MouseInputAdapter; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.DesktopIconUI; - -/** - * This class acts as the UI delegate for JDesktopIcons for the Basic look and feel. - */ -public class BasicDesktopIconUI extends DesktopIconUI -{ - /** - * This helper class handles mouse events that occur on the JDesktopIcon. - */ - public class MouseInputHandler extends MouseInputAdapter - { - /** The x offset from the MouseEvent coordinates to the top left corner. */ - private transient int xOffset; - - /** The y offset fromt he MouseEvent coordinates to the top left corner. */ - private transient int yOffset; - - /** A cached value of the JDesktopPane that parents this JDesktopIcon. */ - private transient JDesktopPane pane; - - /** - * This method is called when the mouse is dragged in the JDesktopIcon. - * - * @param e The MouseEvent. - */ - public void mouseDragged(MouseEvent e) - { - Rectangle b = desktopIcon.getBounds(); - - moveAndRepaint(desktopIcon, b.x + e.getX() - xOffset, - b.y + e.getY() - yOffset, b.width, b.height); - } - - /** - * This method is called when the mouse is moved in the JDesktopIcon. - * - * @param e The MouseEvent. - */ - public void mouseMoved(MouseEvent e) - { - // Nothing to do. - } - - /** - * This method is called when the mouse is pressed in the JDesktopIcon. - * - * @param e The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - xOffset = e.getX(); - yOffset = e.getY(); - pane = frame.getDesktopPane(); - if (pane != null) - pane.getDesktopManager().beginDraggingFrame(desktopIcon); - } - - /** - * This method is called when the mouse is released in the JDesktopIcon. - * - * @param e The MouseEvent. - */ - public void mouseReleased(MouseEvent e) - { - if (pane != null) - pane.getDesktopManager().endDraggingFrame(desktopIcon); - xOffset = 0; - yOffset = 0; - } - - /** - * This method moves and repaints the JDesktopIcon to the given bounds. - * - * @param f The JComponent to move and repaint. - * @param newX The new x coordinate. - * @param newY The new y coordinate. - * @param newWidth The new width. - * @param newHeight The new height. - */ - public void moveAndRepaint(JComponent f, int newX, int newY, int newWidth, - int newHeight) - { - if (pane != null) - pane.getDesktopManager().dragFrame(f, newX, newY); - else - desktopIcon.setBounds(newX, newY, newWidth, newHeight); - } - } - - /** - * This class acts as the border for the JDesktopIcon. - */ - private class DesktopIconBorder implements Border - { - /** The left inset value. */ - int left = 10; - - /** The top inset value. */ - int top = 4; - - /** The right inset value. */ - int right = top; - - /** The bottom inset value. */ - int bottom = top; - - /** - * This method returns the insets of the border. - * - * @param c The Component to find border insets for. - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return new Insets(top, left, bottom, right); - } - - /** - * This method returns whether the border is opaque. - * - * @return Whether the border is opaque. - */ - public boolean isBorderOpaque() - { - return true; - } - - /** - * This method paints the border. - * - * @param c The Component the border is in. - * @param g The Graphics object to paint with. - * @param x The x coordinate of the Component. - * @param y The y coordinate of the Component. - * @param width The width of the Component. - * @param height The height of the Component. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int width, - int height) - { - g.translate(x, y); - Color saved = g.getColor(); - - g.setColor(Color.LIGHT_GRAY); - - g.fillRect(0, 0, left, height); - g.fillRect(0, 0, width, top); - g.fillRect(0, height - bottom, width, bottom); - g.fillRect(width - right, 0, right, height); - - g.setColor(Color.BLACK); - g.drawRect(0, 0, width - 1, height - 1); - - int fHeight = height / 4; - int hLeft = left / 2; - - g.setColor(Color.BLACK); - g.fillRect(hLeft, fHeight, 2, 2); - g.fillRect(hLeft, fHeight * 2, 2, 2); - g.fillRect(hLeft, fHeight * 3, 2, 2); - - g.setColor(saved); - g.translate(-x, -y); - } - } - - /** The static width and height of the iconSize. */ - private static final int iconSize = 16; - - /** - * This class represents the default frame icon when none - * is supplied by the JInternalFrame. - */ - static class InternalFrameDefaultMenuIcon implements Icon - { - /** - * This returns the icon height. - * - * @return The icon height. - */ - public int getIconHeight() - { - return iconSize; - } - - /** - * This returns the icon width. - * - * @return The icon width. - */ - public int getIconWidth() - { - return iconSize; - } - - /** - * This method paints the icon. - * - * @param c The Component this icon belongs to. - * @param g The Graphics object to paint with. - * @param x The x coordinate to paint at. - * @param y The y coordinate to paint at. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - g.translate(x, y); - Color saved = g.getColor(); - - g.setColor(Color.BLUE); - g.fillRect(0, 0, iconSize, (int) ((double) iconSize / 3) + 1); - - g.setColor(Color.WHITE); - g.fillRect(0, (int) ((double) iconSize / 3), iconSize, iconSize * 5 / 6); - - g.setColor(Color.GRAY); - g.drawRect(0, 0, iconSize, iconSize); - - g.setColor(saved); - g.translate(-x, -y); - } - } - - /** The default JDesktopIcon width. */ - private static final int iconWidth = 160; - - /** The default JDesktopIcon height */ - private static final int iconHeight = 35; - - /** The JDesktopIcon this UI delegate represents. */ - protected JDesktopIcon desktopIcon; - - /** The JInternalFrame associated with the JDesktopIcon. */ - protected JInternalFrame frame; - - /** The MouseListener responsible for reacting to MouseEvents on the JDesktopIcon. */ - private transient MouseInputListener mouseHandler; - - /** The Button in the JDesktopIcon responsible for deiconifying it. - * This is package-private to avoid an accessor method. */ - transient BoundButton button; - - /** The PropertyChangeListener listening to the JDesktopIcon. */ - private transient PropertyChangeListener propertyHandler; - - /** The default icon used when no frame icon is given by the JInternalFrame. */ - static Icon defaultIcon = new InternalFrameDefaultMenuIcon(); - - /** - * This is a helper class that is used in JDesktopIcon and gives the Button a predetermined size. - */ - private class BoundButton extends JButton - { - /** - * Creates a new BoundButton object. - * - * @param title The title of the button. - */ - public BoundButton(String title) - { - super(title); - } - - /** - * This method returns a standard size (based on the defaults of the JDesktopIcon) and the insets. - * - * @return The preferred size of the JDesktopIcon. - */ - public Dimension getPreferredSize() - { - Insets insets = desktopIcon.getInsets(); - return new Dimension(iconWidth - insets.left - insets.right, - iconHeight - insets.top - insets.bottom); - } - - /** - * This method returns the minimum size of the button. - * - * @return The minimum size of the button. - */ - public Dimension getMinimumSize() - { - return getPreferredSize(); - } - - /** - * This method returns the maximum size of the button. - * - * @return The maximum size of the button. - */ - public Dimension getMaximumSize() - { - return getPreferredSize(); - } - } - - /** - * Creates a new BasicDesktopIconUI object. - */ - public BasicDesktopIconUI() - { - // Nothing to do here. - } - - /** - * This method creates a new BasicDesktopIconUI for the given JComponent. - * - * @param c The JComponent to create a UI for. - * - * @return A new BasicDesktopIconUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicDesktopIconUI(); - } - - /** - * This method installs the UI for the given JComponent. - * - * @param c The JComponent to install this UI for. - */ - public void installUI(JComponent c) - { - if (c instanceof JDesktopIcon) - { - desktopIcon = (JDesktopIcon) c; - desktopIcon.setLayout(new BorderLayout()); - frame = desktopIcon.getInternalFrame(); - - installDefaults(); - installComponents(); - installListeners(); - - desktopIcon.setOpaque(true); - } - } - - /** - * This method uninstalls the UI for the given JComponent. - * - * @param c The JComponent to uninstall this UI for. - */ - public void uninstallUI(JComponent c) - { - desktopIcon.setOpaque(false); - - uninstallListeners(); - uninstallComponents(); - uninstallDefaults(); - - frame = null; - desktopIcon.setLayout(null); - desktopIcon = null; - } - - /** - * This method installs the necessary sub components for the JDesktopIcon. - */ - protected void installComponents() - { - // Try to create a button based on what the frame's - // state is currently - button = new BoundButton(frame.getTitle()); - button.setHorizontalAlignment(SwingConstants.LEFT); - button.setHorizontalTextPosition(SwingConstants.TRAILING); - - Icon use = frame.getFrameIcon(); - if (use == null) - use = defaultIcon; - button.setIcon(use); - - desktopIcon.add(button, SwingConstants.CENTER); - } - - /** - * This method uninstalls the sub components for the JDesktopIcon. - */ - protected void uninstallComponents() - { - desktopIcon.remove(button); - - button = null; - } - - /** - * This method installs the listeners needed by this UI. - */ - protected void installListeners() - { - mouseHandler = createMouseInputListener(); - - desktopIcon.addMouseMotionListener(mouseHandler); - desktopIcon.addMouseListener(mouseHandler); - - propertyHandler = new PropertyChangeListener() - { - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(JInternalFrame.TITLE_PROPERTY)) - button.setText(desktopIcon.getInternalFrame().getTitle()); - else if (e.getPropertyName().equals(JInternalFrame.FRAME_ICON_PROPERTY)) - { - Icon use = desktopIcon.getInternalFrame().getFrameIcon(); - if (use == null) - use = defaultIcon; - button.setIcon(use); - } - desktopIcon.revalidate(); - desktopIcon.repaint(); - } - }; - frame.addPropertyChangeListener(propertyHandler); - - button.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - deiconize(); - } - }); - } - - /** - * This method uninstalls the listeners needed by the UI. - */ - protected void uninstallListeners() - { - // button is nulled so no need to remove it. - - frame.removePropertyChangeListener(propertyHandler); - propertyHandler = null; - - desktopIcon.removeMouseMotionListener(mouseHandler); - desktopIcon.removeMouseListener(mouseHandler); - } - - /** - * This method installs the defaults for the JDesktopIcon. - */ - protected void installDefaults() - { - // FIXME: Move border to defaults. - desktopIcon.setBorder(new DesktopIconBorder()); - } - - /** - * This method uninstalls the defaults for the JDesktopIcon. - */ - protected void uninstallDefaults() - { - desktopIcon.setBorder(null); - } - - /** - * This method creates a new MouseInputListener for the JDesktopIcon. - * - * @return A new MouseInputListener. - */ - protected MouseInputListener createMouseInputListener() - { - return new MouseInputHandler(); - } - - /** - * This method returns the preferred size for the given JComponent. - * - * @param c The JComponent to find a preferred size for. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - return new Dimension(iconWidth, iconHeight); - } - - /** - * This method returns the minimum size for the given JComponent. - * - * @param c The JComponent to find a minimum size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the maximum size for the given JComponent. - * - * @param c The JComponent to find a maximum size for. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the insets of the given JComponent. - * - * @param c The JComponent to find insets for. - * - * @return The insets of the given JComponent. - */ - public Insets getInsets(JComponent c) - { - return c.getInsets(); - } - - /** - * This method deiconizes the JInternalFrame associated with the JDesktopIcon. - */ - public void deiconize() - { - try - { - frame.setIcon(false); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicDesktopPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicDesktopPaneUI.java deleted file mode 100644 index cbc3f9f..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicDesktopPaneUI.java +++ /dev/null @@ -1,470 +0,0 @@ -/* BasicDesktopPaneUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.beans.PropertyVetoException; - -import javax.swing.AbstractAction; -import javax.swing.DefaultDesktopManager; -import javax.swing.DesktopManager; -import javax.swing.JComponent; -import javax.swing.JDesktopPane; -import javax.swing.JInternalFrame; -import javax.swing.KeyStroke; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.DesktopPaneUI; -import javax.swing.plaf.UIResource; - -/** - * This class is the UI delegate for JDesktopPane for the Basic look and feel. - */ -public class BasicDesktopPaneUI extends DesktopPaneUI -{ - /** - * This helper class is used to handle key events that cause JInternalFrames - * to be closed. - */ - protected class CloseAction extends AbstractAction - { - /** - * This method is called when the action is performed. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - if (desktop.getSelectedFrame() != null) - { - try - { - desktop.getSelectedFrame().setClosed(true); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempts has been vetoed. - } - } - } - - /** - * This method returns whether the action is enabled. - * - * @return Whether the action is enabled. - */ - public boolean isEnabled() - { - if (desktop.getSelectedFrame() != null) - return desktop.getSelectedFrame().isClosable(); - return false; - } - } - - /** - * This helper class is used to handle key events that cause JInternalFrames - * to be maximized. - */ - protected class MaximizeAction extends AbstractAction - { - /** - * This method is called when the action is performed. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - if (desktop.getSelectedFrame() != null) - { - try - { - desktop.getSelectedFrame().setMaximum(true); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempts has been vetoed. - } - } - } - - /** - * This method returns whether the action is enabled. - * - * @return Whether the action is enabled. - */ - public boolean isEnabled() - { - if (desktop.getSelectedFrame() != null) - return desktop.getSelectedFrame().isMaximizable(); - return false; - } - } - - /** - * This helper class is used to handle key events that cause JInternalFrames - * to be minimized. - */ - protected class MinimizeAction extends AbstractAction - { - /** - * This method is called when the action is performed. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - if (desktop.getSelectedFrame() != null) - { - try - { - desktop.getSelectedFrame().setIcon(true); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } - } - - /** - * This method returns whether the action is enabled. - * - * @return Whether the action is enabled. - */ - public boolean isEnabled() - { - if (desktop.getSelectedFrame() != null) - return desktop.getSelectedFrame().isIconifiable(); - return false; - } - } - - /** - * This helper class is used to handle key events that pass the SELECTED - * property to the next JInternalFrame in the JDesktopPane's list of - * children. - */ - protected class NavigateAction extends AbstractAction - { - /** - * This method is called when the action is performed. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - // This is supposed to set the next selected frame. - JInternalFrame[] frames = desktop.getAllFrames(); - if (frames.length == 0) - return; - - JInternalFrame sFrame = frames[0]; - if (desktop.getSelectedFrame() != null) - sFrame = desktop.getSelectedFrame(); - - int i = 0; - for (; i < frames.length; i++) - if (frames[i] == sFrame) - break; - - // FIXME: Navigate actions go reverse too. - if (i == frames.length) - i = 0; - - desktop.setSelectedFrame(frames[i]); - } - - /** - * This method returns whether the action is enabled. - * - * @return Whether this action is enabled. - */ - public boolean isEnabled() - { - // Always true. - return true; - } - } - - /** - * This helper class is used to restore the JInternalFrame to its original - * size before maximizing or iconifying. - */ - protected class OpenAction extends AbstractAction - { - /** - * This method is called when the action is performed. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - JInternalFrame frame = desktop.getSelectedFrame(); - if (frame != null) - { - try - { - if (frame.isIcon()) - frame.setIcon(false); - else if (frame.isMaximum()) - frame.setMaximum(false); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } - } - - /** - * This method returns whether the action is enabled. - * - * @return Whether this action is enabled. - */ - public boolean isEnabled() - { - // JInternalFrames are always restorable. - return true; - } - } - - /** - * The KeyStroke associated with closing JInternalFrames. - * @deprecated - */ - protected KeyStroke closeKey; - - /** - * The KeyStroke associated with maximizing JInternalFrames. - * @deprecated - */ - protected KeyStroke maximizeKey; - - /** - * The KeyStroke associated with minimizing JInternalFrames. - * @deprecated - */ - protected KeyStroke minimizeKey; - - /** - * The KeyStroke associated with navigating (forward?) through - * JInternalFrames. - * @deprecated - */ - protected KeyStroke navigateKey; - - /** - * The KeyStroke associated with navigating (backward?) through - * JInternalFrames. - * @deprecated - */ - protected KeyStroke navigateKey2; - - /** The default desktop manager used with JDesktopPane. */ - protected DesktopManager desktopManager; - - /** The JDesktopPane this UI is used with. */ - protected JDesktopPane desktop; - - /** - * Creates a new BasicDesktopPaneUI object. - */ - public BasicDesktopPaneUI() - { - // Nothing to do here. - } - - /** - * This method creates a BasicDesktopPaneUI for the given JComponent. - * - * @param c The JComponent to create a UI for. - * - * @return A new BasicDesktopPaneUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicDesktopPaneUI(); - } - - /** - * This method returns the maximum size for the given JComponent. - * - * @param c The JComponent to find a maximum size for. - * - * @return The maximum size for the given JComponent. - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the minimum size for the given JComponent. - * - * @param c The JComponent to find a minimum size for. - * - * @return The minimum size for the given JComponent. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the preferred size for the given JComponent. - * - * @param c The JComponent to find a preferred size for. - * - * @return The preferred size for the given JComponent. - */ - public Dimension getPreferredSize(JComponent c) - { - // return null because JDesktopPanes don't have preferred sizes. - return null; - } - - /** - * This method installs the defaults for the JDesktopPane provided by the - * current look and feel. - */ - protected void installDefaults() - { - Color bg = desktop.getBackground(); - if (bg == null || bg instanceof UIResource) - desktop.setBackground(UIManager.getColor("desktop")); - } - - /** - * This method installs the desktop manager for the JDesktopPane. - */ - protected void installDesktopManager() - { - desktopManager = new DefaultDesktopManager(); - desktop.setDesktopManager(desktopManager); - } - - /** - * This method installs the keyboard actions for the JDesktopPane. - */ - protected void installKeyboardActions() - { - // FIXME: create actions and keystrokes. - registerKeyboardActions(); - } - - /** - * This method installs the UI for the given JComponent. - * - * @param c The JComponent to install this UI for. - */ - public void installUI(JComponent c) - { - if (c instanceof JDesktopPane) - { - desktop = (JDesktopPane) c; - - installDefaults(); - installDesktopManager(); - installKeyboardActions(); - } - } - - /** - * This method registers the actions to the appropriate Action and Input - * maps. - */ - protected void registerKeyboardActions() - { - // FIXME: Do the binding. - // XXX: the gtk windows tend to intercept a lot of the - // key events for themselves. must figure a way past that - // before binding - } - - /** - * This method reverses the work done by the installDefaults method. - */ - protected void uninstallDefaults() - { - desktop.setBackground(null); - } - - /** - * This method reverses the work done by the installDesktopManager method. - */ - protected void uninstallDesktopManager() - { - desktopManager = null; - desktop.setDesktopManager(null); - } - - /** - * This method reverses the work done by the installKeyboardActions method. - */ - protected void uninstallKeyboardActions() - { - unregisterKeyboardActions(); - // FIXME: null the actions and keystrokes. - } - - /** - * This method reverses the work done by the registerKeyboardActions method. - */ - protected void unregisterKeyboardActions() - { - // FIXME: unmap the keystrokes - } - - /** - * This method uninstalls the UI for the given JComponent. It should reverse - * all the work done by the installUI method. - * - * @param c The JComponent to uninstall this UI for. - */ - public void uninstallUI(JComponent c) - { - uninstallKeyboardActions(); - uninstallDesktopManager(); - uninstallDefaults(); - - desktop = null; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicDirectoryModel.java b/libjava/classpath/javax/swing/plaf/basic/BasicDirectoryModel.java deleted file mode 100644 index 62657ad..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicDirectoryModel.java +++ /dev/null @@ -1,586 +0,0 @@ -/* BasicDirectoryModel.java -- - Copyright (C) 2005, 2006 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.plaf.basic; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; -import javax.swing.AbstractListModel; -import javax.swing.JFileChooser; -import javax.swing.SwingUtilities; -import javax.swing.event.ListDataEvent; -import javax.swing.filechooser.FileSystemView; - - -/** - * Implements an AbstractListModel for directories where the source - * of the files is a JFileChooser object. - * - * This class is used for sorting and ordering the file list in - * a JFileChooser L&F object. - */ -public class BasicDirectoryModel extends AbstractListModel - implements PropertyChangeListener -{ - /** The list of files itself */ - private Vector contents; - - /** - * The directories in the list. - */ - private Vector directories; - - /** - * The files in the list. - */ - private Vector files; - - /** The listing mode of the associated JFileChooser, - either FILES_ONLY, DIRECTORIES_ONLY or FILES_AND_DIRECTORIES */ - private int listingMode; - - /** The JFileCooser associated with this model */ - private JFileChooser filechooser; - - /** - * The thread that loads the file view. - */ - private DirectoryLoadThread loadThread; - - /** - * This thread is responsible for loading file lists from the - * current directory and updating the model. - */ - private class DirectoryLoadThread extends Thread - { - - /** - * Updates the Swing list model. - */ - private class UpdateSwingRequest - implements Runnable - { - - private List added; - private int addIndex; - private List removed; - private int removeIndex; - private boolean cancel; - - UpdateSwingRequest(List add, int ai, List rem, int ri) - { - added = add; - addIndex = ai; - removed = rem; - removeIndex = ri; - cancel = false; - } - - public void run() - { - if (! cancel) - { - int numRemoved = removed == null ? 0 : removed.size(); - int numAdded = added == null ? 0 : added.size(); - synchronized (contents) - { - if (numRemoved > 0) - contents.removeAll(removed); - if (numAdded > 0) - contents.addAll(added); - - files = null; - directories = null; - } - if (numRemoved > 0 && numAdded == 0) - fireIntervalRemoved(BasicDirectoryModel.this, removeIndex, - removeIndex + numRemoved - 1); - else if (numRemoved == 0 && numAdded > 0) - fireIntervalAdded(BasicDirectoryModel.this, addIndex, - addIndex + numAdded - 1); - else - fireContentsChanged(); - } - } - - void cancel() - { - cancel = true; - } - } - - /** - * The directory beeing loaded. - */ - File directory; - - /** - * Stores all UpdateSwingRequests that are sent to the event queue. - */ - private UpdateSwingRequest pending; - - /** - * Creates a new DirectoryLoadThread that loads the specified - * directory. - * - * @param dir the directory to load - */ - DirectoryLoadThread(File dir) - { - super("Basic L&F directory loader"); - directory = dir; - } - - public void run() - { - FileSystemView fsv = filechooser.getFileSystemView(); - File[] files = fsv.getFiles(directory, - filechooser.isFileHidingEnabled()); - - // Occasional check if we have been interrupted. - if (isInterrupted()) - return; - - // Check list for accepted files. - Vector accepted = new Vector(); - for (int i = 0; i < files.length; i++) - { - if (filechooser.accept(files[i])) - accepted.add(files[i]); - } - - // Occasional check if we have been interrupted. - if (isInterrupted()) - return; - - // Sort list. - sort(accepted); - - // Now split up directories from files so that we get the directories - // listed before the files. - Vector newFiles = new Vector(); - Vector newDirectories = new Vector(); - for (Iterator i = accepted.iterator(); i.hasNext();) - { - File f = (File) i.next(); - boolean traversable = filechooser.isTraversable(f); - if (traversable) - newDirectories.add(f); - else if (! traversable && filechooser.isFileSelectionEnabled()) - newFiles.add(f); - - // Occasional check if we have been interrupted. - if (isInterrupted()) - return; - - } - - // Build up new file cache. Try to update only the changed elements. - // This will be important for actions like adding new files or - // directories inside a large file list. - Vector newCache = new Vector(newDirectories); - newCache.addAll(newFiles); - - int newSize = newCache.size(); - int oldSize = contents.size(); - if (newSize < oldSize) - { - // Check for removed interval. - int start = -1; - int end = -1; - boolean found = false; - for (int i = 0; i < newSize && !found; i++) - { - if (! newCache.get(i).equals(contents.get(i))) - { - start = i; - end = i + oldSize - newSize; - found = true; - } - } - if (start >= 0 && end > start - && contents.subList(end, oldSize) - .equals(newCache.subList(start, newSize))) - { - // Occasional check if we have been interrupted. - if (isInterrupted()) - return; - - Vector removed = new Vector(contents.subList(start, end)); - UpdateSwingRequest r = new UpdateSwingRequest(null, 0, - removed, start); - invokeLater(r); - newCache = null; - } - } - else if (newSize > oldSize) - { - // Check for inserted interval. - int start = oldSize; - int end = newSize; - boolean found = false; - for (int i = 0; i < oldSize && ! found; i++) - { - if (! newCache.get(i).equals(contents.get(i))) - { - start = i; - boolean foundEnd = false; - for (int j = i; j < newSize && ! foundEnd; j++) - { - if (newCache.get(j).equals(contents.get(i))) - { - end = j; - foundEnd = true; - } - } - end = i + oldSize - newSize; - } - } - if (start >= 0 && end > start - && newCache.subList(end, newSize) - .equals(contents.subList(start, oldSize))) - { - // Occasional check if we have been interrupted. - if (isInterrupted()) - return; - - List added = newCache.subList(start, end); - UpdateSwingRequest r = new UpdateSwingRequest(added, start, - null, 0); - invokeLater(r); - newCache = null; - } - } - - // Handle complete list changes (newCache != null). - if (newCache != null && ! contents.equals(newCache)) - { - // Occasional check if we have been interrupted. - if (isInterrupted()) - return; - UpdateSwingRequest r = new UpdateSwingRequest(newCache, 0, - contents, 0); - invokeLater(r); - } - } - - /** - * Wraps SwingUtilities.invokeLater() and stores the request in - * a Vector so that we can still cancel it later. - * - * @param update the request to invoke - */ - private void invokeLater(UpdateSwingRequest update) - { - pending = update; - SwingUtilities.invokeLater(update); - } - - /** - * Cancels all pending update requests that might be in the AWT - * event queue. - */ - void cancelPending() - { - if (pending != null) - pending.cancel(); - } - } - - /** A Comparator class/object for sorting the file list. */ - private Comparator comparator = new Comparator() - { - public int compare(Object o1, Object o2) - { - if (lt((File) o1, (File) o2)) - return -1; - else - return 1; - } - }; - - /** - * Creates a new BasicDirectoryModel object. - * - * @param filechooser DOCUMENT ME! - */ - public BasicDirectoryModel(JFileChooser filechooser) - { - this.filechooser = filechooser; - filechooser.addPropertyChangeListener(this); - listingMode = filechooser.getFileSelectionMode(); - contents = new Vector(); - validateFileCache(); - } - - /** - * Returns whether a given (File) object is included in the list. - * - * @param o - The file object to test. - * - * @return <code>true</code> if the list contains the given object. - */ - public boolean contains(Object o) - { - return contents.contains(o); - } - - /** - * Fires a content change event. - */ - public void fireContentsChanged() - { - fireContentsChanged(this, 0, getSize() - 1); - } - - /** - * Returns a Vector of (java.io.File) objects containing - * the directories in this list. - * - * @return a Vector - */ - public Vector<File> getDirectories() - { - // Synchronize this with the UpdateSwingRequest for the case when - // contents is modified. - synchronized (contents) - { - Vector dirs = directories; - if (dirs == null) - { - // Initializes this in getFiles(). - getFiles(); - dirs = directories; - } - return dirs; - } - } - - /** - * Returns the (java.io.File) object at - * an index in the list. - * - * @param index The list index - * @return a File object - */ - public Object getElementAt(int index) - { - if (index > getSize() - 1) - return null; - return contents.elementAt(index); - } - - /** - * Returns a Vector of (java.io.File) objects containing - * the files in this list. - * - * @return a Vector - */ - public Vector<File> getFiles() - { - synchronized (contents) - { - Vector f = files; - if (f == null) - { - f = new Vector(); - Vector d = new Vector(); // Directories; - for (Iterator i = contents.iterator(); i.hasNext();) - { - File file = (File) i.next(); - if (filechooser.isTraversable(file)) - d.add(file); - else - f.add(file); - } - files = f; - directories = d; - } - return f; - } - } - - /** - * Returns the size of the list, which only includes directories - * if the JFileChooser is set to DIRECTORIES_ONLY. - * - * Otherwise, both directories and files are included in the count. - * - * @return The size of the list. - */ - public int getSize() - { - return contents.size(); - } - - /** - * Returns the index of an (java.io.File) object in the list. - * - * @param o The object - normally a File. - * - * @return the index of that object, or -1 if it is not in the list. - */ - public int indexOf(Object o) - { - return contents.indexOf(o); - } - - /** - * Obsoleted method which does nothing. - */ - public void intervalAdded(ListDataEvent e) - { - // obsoleted - } - - /** - * Obsoleted method which does nothing. - */ - public void intervalRemoved(ListDataEvent e) - { - // obsoleted - } - - /** - * Obsoleted method which does nothing. - */ - public void invalidateFileCache() - { - // obsoleted - } - - /** - * Less than, determine the relative order in the list of two files - * for sorting purposes. - * - * The order is: directories < files, and thereafter alphabetically, - * using the default locale collation. - * - * @param a the first file - * @param b the second file - * - * @return <code>true</code> if a > b, <code>false</code> if a < b. - */ - protected boolean lt(File a, File b) - { - boolean aTrav = filechooser.isTraversable(a); - boolean bTrav = filechooser.isTraversable(b); - - if (aTrav == bTrav) - { - String aname = a.getName().toLowerCase(); - String bname = b.getName().toLowerCase(); - return (aname.compareTo(bname) < 0) ? true : false; - } - else - { - if (aTrav) - return true; - else - return false; - } - } - - /** - * Listens for a property change; the change in file selection mode of the - * associated JFileChooser. Reloads the file cache on that event. - * - * @param e - A PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - String property = e.getPropertyName(); - if (property.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY) - || property.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY) - || property.equals(JFileChooser.FILE_HIDING_CHANGED_PROPERTY) - || property.equals(JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY) - || property.equals(JFileChooser.FILE_VIEW_CHANGED_PROPERTY) - ) - { - validateFileCache(); - } - } - - /** - * Renames a file - However, does <I>not</I> re-sort the list - * or replace the old file with the new one in the list. - * - * @param oldFile The old file - * @param newFile The new file name - * - * @return <code>true</code> if the rename succeeded - */ - public boolean renameFile(File oldFile, File newFile) - { - return oldFile.renameTo( newFile ); - } - - /** - * Sorts a Vector of File objects. - * - * @param v The Vector to sort. - */ - protected void sort(Vector<? extends File> v) - { - Collections.sort(v, comparator); - } - - /** - * Re-loads the list of files - */ - public void validateFileCache() - { - File dir = filechooser.getCurrentDirectory(); - if (dir != null) - { - // Cancel all pending requests. - if (loadThread != null) - { - loadThread.interrupt(); - loadThread.cancelPending(); - } - loadThread = new DirectoryLoadThread(dir); - loadThread.start(); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicEditorPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicEditorPaneUI.java deleted file mode 100644 index 6ddd251..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicEditorPaneUI.java +++ /dev/null @@ -1,96 +0,0 @@ -/* BasicEditorPaneUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import javax.swing.JComponent; -import javax.swing.JEditorPane; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.EditorKit; -import javax.swing.text.JTextComponent; - -/** - * The UI class for {@link JEditorPane}s. - * - * @author original author unknown - * @author Roman Kennke (roman@kennke.org) - */ -public class BasicEditorPaneUI extends BasicTextUI -{ - /** - * Creates an instance of <code>BasicEditorPaneUI</code> for the text - * component <code>comp</code>. - * - * @param comp the component for which to create an UI - * - * @return the UI for <code>comp</code> - */ - public static ComponentUI createUI(JComponent comp) - { - return new BasicEditorPaneUI(); - } - - /** - * Creates a new <code>BasicEditorPaneUI</code> - */ - public BasicEditorPaneUI() - { - // Do nothing here. - } - - /** - * Returns the property prefix to be used by this UI class. This is - * <code>EditorPane</code> in this case. - * - * @return <code>EditorPane</code> - */ - protected String getPropertyPrefix() - { - return "EditorPane"; - } - - /** - * Gets the EditorKit for the text component. - * - * @param textComponent the text component for which to fetch the editor kit - */ - public EditorKit getEditorKit(JTextComponent textComponent) - { - return ((JEditorPane) textComponent).getEditorKit(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java deleted file mode 100644 index 347686d..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicFileChooserUI.java +++ /dev/null @@ -1,1437 +0,0 @@ -/* BasicFileChooserUI.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Hashtable; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFileChooser; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileSystemView; -import javax.swing.filechooser.FileView; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.FileChooserUI; -import javax.swing.plaf.metal.MetalIconFactory; - - -/** - * A UI delegate for the {@link JFileChooser} component under the - * {@link BasicLookAndFeel}. - */ -public class BasicFileChooserUI extends FileChooserUI -{ - /** - * A file filter that accepts all files. - */ - protected class AcceptAllFileFilter extends FileFilter - { - /** - * Creates a new instance. - */ - public AcceptAllFileFilter() - { - // Nothing to do here. - } - - /** - * Returns <code>true</code> always, as all files are accepted by this - * filter. - * - * @param f the file. - * - * @return Always <code>true</code>. - */ - public boolean accept(File f) - { - return true; - } - - /** - * Returns a description for this filter. - * - * @return A description for the file filter. - */ - public String getDescription() - { - return acceptAllFileFilterText; - } - } - - /** - * Handles a user action to approve the dialog selection. - * - * @see BasicFileChooserUI#getApproveSelectionAction() - */ - protected class ApproveSelectionAction extends AbstractAction - { - /** - * Creates a new ApproveSelectionAction object. - */ - protected ApproveSelectionAction() - { - super("approveSelection"); - } - - /** - * Sets the current selection and closes the dialog. - * - * @param e the action event. - */ - public void actionPerformed(ActionEvent e) - { - Object obj = null; - if (parentPath != null) - obj = new String(parentPath + getFileName()); - else - obj = filechooser.getSelectedFile(); - if (obj != null) - { - File f = filechooser.getFileSystemView().createFileObject(obj.toString()); - File currSelected = filechooser.getSelectedFile(); - if (filechooser.isTraversable(f)) - { - filechooser.setCurrentDirectory(currSelected); - filechooser.rescanCurrentDirectory(); - } - else - { - filechooser.approveSelection(); - closeDialog(); - } - } - else - { - File f = new File(filechooser.getCurrentDirectory(), getFileName()); - if ( selectedDir != null ) - f = selectedDir; - if (filechooser.isTraversable(f)) - { - filechooser.setCurrentDirectory(f); - filechooser.rescanCurrentDirectory(); - } - else - { - filechooser.setSelectedFile(f); - filechooser.approveSelection(); - closeDialog(); - } - } - } - } - - /** - * Provides presentation information about files and directories. - */ - protected class BasicFileView extends FileView - { - /** Storage for cached icons. */ - protected Hashtable<File, Icon> iconCache = new Hashtable<File, Icon>(); - - /** - * Creates a new instance. - */ - public BasicFileView() - { - // Nothing to do here. - } - - /** - * Adds an icon to the cache, associating it with the given file/directory. - * - * @param f the file/directory. - * @param i the icon. - */ - public void cacheIcon(File f, Icon i) - { - iconCache.put(f, i); - } - - /** - * Clears the icon cache. - */ - public void clearIconCache() - { - iconCache.clear(); - } - - /** - * Retrieves the icon associated with the specified file/directory, if - * there is one. - * - * @param f the file/directory. - * - * @return The cached icon (or <code>null</code>). - */ - public Icon getCachedIcon(File f) - { - return (Icon) iconCache.get(f); - } - - /** - * Returns a description of the given file/directory. In this - * implementation, the description is the same as the name returned by - * {@link #getName(File)}. - * - * @param f the file/directory. - * - * @return A description of the given file/directory. - */ - public String getDescription(File f) - { - return getName(f); - } - - /** - * Returns an icon appropriate for the given file or directory. - * - * @param f the file/directory. - * - * @return An icon. - */ - public Icon getIcon(File f) - { - Icon val = getCachedIcon(f); - if (val != null) - return val; - if (filechooser.isTraversable(f)) - val = directoryIcon; - else - val = fileIcon; - cacheIcon(f, val); - return val; - } - - /** - * Returns the name for the given file/directory. - * - * @param f the file/directory. - * - * @return The name of the file/directory. - */ - public String getName(File f) - { - String name = null; - if (f != null) - { - JFileChooser c = getFileChooser(); - FileSystemView v = c.getFileSystemView(); - name = v.getSystemDisplayName(f); - } - return name; - } - - /** - * Returns a localised description for the type of file/directory. - * - * @param f the file/directory. - * - * @return A type description for the given file/directory. - */ - public String getTypeDescription(File f) - { - if (filechooser.isTraversable(f)) - return dirDescText; - else - return fileDescText; - } - - /** - * Returns {@link Boolean#TRUE} if the given file/directory is hidden, - * and {@link Boolean#FALSE} otherwise. - * - * @param f the file/directory. - * - * @return {@link Boolean#TRUE} or {@link Boolean#FALSE}. - */ - public Boolean isHidden(File f) - { - return Boolean.valueOf(filechooser.getFileSystemView().isHiddenFile(f)); - } - } - - /** - * Handles an action to cancel the file chooser. - * - * @see BasicFileChooserUI#getCancelSelectionAction() - */ - protected class CancelSelectionAction extends AbstractAction - { - /** - * Creates a new <code>CancelSelectionAction</code> object. - */ - protected CancelSelectionAction() - { - super(null); - } - - /** - * Cancels the selection and closes the dialog. - * - * @param e the action event (ignored). - */ - public void actionPerformed(ActionEvent e) - { - filechooser.setSelectedFile(null); - filechooser.setSelectedFiles(null); - filechooser.cancelSelection(); - closeDialog(); - } - } - - /** - * An action to handle changes to the parent directory (for example, via - * a click on the "up folder" button). - * - * @see BasicFileChooserUI#getChangeToParentDirectoryAction() - */ - protected class ChangeToParentDirectoryAction extends AbstractAction - { - /** - * Creates a new <code>ChangeToParentDirectoryAction</code> object. - */ - protected ChangeToParentDirectoryAction() - { - super("Go Up"); - } - - /** - * Handles the action event. - * - * @param e the action event. - */ - public void actionPerformed(ActionEvent e) - { - filechooser.changeToParentDirectory(); - filechooser.revalidate(); - filechooser.repaint(); - } - } - - /** - * A mouse listener that handles double-click events. - * - * @see BasicFileChooserUI#createDoubleClickListener(JFileChooser, JList) - */ - protected class DoubleClickListener extends MouseAdapter - { - - /** DOCUMENT ME! */ - private Object lastSelected; - - /** DOCUMENT ME! */ - private JList list; - - /** - * Creates a new DoubleClickListener object. - * - * @param list DOCUMENT ME! - */ - public DoubleClickListener(JList list) - { - this.list = list; - lastSelected = list.getSelectedValue(); - setDirectorySelected(false); - } - - /** - * Handles a mouse click event. - * - * @param e the event. - */ - public void mouseClicked(MouseEvent e) - { - Object p = list.getSelectedValue(); - if (p == null) - return; - FileSystemView fsv = filechooser.getFileSystemView(); - if (e.getClickCount() >= 2 && lastSelected != null && - p.toString().equals(lastSelected.toString())) - { - File f = fsv.createFileObject(lastSelected.toString()); - if (filechooser.isTraversable(f)) - { - filechooser.setCurrentDirectory(f); - filechooser.rescanCurrentDirectory(); - } - else - { - filechooser.setSelectedFile(f); - filechooser.approveSelection(); - closeDialog(); - } - } - else // single click - { - String path = p.toString(); - File f = fsv.createFileObject(path); - filechooser.setSelectedFile(f); - - if (filechooser.isMultiSelectionEnabled()) - { - int[] inds = list.getSelectedIndices(); - File[] allFiles = new File[inds.length]; - for (int i = 0; i < inds.length; i++) - allFiles[i] = (File) list.getModel().getElementAt(inds[i]); - filechooser.setSelectedFiles(allFiles); - } - - if (filechooser.isTraversable(f)) - { - setDirectorySelected(true); - setDirectory(f); - } - else - { - setDirectorySelected(false); - setDirectory(null); - } - lastSelected = path; - parentPath = f.getParent(); - - if (f.isFile()) - setFileName(f.getName()); - else if (filechooser.getFileSelectionMode() != - JFileChooser.FILES_ONLY) - setFileName(path); - } - } - - /** - * Handles a mouse entered event (NOT IMPLEMENTED). - * - * @param e the mouse event. - */ - public void mouseEntered(MouseEvent e) - { - // FIXME: Implement - } - } - - /** - * An action that changes the file chooser to display the user's home - * directory. - * - * @see BasicFileChooserUI#getGoHomeAction() - */ - protected class GoHomeAction extends AbstractAction - { - /** - * Creates a new <code>GoHomeAction</code> object. - */ - protected GoHomeAction() - { - super("Go Home"); - } - - /** - * Sets the directory to the user's home directory, and repaints the - * file chooser component. - * - * @param e the action event (ignored). - */ - public void actionPerformed(ActionEvent e) - { - filechooser.setCurrentDirectory(filechooser.getFileSystemView() - .getHomeDirectory()); - filechooser.revalidate(); - filechooser.repaint(); - } - } - - /** - * An action that handles the creation of a new folder/directory. - * - * @see BasicFileChooserUI#getNewFolderAction() - */ - protected class NewFolderAction extends AbstractAction - { - /** - * Creates a new <code>NewFolderAction</code> object. - */ - protected NewFolderAction() - { - super("New Folder"); - } - - /** - * Handles the event by creating a new folder. - * - * @param e the action event (ignored). - */ - public void actionPerformed(ActionEvent e) - { - try - { - filechooser.getFileSystemView().createNewFolder(filechooser - .getCurrentDirectory()); - } - catch (IOException ioe) - { - return; - } - filechooser.rescanCurrentDirectory(); - filechooser.repaint(); - } - } - - /** - * A listener for selection events in the file list. - * - * @see BasicFileChooserUI#createListSelectionListener(JFileChooser) - */ - protected class SelectionListener implements ListSelectionListener - { - /** - * Creates a new <code>SelectionListener</code> object. - */ - protected SelectionListener() - { - // Nothing to do here. - } - - /** - * Sets the JFileChooser to the selected file on an update - * - * @param e DOCUMENT ME! - */ - public void valueChanged(ListSelectionEvent e) - { - JList list = (JList) e.getSource(); - Object f = list.getSelectedValue(); - if (f == null) - return; - File file = filechooser.getFileSystemView().createFileObject(f.toString()); - if (! filechooser.isTraversable(file)) - { - selectedDir = null; - filechooser.setSelectedFile(file); - } - else - { - selectedDir = file; - filechooser.setSelectedFile(null); - } - } - } - - /** - * DOCUMENT ME! - * - * @see BasicFileChooserUI#getUpdateAction() - */ - protected class UpdateAction extends AbstractAction - { - /** - * Creates a new UpdateAction object. - */ - protected UpdateAction() - { - super(null); - } - - /** - * NOT YET IMPLEMENTED. - * - * @param e the action event. - */ - public void actionPerformed(ActionEvent e) - { - // FIXME: implement this - } - } - - /** The localised mnemonic for the cancel button. */ - protected int cancelButtonMnemonic; - - /** The localised text for the cancel button. */ - protected String cancelButtonText; - - /** The localised tool tip text for the cancel button. */ - protected String cancelButtonToolTipText; - - /** An icon representing a computer. */ - protected Icon computerIcon; - - /** An icon for the "details view" button. */ - protected Icon detailsViewIcon; - - /** An icon representing a directory. */ - protected Icon directoryIcon; - - /** The localised Mnemonic for the open button. */ - protected int directoryOpenButtonMnemonic; - - /** The localised text for the open button. */ - protected String directoryOpenButtonText; - - /** The localised tool tip text for the open button. */ - protected String directoryOpenButtonToolTipText; - - /** An icon representing a file. */ - protected Icon fileIcon; - - /** An icon representing a floppy drive. */ - protected Icon floppyDriveIcon; - - /** An icon representing a hard drive. */ - protected Icon hardDriveIcon; - - /** The localised mnemonic for the "help" button. */ - protected int helpButtonMnemonic; - - /** The localised text for the "help" button. */ - protected String helpButtonText; - - /** The localised tool tip text for the help button. */ - protected String helpButtonToolTipText; - - /** An icon representing the user's home folder. */ - protected Icon homeFolderIcon; - - /** An icon for the "list view" button. */ - protected Icon listViewIcon; - - /** An icon for the "new folder" button. */ - protected Icon newFolderIcon = directoryIcon; - - /** The localised mnemonic for the "open" button. */ - protected int openButtonMnemonic; - - /** The localised text for the "open" button. */ - protected String openButtonText; - - /** The localised tool tip text for the "open" button. */ - protected String openButtonToolTipText; - - /** The localised mnemonic for the "save" button. */ - protected int saveButtonMnemonic; - - /** The localised text for the "save" button. */ - protected String saveButtonText; - - /** The localised tool tip text for the save button. */ - protected String saveButtonToolTipText; - - /** The localised mnemonic for the "update" button. */ - protected int updateButtonMnemonic; - - /** The localised text for the "update" button. */ - protected String updateButtonText; - - /** The localised tool tip text for the "update" button. */ - protected String updateButtonToolTipText; - - /** An icon for the "up folder" button. */ - protected Icon upFolderIcon; - - // -- begin private, but package local since used in inner classes -- - - /** The file chooser component represented by this UI delegate. */ - JFileChooser filechooser; - - /** The model for the directory list. */ - BasicDirectoryModel model; - - /** The file filter for all files. */ - FileFilter acceptAll = new AcceptAllFileFilter(); - - /** The default file view. */ - FileView fv = new BasicFileView(); - - /** The accept (open/save) button. */ - JButton accept; - - /** An optional accessory panel. */ - JPanel accessoryPanel = new JPanel(); - - /** A property change listener. */ - PropertyChangeListener propertyChangeListener; - - /** The text describing the filter for "all files". */ - String acceptAllFileFilterText; - - /** The text describing a directory type. */ - String dirDescText; - - /** The text describing a file type. */ - String fileDescText; - - /** Is a directory selected? */ - boolean dirSelected; - - /** The current directory. */ - File currDir; - - // FIXME: describe what is contained in the bottom panel - /** The bottom panel. */ - JPanel bottomPanel; - - /** The close panel. */ - JPanel closePanel; - - /** Text box that displays file name */ - JTextField entry; - - /** Current parent path */ - String parentPath; - - /** - * The action for the 'approve' button. - * @see #getApproveSelectionAction() - */ - private ApproveSelectionAction approveSelectionAction; - - /** - * The action for the 'cancel' button. - * @see #getCancelSelectionAction() - */ - private CancelSelectionAction cancelSelectionAction; - - /** - * The action for the 'go home' control button. - * @see #getGoHomeAction() - */ - private GoHomeAction goHomeAction; - - /** - * The action for the 'up folder' control button. - * @see #getChangeToParentDirectoryAction() - */ - private ChangeToParentDirectoryAction changeToParentDirectoryAction; - - /** - * The action for the 'new folder' control button. - * @see #getNewFolderAction() - */ - private NewFolderAction newFolderAction; - - /** - * The action for ???. // FIXME: what is this? - * @see #getUpdateAction() - */ - private UpdateAction updateAction; - - /** - * When in FILES_ONLY, mode a directory cannot be selected, so - * we save a reference to any it here. This is used to enter - * the directory on "Open" when in that mode. - */ - private File selectedDir; - - // -- end private -- - - /** - * Closes the dialog. - */ - void closeDialog() - { - Window owner = SwingUtilities.windowForComponent(filechooser); - if (owner instanceof JDialog) - ((JDialog) owner).dispose(); - } - - /** - * Creates a new <code>BasicFileChooserUI</code> object. - * - * @param b the file chooser component. - */ - public BasicFileChooserUI(JFileChooser b) - { - } - - /** - * Returns a UI delegate for the given component. - * - * @param c the component (should be a {@link JFileChooser}). - * - * @return A new UI delegate. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicFileChooserUI((JFileChooser) c); - } - - /** - * Installs the UI for the specified component. - * - * @param c the component (should be a {@link JFileChooser}). - */ - public void installUI(JComponent c) - { - if (c instanceof JFileChooser) - { - JFileChooser fc = (JFileChooser) c; - this.filechooser = fc; - fc.resetChoosableFileFilters(); - createModel(); - clearIconCache(); - installDefaults(fc); - installComponents(fc); - installListeners(fc); - - File path = filechooser.getCurrentDirectory(); - if (path != null) - parentPath = path.getParent(); - } - } - - /** - * Uninstalls this UI from the given component. - * - * @param c the component (should be a {@link JFileChooser}). - */ - public void uninstallUI(JComponent c) - { - model = null; - uninstallListeners(filechooser); - uninstallComponents(filechooser); - uninstallDefaults(filechooser); - filechooser = null; - } - - // FIXME: Indent the entries in the combobox - // Made this method package private to access it from within inner classes - // with better performance - void boxEntries() - { - ArrayList parentFiles = new ArrayList(); - File parent = filechooser.getCurrentDirectory(); - if (parent == null) - parent = filechooser.getFileSystemView().getDefaultDirectory(); - while (parent != null) - { - String name = parent.getName(); - if (name.equals("")) - name = parent.getAbsolutePath(); - - parentFiles.add(parentFiles.size(), name); - parent = parent.getParentFile(); - } - - if (parentFiles.size() == 0) - return; - - } - - /** - * Creates and install the subcomponents for the file chooser. - * - * @param fc the file chooser. - */ - public void installComponents(JFileChooser fc) - { - } - - /** - * Uninstalls the components from the file chooser. - * - * @param fc the file chooser. - */ - public void uninstallComponents(JFileChooser fc) - { - } - - /** - * Installs the listeners required by this UI delegate. - * - * @param fc the file chooser. - */ - protected void installListeners(JFileChooser fc) - { - propertyChangeListener = createPropertyChangeListener(filechooser); - if (propertyChangeListener != null) - filechooser.addPropertyChangeListener(propertyChangeListener); - fc.addPropertyChangeListener(getModel()); - } - - /** - * Uninstalls the listeners previously installed by this UI delegate. - * - * @param fc the file chooser. - */ - protected void uninstallListeners(JFileChooser fc) - { - if (propertyChangeListener != null) - { - filechooser.removePropertyChangeListener(propertyChangeListener); - propertyChangeListener = null; - } - fc.removePropertyChangeListener(getModel()); - } - - /** - * Installs the defaults for this UI delegate. - * - * @param fc the file chooser. - */ - protected void installDefaults(JFileChooser fc) - { - installIcons(fc); - installStrings(fc); - } - - /** - * Uninstalls the defaults previously added by this UI delegate. - * - * @param fc the file chooser. - */ - protected void uninstallDefaults(JFileChooser fc) - { - uninstallStrings(fc); - uninstallIcons(fc); - } - - /** - * Installs the icons for this UI delegate. - * - * @param fc the file chooser (ignored). - */ - protected void installIcons(JFileChooser fc) - { - UIDefaults defaults = UIManager.getLookAndFeelDefaults(); - computerIcon = MetalIconFactory.getTreeComputerIcon(); - detailsViewIcon = defaults.getIcon("FileChooser.detailsViewIcon"); - directoryIcon = new MetalIconFactory.TreeFolderIcon(); - fileIcon = new MetalIconFactory.TreeLeafIcon(); - floppyDriveIcon = MetalIconFactory.getTreeFloppyDriveIcon(); - hardDriveIcon = MetalIconFactory.getTreeHardDriveIcon(); - homeFolderIcon = defaults.getIcon("FileChooser.homeFolderIcon"); - listViewIcon = defaults.getIcon("FileChooser.listViewIcon"); - newFolderIcon = defaults.getIcon("FileChooser.newFolderIcon"); - upFolderIcon = defaults.getIcon("FileChooser.upFolderIcon"); - } - - /** - * Uninstalls the icons previously added by this UI delegate. - * - * @param fc the file chooser. - */ - protected void uninstallIcons(JFileChooser fc) - { - computerIcon = null; - detailsViewIcon = null; - directoryIcon = null; - fileIcon = null; - floppyDriveIcon = null; - hardDriveIcon = null; - homeFolderIcon = null; - listViewIcon = null; - newFolderIcon = null; - upFolderIcon = null; - } - - /** - * Installs the strings used by this UI delegate. - * - * @param fc the file chooser. - */ - protected void installStrings(JFileChooser fc) - { - UIDefaults defaults = UIManager.getLookAndFeelDefaults(); - - dirDescText = defaults.getString("FileChooser.directoryDescriptionText"); - fileDescText = defaults.getString("FileChooser.fileDescriptionText"); - - acceptAllFileFilterText = defaults.getString("FileChooser.acceptAllFileFilterText"); - cancelButtonText = "Cancel"; - cancelButtonToolTipText = "Abort file chooser dialog"; - cancelButtonMnemonic = new Integer((String) UIManager.get("FileChooser.cancelButtonMnemonic")).intValue(); - - directoryOpenButtonText = "Open"; - directoryOpenButtonToolTipText = "Open selected directory"; - directoryOpenButtonMnemonic - = new Integer((String) UIManager.get("FileChooser.directoryOpenButtonMnemonic")).intValue(); - - helpButtonText = "Help"; - helpButtonToolTipText = "FileChooser help"; - helpButtonMnemonic = new Integer((String) UIManager.get("FileChooser.helpButtonMnemonic")).intValue(); - - openButtonText = "Open"; - openButtonToolTipText = "Open selected file"; - openButtonMnemonic = new Integer((String) UIManager.get("FileChooser.openButtonMnemonic")).intValue(); - - saveButtonText = "Save"; - saveButtonToolTipText = "Save selected file"; - saveButtonMnemonic = new Integer((String) UIManager.get("FileChooser.saveButtonMnemonic")).intValue(); - - updateButtonText = "Update"; - updateButtonToolTipText = "Update directory listing"; - updateButtonMnemonic = new Integer((String) UIManager.get("FileChooser.updateButtonMnemonic")).intValue(); - } - - /** - * Uninstalls the strings previously added by this UI delegate. - * - * @param fc the file chooser. - */ - protected void uninstallStrings(JFileChooser fc) - { - acceptAllFileFilterText = null; - dirDescText = null; - fileDescText = null; - - cancelButtonText = null; - cancelButtonToolTipText = null; - - directoryOpenButtonText = null; - directoryOpenButtonToolTipText = null; - - helpButtonText = null; - helpButtonToolTipText = null; - - openButtonText = null; - openButtonToolTipText = null; - - saveButtonText = null; - saveButtonToolTipText = null; - - updateButtonText = null; - updateButtonToolTipText = null; - } - - /** - * Creates a new directory model. - */ - protected void createModel() - { - model = new BasicDirectoryModel(filechooser); - } - - /** - * Returns the directory model. - * - * @return The directory model. - */ - public BasicDirectoryModel getModel() - { - return model; - } - - /** - * Creates a listener to handle changes to the properties of the given - * file chooser component. - * - * @param fc the file chooser component. - * - * @return A new listener. - */ - public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) - { - // The RI returns null here, so do we. - return null; - } - - /** - * Returns the current file name. - * - * @return The current file name. - */ - public String getFileName() - { - return entry.getText(); - } - - /** - * Returns the current directory name. - * - * @return The directory name. - * - * @see #setDirectoryName(String) - */ - public String getDirectoryName() - { - // XXX: I don't see a case where the thing returns something non-null.. - return null; - } - - /** - * Sets the file name. - * - * @param filename the file name. - * - * @see #getFileName() - */ - public void setFileName(String filename) - { - // FIXME: it might be the case that this method provides an access - // point for the JTextField (or whatever) a subclass is using... - //this.filename = filename; - } - - /** - * Sets the directory name (NOT IMPLEMENTED). - * - * @param dirname the directory name. - * - * @see #getDirectoryName() - */ - public void setDirectoryName(String dirname) - { - // FIXME: Implement - } - - /** - * Rescans the current directory. - * - * @param fc the file chooser. - */ - public void rescanCurrentDirectory(JFileChooser fc) - { - getModel().validateFileCache(); - } - - /** - * NOT YET IMPLEMENTED. - * - * @param fc the file chooser. - * @param f the file. - */ - public void ensureFileIsVisible(JFileChooser fc, File f) - { - // XXX: Not sure what this does. - } - - /** - * Returns the {@link JFileChooser} component that this UI delegate - * represents. - * - * @return The component represented by this UI delegate. - */ - public JFileChooser getFileChooser() - { - return filechooser; - } - - /** - * Returns the optional accessory panel. - * - * @return The optional accessory panel. - */ - public JPanel getAccessoryPanel() - { - return accessoryPanel; - } - - /** - * Returns the approve (open or save) button for the dialog. - * - * @param fc the file chooser. - * - * @return The button. - */ - protected JButton getApproveButton(JFileChooser fc) - { - return accept; - } - - /** - * Returns the tool tip text for the approve (open/save) button. This first - * checks the file chooser to see if a value has been explicitly set - if - * not, a default value appropriate for the type of file chooser is - * returned. - * - * @param fc the file chooser. - * - * @return The tool tip text. - */ - public String getApproveButtonToolTipText(JFileChooser fc) - { - if (fc.getApproveButtonToolTipText() != null) - return fc.getApproveButtonToolTipText(); - else if (fc.getDialogType() == JFileChooser.SAVE_DIALOG) - return saveButtonToolTipText; - else - return openButtonToolTipText; - } - - /** - * Clears the icon cache. - */ - public void clearIconCache() - { - if (fv instanceof BasicFileView) - ((BasicFileView) fv).clearIconCache(); - } - - /** - * Creates a new listener to handle selections in the file list. - * - * @param fc the file chooser component. - * - * @return A new instance of {@link SelectionListener}. - */ - public ListSelectionListener createListSelectionListener(JFileChooser fc) - { - return new SelectionListener(); - } - - /** - * Creates a new listener to handle double-click events. - * - * @param fc the file chooser component. - * @param list the list. - * - * @return A new instance of {@link DoubleClickListener}. - */ - protected MouseListener createDoubleClickListener(JFileChooser fc, JList list) - { - return new DoubleClickListener(list); - } - - /** - * Returns <code>true</code> if a directory is selected, and - * <code>false</code> otherwise. - * - * @return A boolean. - */ - protected boolean isDirectorySelected() - { - return dirSelected; - } - - /** - * Sets the flag that indicates whether the current directory is selected. - * - * @param selected the new flag value. - */ - protected void setDirectorySelected(boolean selected) - { - dirSelected = selected; - } - - /** - * Returns the current directory. - * - * @return The current directory. - */ - protected File getDirectory() - { - return currDir; - } - - /** - * Sets the current directory. - * - * @param f the directory. - */ - protected void setDirectory(File f) - { - currDir = f; - } - - /** - * Returns the "accept all" file filter. - * - * @param fc the file chooser component. - * - * @return The "accept all" file filter. - */ - public FileFilter getAcceptAllFileFilter(JFileChooser fc) - { - return acceptAll; - } - - /** - * Returns the default file view (NOT the file view from the file chooser, - * if there is one). - * - * @param fc the file chooser component. - * - * @return The file view. - * - * @see JFileChooser#getFileView() - */ - public FileView getFileView(JFileChooser fc) - { - return fv; - } - - /** - * Returns the dialog title. - * - * @param fc the file chooser (<code>null</code> not permitted). - * - * @return The dialog title. - * - * @see JFileChooser#getDialogTitle() - */ - public String getDialogTitle(JFileChooser fc) - { - String result = fc.getDialogTitle(); - if (result == null) - result = getApproveButtonText(fc); - return result; - } - - /** - * Returns the approve button mnemonic. - * - * @param fc the file chooser (<code>null</code> not permitted). - * - * @return The approve button mnemonic. - * - * @see JFileChooser#getApproveButtonMnemonic() - */ - public int getApproveButtonMnemonic(JFileChooser fc) - { - if (fc.getApproveButtonMnemonic() != 0) - return fc.getApproveButtonMnemonic(); - else if (fc.getDialogType() == JFileChooser.SAVE_DIALOG) - return saveButtonMnemonic; - else - return openButtonMnemonic; - } - - /** - * Returns the approve button text. - * - * @param fc the file chooser (<code>null</code> not permitted). - * - * @return The approve button text. - * - * @see JFileChooser#getApproveButtonText() - */ - public String getApproveButtonText(JFileChooser fc) - { - String result = fc.getApproveButtonText(); - if (result == null) - { - if (fc.getDialogType() == JFileChooser.SAVE_DIALOG) - result = saveButtonText; - else - result = openButtonText; - } - return result; - } - - /** - * Creates and returns a new action that will be used with the "new folder" - * button. - * - * @return A new instance of {@link NewFolderAction}. - */ - public Action getNewFolderAction() - { - if (newFolderAction == null) - newFolderAction = new NewFolderAction(); - return newFolderAction; - } - - /** - * Creates and returns a new action that will be used with the "home folder" - * button. - * - * @return A new instance of {@link GoHomeAction}. - */ - public Action getGoHomeAction() - { - if (goHomeAction == null) - goHomeAction = new GoHomeAction(); - return goHomeAction; - } - - /** - * Returns the action that handles events for the "up folder" control button. - * - * @return An instance of {@link ChangeToParentDirectoryAction}. - */ - public Action getChangeToParentDirectoryAction() - { - if (changeToParentDirectoryAction == null) - changeToParentDirectoryAction = new ChangeToParentDirectoryAction(); - return changeToParentDirectoryAction; - } - - /** - * Returns the action that handles events for the "approve" button. - * - * @return An instance of {@link ApproveSelectionAction}. - */ - public Action getApproveSelectionAction() - { - if (approveSelectionAction == null) - approveSelectionAction = new ApproveSelectionAction(); - return approveSelectionAction; - } - - /** - * Returns the action that handles events for the "cancel" button. - * - * @return An instance of {@link CancelSelectionAction}. - */ - public Action getCancelSelectionAction() - { - if (cancelSelectionAction == null) - cancelSelectionAction = new CancelSelectionAction(); - return cancelSelectionAction; - } - - /** - * Returns the update action (an instance of {@link UpdateAction}). - * - * @return An action. - */ - public Action getUpdateAction() - { - if (updateAction == null) - updateAction = new UpdateAction(); - return updateAction; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java deleted file mode 100644 index 5559214..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicFormattedTextFieldUI.java +++ /dev/null @@ -1,69 +0,0 @@ -/* BasicFormattedTextFieldUI.java - Copyright (C) 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.plaf.basic; - -import javax.swing.JComponent; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; - -/** - * @since 1.4 - */ -public class BasicFormattedTextFieldUI extends BasicTextFieldUI -{ - public BasicFormattedTextFieldUI() - { - // Nothing to do here. - } - - public static ComponentUI createUI(JComponent c) - { - return new BasicFormattedTextFieldUI(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "FormattedTextField" - */ - protected String getPropertyPrefix() - { - return "FormattedTextField"; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicGraphicsUtils.java b/libjava/classpath/javax/swing/plaf/basic/BasicGraphicsUtils.java deleted file mode 100644 index f270d33..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicGraphicsUtils.java +++ /dev/null @@ -1,821 +0,0 @@ -/* BasicGraphicsUtils.java - Copyright (C) 2003, 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.plaf.basic; - -import gnu.classpath.SystemProperties; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Insets; -import java.awt.Rectangle; -import java.awt.font.FontRenderContext; -import java.awt.font.LineMetrics; -import java.awt.font.TextLayout; -import java.awt.geom.Rectangle2D; - -import javax.swing.AbstractButton; -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.SwingUtilities; - - -/** - * A utility class providing commonly used drawing and measurement - * routines. - * - * @author Sascha Brawer (brawer@dandelis.ch) - */ -public class BasicGraphicsUtils -{ - /** - * Used as a key for a client property to store cached TextLayouts in. This - * is used for speed-up drawing of text in - * {@link #drawString(Graphics, String, int, int, int)}. - */ - static final String CACHED_TEXT_LAYOUT = - "BasicGraphicsUtils.cachedTextLayout"; - - /** - * Constructor. It is utterly unclear why this class should - * be constructable, but this is what the API specification - * says. - */ - public BasicGraphicsUtils() - { - // Nothing to do here. - } - - - /** - * Draws a rectangle that appears etched into the surface, given - * four colors that are used for drawing. - * - * <p><img src="doc-files/BasicGraphicsUtils-1.png" width="360" - * height="200" alt="[An illustration that shows which pixels - * get painted in what color]" /> - * - * @param g the graphics into which the rectangle is drawn. - * @param x the x coordinate of the rectangle. - * @param y the y coordinate of the rectangle. - * @param width the width of the rectangle in pixels. - * @param height the height of the rectangle in pixels. - * - * @param shadow the color that will be used for painting - * the outer side of the top and left edges. - * - * @param darkShadow the color that will be used for painting - * the inner side of the top and left edges. - * - * @param highlight the color that will be used for painting - * the inner side of the bottom and right edges. - * - * @param lightHighlight the color that will be used for painting - * the outer side of the bottom and right edges. - * - * @see #getEtchedInsets() - * @see javax.swing.border.EtchedBorder - */ - public static void drawEtchedRect(Graphics g, - int x, int y, int width, int height, - Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - Color oldColor; - int x2, y2; - - oldColor = g.getColor(); - x2 = x + width - 1; - y2 = y + height - 1; - - try - { - /* To understand this code, it might be helpful to look at the - * image "BasicGraphicsUtils-1.png" that is included with the - * JavaDoc. The file is located in the "doc-files" subdirectory. - * - * (x2, y2) is the coordinate of the most right and bottom pixel - * to be painted. - */ - g.setColor(shadow); - g.drawLine(x, y, x2 - 1, y); // top, outer - g.drawLine(x, y + 1, x, y2 - 1); // left, outer - - g.setColor(darkShadow); - g.drawLine(x + 1, y + 1, x2 - 2, y + 1); // top, inner - g.drawLine(x + 1, y + 2, x + 1, y2 - 2); // left, inner - - g.setColor(highlight); - g.drawLine(x + 1, y2 - 1, x2 - 1, y2 - 1); // bottom, inner - g.drawLine(x2 - 1, y + 1, x2 - 1, y2 - 2); // right, inner - - g.setColor(lightHighlight); - g.drawLine(x, y2, x2, y2); // bottom, outer - g.drawLine(x2, y, x2, y2 - 1); // right, outer - } - finally - { - g.setColor(oldColor); - } - } - - - /** - * Determines the width of the border that gets painted by - * {@link #drawEtchedRect}. - * - * @return an <code>Insets</code> object whose <code>top</code>, - * <code>left</code>, <code>bottom</code> and - * <code>right</code> field contain the border width at the - * respective edge in pixels. - */ - public static Insets getEtchedInsets() - { - return new Insets(2, 2, 2, 2); - } - - - /** - * Draws a rectangle that appears etched into the surface, given - * two colors that are used for drawing. - * - * <p><img src="doc-files/BasicGraphicsUtils-2.png" width="360" - * height="200" alt="[An illustration that shows which pixels - * get painted in what color]" /> - * - * @param g the graphics into which the rectangle is drawn. - * @param x the x coordinate of the rectangle. - * @param y the y coordinate of the rectangle. - * @param width the width of the rectangle in pixels. - * @param height the height of the rectangle in pixels. - * - * @param shadow the color that will be used for painting the outer - * side of the top and left edges, and for the inner side of - * the bottom and right ones. - * - * @param highlight the color that will be used for painting the - * inner side of the top and left edges, and for the outer - * side of the bottom and right ones. - * - * @see #getGrooveInsets() - * @see javax.swing.border.EtchedBorder - */ - public static void drawGroove(Graphics g, - int x, int y, int width, int height, - Color shadow, Color highlight) - { - /* To understand this, it might be helpful to look at the image - * "BasicGraphicsUtils-2.png" that is included with the JavaDoc, - * and to compare it with "BasicGraphicsUtils-1.png" which shows - * the pixels painted by drawEtchedRect. These image files are - * located in the "doc-files" subdirectory. - */ - drawEtchedRect(g, x, y, width, height, - /* outer topLeft */ shadow, - /* inner topLeft */ highlight, - /* inner bottomRight */ shadow, - /* outer bottomRight */ highlight); - } - - - /** - * Determines the width of the border that gets painted by - * {@link #drawGroove}. - * - * @return an <code>Insets</code> object whose <code>top</code>, - * <code>left</code>, <code>bottom</code> and - * <code>right</code> field contain the border width at the - * respective edge in pixels. - */ - public static Insets getGrooveInsets() - { - return new Insets(2, 2, 2, 2); - } - - - /** - * Draws a border that is suitable for buttons of the Basic look and - * feel. - * - * <p><img src="doc-files/BasicGraphicsUtils-3.png" width="500" - * height="300" alt="[An illustration that shows which pixels - * get painted in what color]" /> - * - * @param g the graphics into which the rectangle is drawn. - * @param x the x coordinate of the rectangle. - * @param y the y coordinate of the rectangle. - * @param width the width of the rectangle in pixels. - * @param height the height of the rectangle in pixels. - * - * @param isPressed <code>true</code> to draw the button border - * with a pressed-in appearance; <code>false</code> for - * normal (unpressed) appearance. - * - * @param isDefault <code>true</code> to draw the border with - * the appearance it has when hitting the enter key in a - * dialog will simulate a click to this button; - * <code>false</code> for normal appearance. - * - * @param shadow the shadow color. - * @param darkShadow a darker variant of the shadow color. - * @param highlight the highlight color. - * @param lightHighlight a brighter variant of the highlight color. - */ - public static void drawBezel(Graphics g, - int x, int y, int width, int height, - boolean isPressed, boolean isDefault, - Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - Color oldColor = g.getColor(); - - /* To understand this, it might be helpful to look at the image - * "BasicGraphicsUtils-3.png" that is included with the JavaDoc, - * and to compare it with "BasicGraphicsUtils-1.png" which shows - * the pixels painted by drawEtchedRect. These image files are - * located in the "doc-files" subdirectory. - */ - try - { - if ((isPressed == false) && (isDefault == false)) - { - drawEtchedRect(g, x, y, width, height, - lightHighlight, highlight, - shadow, darkShadow); - } - - if ((isPressed == true) && (isDefault == false)) - { - g.setColor(shadow); - g.drawRect(x + 1, y + 1, width - 2, height - 2); - } - - if ((isPressed == false) && (isDefault == true)) - { - g.setColor(darkShadow); - g.drawRect(x, y, width - 1, height - 1); - drawEtchedRect(g, x + 1, y + 1, width - 2, height - 2, - lightHighlight, highlight, - shadow, darkShadow); - } - - if ((isPressed == true) && (isDefault == true)) - { - g.setColor(darkShadow); - g.drawRect(x, y, width - 1, height - 1); - g.setColor(shadow); - g.drawRect(x + 1, y + 1, width - 3, height - 3); - } - } - finally - { - g.setColor(oldColor); - } - } - - - /** - * Draws a rectangle that appears lowered into the surface, given - * four colors that are used for drawing. - * - * <p><img src="doc-files/BasicGraphicsUtils-4.png" width="360" - * height="200" alt="[An illustration that shows which pixels - * get painted in what color]" /> - * - * <p><strong>Compatibility with the Sun reference - * implementation:</strong> The Sun reference implementation seems - * to ignore the <code>x</code> and <code>y</code> arguments, at - * least in JDK 1.3.1 and 1.4.1_01. The method always draws the - * rectangular area at location (0, 0). A bug report has been filed - * with Sun; its “bug ID” is 4880003. The GNU Classpath - * implementation behaves correctly, thus not replicating this bug. - * - * @param g the graphics into which the rectangle is drawn. - * @param x the x coordinate of the rectangle. - * @param y the y coordinate of the rectangle. - * @param width the width of the rectangle in pixels. - * @param height the height of the rectangle in pixels. - * - * @param shadow the color that will be used for painting - * the inner side of the top and left edges. - * - * @param darkShadow the color that will be used for painting - * the outer side of the top and left edges. - * - * @param highlight the color that will be used for painting - * the inner side of the bottom and right edges. - * - * @param lightHighlight the color that will be used for painting - * the outer side of the bottom and right edges. - */ - public static void drawLoweredBezel(Graphics g, - int x, int y, int width, int height, - Color shadow, Color darkShadow, - Color highlight, Color lightHighlight) - { - /* Like drawEtchedRect, but swapping darkShadow and shadow. - * - * To understand this, it might be helpful to look at the image - * "BasicGraphicsUtils-4.png" that is included with the JavaDoc, - * and to compare it with "BasicGraphicsUtils-1.png" which shows - * the pixels painted by drawEtchedRect. These image files are - * located in the "doc-files" subdirectory. - */ - drawEtchedRect(g, x, y, width, height, - darkShadow, shadow, - highlight, lightHighlight); - } - - - /** - * Draws a String at the given location, underlining the first - * occurence of a specified character. The algorithm for determining - * the underlined position is not sensitive to case. If the - * character is not part of <code>text</code>, the text will be - * drawn without underlining. Drawing is performed in the current - * color and font of <code>g</code>. - * - * <p><img src="doc-files/BasicGraphicsUtils-5.png" width="500" - * height="100" alt="[An illustration showing how to use the - * method]" /> - * - * @param g the graphics into which the String is drawn. - * - * @param text the String to draw. - * - * @param underlinedChar the character whose first occurence in - * <code>text</code> will be underlined. It is not clear - * why the API specification declares this argument to be - * of type <code>int</code> instead of <code>char</code>. - * While this would allow to pass Unicode characters outside - * Basic Multilingual Plane 0 (U+0000 .. U+FFFE), at least - * the GNU Classpath implementation does not underline - * anything if <code>underlinedChar</code> is outside - * the range of <code>char</code>. - * - * @param x the x coordinate of the text, as it would be passed to - * {@link java.awt.Graphics#drawString(java.lang.String, - * int, int)}. - * - * @param y the y coordinate of the text, as it would be passed to - * {@link java.awt.Graphics#drawString(java.lang.String, - * int, int)}. - */ - public static void drawString(Graphics g, String text, - int underlinedChar, int x, int y) - { - int index = -1; - - /* It is intentional that lower case is used. In some languages, - * the set of lowercase characters is larger than the set of - * uppercase ones. Therefore, it is good practice to use lowercase - * for such comparisons (which really means that the author of this - * code can vaguely remember having read some Unicode techreport - * with this recommendation, but is too lazy to look for the URL). - */ - if ((underlinedChar >= 0) || (underlinedChar <= 0xffff)) - index = text.toLowerCase().indexOf( - Character.toLowerCase((char) underlinedChar)); - - drawStringUnderlineCharAt(g, text, index, x, y); - } - - - /** - * Draws a String at the given location, underlining the character - * at the specified index. Drawing is performed in the current color - * and font of <code>g</code>. - * - * <p><img src="doc-files/BasicGraphicsUtils-5.png" width="500" - * height="100" alt="[An illustration showing how to use the - * method]" /> - * - * @param g the graphics into which the String is drawn. - * - * @param text the String to draw. - * - * @param underlinedIndex the index of the underlined character in - * <code>text</code>. If <code>underlinedIndex</code> falls - * outside the range <code>[0, text.length() - 1]</code>, the - * text will be drawn without underlining anything. - * - * @param x the x coordinate of the text, as it would be passed to - * {@link java.awt.Graphics#drawString(java.lang.String, - * int, int)}. - * - * @param y the y coordinate of the text, as it would be passed to - * {@link java.awt.Graphics#drawString(java.lang.String, - * int, int)}. - * - * @since 1.4 - */ - public static void drawStringUnderlineCharAt(Graphics g, String text, - int underlinedIndex, - int x, int y) - { - Graphics2D g2; - Rectangle2D.Double underline; - FontRenderContext frc; - FontMetrics fmet; - LineMetrics lineMetrics; - Font font; - TextLayout layout; - double underlineX1, underlineX2; - boolean drawUnderline; - int textLength; - - textLength = text.length(); - if (textLength == 0) - return; - - drawUnderline = (underlinedIndex >= 0) && (underlinedIndex < textLength); - - // FIXME: unfortunately pango and cairo can't agree on metrics - // so for the time being we continue to *not* use TextLayouts. - if (true || !(g instanceof Graphics2D)) - { - /* Fall-back. This is likely to produce garbage for any text - * containing right-to-left (Hebrew or Arabic) characters, even - * if the underlined character is left-to-right. - */ - g.drawString(text, x, y); - if (drawUnderline) - { - fmet = g.getFontMetrics(); - g.fillRect( - /* x */ x + fmet.stringWidth(text.substring(0, underlinedIndex)), - /* y */ y + fmet.getDescent() - 1, - /* width */ fmet.charWidth(text.charAt(underlinedIndex)), - /* height */ 1); - } - - return; - } - - g2 = (Graphics2D) g; - font = g2.getFont(); - frc = g2.getFontRenderContext(); - lineMetrics = font.getLineMetrics(text, frc); - layout = new TextLayout(text, font, frc); - - /* Draw the text. */ - layout.draw(g2, x, y); - if (!drawUnderline) - return; - - underlineX1 = x + layout.getLogicalHighlightShape( - underlinedIndex, underlinedIndex).getBounds2D().getX(); - underlineX2 = x + layout.getLogicalHighlightShape( - underlinedIndex + 1, underlinedIndex + 1).getBounds2D().getX(); - - underline = new Rectangle2D.Double(); - if (underlineX1 < underlineX2) - { - underline.x = underlineX1; - underline.width = underlineX2 - underlineX1; - } - else - { - underline.x = underlineX2; - underline.width = underlineX1 - underlineX2; - } - - - underline.height = lineMetrics.getUnderlineThickness(); - underline.y = lineMetrics.getUnderlineOffset(); - if (underline.y == 0) - { - /* Some fonts do not specify an underline offset, although they - * actually should do so. In that case, the result of calling - * lineMetrics.getUnderlineOffset() will be zero. Since it would - * look very ugly if the underline was be positioned immediately - * below the baseline, we check for this and move the underline - * below the descent, as shown in the following ASCII picture: - * - * ##### ##### # - * # # # # - * # # # # - * # # # # - * ##### ###### ---- baseline (0) - * # - * # - * ------------------###----------- lineMetrics.getDescent() - */ - underline.y = lineMetrics.getDescent(); - } - - underline.y += y; - g2.fill(underline); - } - - /** - * Draws a string on the specified component. - * - * @param c the component - * @param g the Graphics context - * @param text the string - * @param underlinedChar the character to be underlined - * @param x the X location - * @param y the Y location - */ - static void drawString(JComponent c, Graphics g, String text, - int underlinedChar, int x, int y) - { - int index = -1; - - /* It is intentional that lower case is used. In some languages, - * the set of lowercase characters is larger than the set of - * uppercase ones. Therefore, it is good practice to use lowercase - * for such comparisons (which really means that the author of this - * code can vaguely remember having read some Unicode techreport - * with this recommendation, but is too lazy to look for the URL). - */ - if ((underlinedChar >= 0) || (underlinedChar <= 0xffff)) - index = text.toLowerCase().indexOf( - Character.toLowerCase((char) underlinedChar)); - - drawStringUnderlineCharAt(c, g, text, index, x, y); - } - - - /** - * Draws a String at the given location, underlining the character - * at the specified index. Drawing is performed in the current color - * and font of <code>g</code>. - * - * <p><img src="doc-files/BasicGraphicsUtils-5.png" width="500" - * height="100" alt="[An illustration showing how to use the - * method]" /> - * - * This is an accelerated version of the method with the same name. It - * uses a pre-laid out TextLayout stored in a client property. - * - * @param c the component that is drawn - * @param g the graphics into which the String is drawn. - * - * @param text the String to draw. - * - * @param underlinedIndex the index of the underlined character in - * <code>text</code>. If <code>underlinedIndex</code> falls - * outside the range <code>[0, text.length() - 1]</code>, the - * text will be drawn without underlining anything. - * - * @param x the x coordinate of the text, as it would be passed to - * {@link java.awt.Graphics#drawString(java.lang.String, - * int, int)}. - * - * @param y the y coordinate of the text, as it would be passed to - * {@link java.awt.Graphics#drawString(java.lang.String, - * int, int)}. - */ - static void drawStringUnderlineCharAt(JComponent c, Graphics g, String text, - int underlinedIndex, - int x, int y) - { - Graphics2D g2; - Rectangle2D.Double underline; - FontRenderContext frc; - FontMetrics fmet; - LineMetrics lineMetrics; - Font font; - TextLayout layout; - double underlineX1, underlineX2; - boolean drawUnderline; - int textLength; - - textLength = text.length(); - if (textLength == 0) - return; - - drawUnderline = (underlinedIndex >= 0) && (underlinedIndex < textLength); - - // FIXME: unfortunately pango and cairo can't agree on metrics - // so for the time being we continue to *not* use TextLayouts. - if (!(g instanceof Graphics2D) - || SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") != null) - { - /* Fall-back. This is likely to produce garbage for any text - * containing right-to-left (Hebrew or Arabic) characters, even - * if the underlined character is left-to-right. - */ - g.drawString(text, x, y); - if (drawUnderline) - { - fmet = g.getFontMetrics(); - g.fillRect( - /* x */ x + fmet.stringWidth(text.substring(0, underlinedIndex)), - /* y */ y + 1, - /* width */ fmet.charWidth(text.charAt(underlinedIndex)), - /* height */ 1); - } - - return; - } - - g2 = (Graphics2D) g; - font = g2.getFont(); - frc = g2.getFontRenderContext(); - lineMetrics = font.getLineMetrics(text, frc); - layout = (TextLayout) c.getClientProperty(CACHED_TEXT_LAYOUT); - if (layout == null) - { - layout = new TextLayout(text, font, frc); - System.err.println("Unable to use cached TextLayout for: " + text); - } - - /* Draw the text. */ - layout.draw(g2, x, y); - if (!drawUnderline) - return; - - underlineX1 = x + layout.getLogicalHighlightShape( - underlinedIndex, underlinedIndex).getBounds2D().getX(); - underlineX2 = x + layout.getLogicalHighlightShape( - underlinedIndex + 1, underlinedIndex + 1).getBounds2D().getX(); - - underline = new Rectangle2D.Double(); - if (underlineX1 < underlineX2) - { - underline.x = underlineX1; - underline.width = underlineX2 - underlineX1; - } - else - { - underline.x = underlineX2; - underline.width = underlineX1 - underlineX2; - } - - - underline.height = lineMetrics.getUnderlineThickness(); - underline.y = lineMetrics.getUnderlineOffset(); - if (underline.y == 0) - { - /* Some fonts do not specify an underline offset, although they - * actually should do so. In that case, the result of calling - * lineMetrics.getUnderlineOffset() will be zero. Since it would - * look very ugly if the underline was be positioned immediately - * below the baseline, we check for this and move the underline - * below the descent, as shown in the following ASCII picture: - * - * ##### ##### # - * # # # # - * # # # # - * # # # # - * ##### ###### ---- baseline (0) - * # - * # - * ------------------###----------- lineMetrics.getDescent() - */ - underline.y = lineMetrics.getDescent(); - } - - underline.y += y; - g2.fill(underline); - } - - /** - * Draws a rectangle, simulating a dotted stroke by painting only - * every second pixel along the one-pixel thick edge. The color of - * those pixels is the current color of the Graphics <code>g</code>. - * Any other pixels are left unchanged. - * - * <p><img src="doc-files/BasicGraphicsUtils-7.png" width="360" - * height="200" alt="[An illustration that shows which pixels - * get painted]" /> - * - * @param g the graphics into which the rectangle is drawn. - * @param x the x coordinate of the rectangle. - * @param y the y coordinate of the rectangle. - * @param width the width of the rectangle in pixels. - * @param height the height of the rectangle in pixels. - */ - public static void drawDashedRect(Graphics g, - int x, int y, int width, int height) - { - int right = x + width - 1; - int bottom = y + height - 1; - - /* Draw the top and bottom edge of the dotted rectangle. */ - for (int i = x; i <= right; i += 2) - { - g.drawLine(i, y, i, y); - g.drawLine(i, bottom, i, bottom); - } - - /* Draw the left and right edge of the dotted rectangle. */ - for (int i = y; i <= bottom; i += 2) - { - g.drawLine(x, i, x, i); - g.drawLine(right, i, right, i); - } - } - - /** - * Determines the preferred width and height of an AbstractButton, - * given the gap between the button’s text and icon. - * - * @param b the button whose preferred size is determined. - * - * @param textIconGap the gap between the button’s text and - * icon. - * - * @return a <code>Dimension</code> object whose <code>width</code> - * and <code>height</code> fields indicate the preferred - * extent in pixels. - * - * @see javax.swing.SwingUtilities#layoutCompoundLabel(JComponent, - * FontMetrics, String, Icon, int, int, int, int, Rectangle, Rectangle, - * Rectangle, int) - */ - public static Dimension getPreferredButtonSize(AbstractButton b, - int textIconGap) - { - // These cached rectangles are use here and in BasicButtonUI.paint(), - // so these two methods must never be executed concurrently. Maybe - // we must use other Rectangle instances here. OTOH, Swing is - // designed to be not thread safe, and every layout and paint operation - // should be performed from the EventDispatchThread, so it _should_ be - // OK to do this optimization. - Rectangle viewRect = BasicButtonUI.viewR; - viewRect.x = 0; - viewRect.y = 0; - viewRect.width = Short.MAX_VALUE; - viewRect.height = Short.MAX_VALUE; - Rectangle iconRect = BasicButtonUI.iconR; - iconRect.x = 0; - iconRect.y = 0; - iconRect.width = 0; - iconRect.height = 0; - Rectangle textRect = BasicButtonUI.textR; - textRect.x = 0; - textRect.y = 0; - textRect.width = 0; - textRect.height = 0; - - SwingUtilities.layoutCompoundLabel( - b, // for the component orientation - b.getFontMetrics(b.getFont()), // see comment above - b.getText(), - b.getIcon(), - b.getVerticalAlignment(), - b.getHorizontalAlignment(), - b.getVerticalTextPosition(), - b.getHorizontalTextPosition(), - viewRect, iconRect, textRect, - textIconGap); - - /* +------------------------+ +------------------------+ - * | | | | - * | ICON | | CONTENTCONTENTCONTENT | - * | TEXTTEXTTEXT | --> | CONTENTCONTENTCONTENT | - * | TEXTTEXTTEXT | | CONTENTCONTENTCONTENT | - * +------------------------+ +------------------------+ - */ - - Rectangle contentRect = - SwingUtilities.computeUnion(textRect.x, textRect.y, textRect.width, - textRect.height, iconRect); - - Insets insets = b.getInsets(); - return new Dimension(insets.left + contentRect.width + insets.right, - insets.top + contentRect.height + insets.bottom); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicHTML.java b/libjava/classpath/javax/swing/plaf/basic/BasicHTML.java deleted file mode 100644 index a7ce8b1..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicHTML.java +++ /dev/null @@ -1,471 +0,0 @@ -/* BasicHTML.java -- Provides HTML support to ComponentUI implementations - Copyright (C) 2006 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.plaf.basic; - -import java.awt.Container; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.awt.Shape; -import java.io.IOException; -import java.io.StringReader; - -import javax.swing.JComponent; -import javax.swing.SwingConstants; -import javax.swing.event.DocumentEvent; -import javax.swing.text.AttributeSet; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.EditorKit; -import javax.swing.text.Element; -import javax.swing.text.Position; -import javax.swing.text.View; -import javax.swing.text.ViewFactory; -import javax.swing.text.html.HTMLDocument; -import javax.swing.text.html.HTMLEditorKit; - -/** - * Provides support for HTML rendering to {@link javax.swing.plaf.ComponentUI} - * implementations. - * - * @author Roman Kennke (kennke@aicas.com) - */ -public class BasicHTML -{ - - /** - * This class serves as the root view for HTML rendering components. - * Its purpose and implementation is similar to the BasicTextUI.RootView - * class, only that is implements some stuff differently due to the nature - * of not beeing inside a JTextComponent. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private static class HTMLRootView extends View - { - /** - * The real root view. - */ - private View view; - - /** - * The component on which to render the view. - */ - private JComponent component; - - /** - * The EditorKit. - */ - private EditorKit editorKit; - - /** - * The document to use. - */ - private Document document; - - /** - * Creates a new RootView. - */ - public HTMLRootView(JComponent c, View view, EditorKit kit, Document doc) - { - super(null); - component = c; - editorKit = kit; - document = doc; - setView(view); - setSize(view.getPreferredSpan(X_AXIS), view.getPreferredSpan(Y_AXIS)); - } - - /** - * Returns the ViewFactory for this RootView. If the current EditorKit - * provides a ViewFactory, this is used. Otherwise the TextUI itself - * is returned as a ViewFactory. - * - * @return the ViewFactory for this RootView - */ - public ViewFactory getViewFactory() - { - return editorKit.getViewFactory(); - } - - /** - * Indicates that the preferences of one of the child view has changed. - * This calls revalidate on the text component. - * - * @param v the child view which's preference has changed - * @param width <code>true</code> if the width preference has changed - * @param height <code>true</code> if the height preference has changed - */ - public void preferenceChanged(View v, boolean width, boolean height) - { - component.revalidate(); - } - - /** - * Sets the real root view. - * - * @param v the root view to set - */ - public void setView(View v) - { - if (view != null) - view.setParent(null); - - if (v != null) - v.setParent(this); - - view = v; - } - - /** - * Overridden to forward to real view. - */ - public void setSize(float w, float h) - { - view.setSize(w, h); - } - - /** - * Returns the real root view, regardless of the index. - * - * @param index not used here - * - * @return the real root view, regardless of the index. - */ - public View getView(int index) - { - return view; - } - - /** - * Returns <code>1</code> since the RootView always contains one - * child, that is the real root of the View hierarchy. - * - * @return <code>1</code> since the RootView always contains one - * child, that is the real root of the View hierarchy - */ - public int getViewCount() - { - int count = 0; - if (view != null) - count = 1; - return count; - } - - /** - * Returns the <code>Container</code> that contains this view. This - * normally will be the text component that is managed by this TextUI. - * - * @return the <code>Container</code> that contains this view - */ - public Container getContainer() - { - return component; - } - - /** - * Returns the preferred span along the specified <code>axis</code>. - * This is delegated to the real root view. - * - * @param axis the axis for which the preferred span is queried - * - * @return the preferred span along the axis - */ - public float getPreferredSpan(int axis) - { - if (view != null) - return view.getPreferredSpan(axis); - - return Integer.MAX_VALUE; - } - - /** - * Paints the view. This is delegated to the real root view. - * - * @param g the <code>Graphics</code> context to paint to - * @param s the allocation for the View - */ - public void paint(Graphics g, Shape s) - { - if (view != null) - { - Rectangle b = s.getBounds(); - view.setSize(b.width, b.height); - view.paint(g, s); - } - } - - - /** - * Maps a position in the document into the coordinate space of the View. - * The output rectangle usually reflects the font height but has a width - * of zero. - * - * This is delegated to the real root view. - * - * @param position the position of the character in the model - * @param a the area that is occupied by the view - * @param bias either {@link Position.Bias#Forward} or - * {@link Position.Bias#Backward} depending on the preferred - * direction bias. If <code>null</code> this defaults to - * <code>Position.Bias.Forward</code> - * - * @return a rectangle that gives the location of the document position - * inside the view coordinate space - * - * @throws BadLocationException if <code>pos</code> is invalid - * @throws IllegalArgumentException if b is not one of the above listed - * valid values - */ - public Shape modelToView(int position, Shape a, Position.Bias bias) - throws BadLocationException - { - return view.modelToView(position, a, bias); - } - - /** - * Maps coordinates from the <code>View</code>'s space into a position - * in the document model. - * - * @param x the x coordinate in the view space - * @param y the y coordinate in the view space - * @param a the allocation of this <code>View</code> - * @param b the bias to use - * - * @return the position in the document that corresponds to the screen - * coordinates <code>x, y</code> - */ - public int viewToModel(float x, float y, Shape a, Position.Bias[] b) - { - return view.viewToModel(x, y, a, b); - } - - /** - * Notification about text insertions. These are forwarded to the - * real root view. - * - * @param ev the DocumentEvent describing the change - * @param shape the current allocation of the view's display - * @param vf the ViewFactory to use for creating new Views - */ - public void insertUpdate(DocumentEvent ev, Shape shape, ViewFactory vf) - { - view.insertUpdate(ev, shape, vf); - } - - /** - * Notification about text removals. These are forwarded to the - * real root view. - * - * @param ev the DocumentEvent describing the change - * @param shape the current allocation of the view's display - * @param vf the ViewFactory to use for creating new Views - */ - public void removeUpdate(DocumentEvent ev, Shape shape, ViewFactory vf) - { - view.removeUpdate(ev, shape, vf); - } - - /** - * Notification about text changes. These are forwarded to the - * real root view. - * - * @param ev the DocumentEvent describing the change - * @param shape the current allocation of the view's display - * @param vf the ViewFactory to use for creating new Views - */ - public void changedUpdate(DocumentEvent ev, Shape shape, ViewFactory vf) - { - view.changedUpdate(ev, shape, vf); - } - - /** - * Returns the document position that is (visually) nearest to the given - * document position <code>pos</code> in the given direction <code>d</code>. - * - * @param pos the document position - * @param b the bias for <code>pos</code> - * @param a the allocation for the view - * @param d the direction, must be either {@link SwingConstants#NORTH}, - * {@link SwingConstants#SOUTH}, {@link SwingConstants#WEST} or - * {@link SwingConstants#EAST} - * @param biasRet an array of {@link Position.Bias} that can hold at least - * one element, which is filled with the bias of the return position - * on method exit - * - * @return the document position that is (visually) nearest to the given - * document position <code>pos</code> in the given direction - * <code>d</code> - * - * @throws BadLocationException if <code>pos</code> is not a valid offset in - * the document model - */ - public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, - int d, Position.Bias[] biasRet) - throws BadLocationException - { - return view.getNextVisualPositionFrom(pos, b, a, d, biasRet); - } - - public int getStartOffset() - { - return 0; - } - - public int getEndOffset() - { - return getDocument().getLength(); - } - - public Document getDocument() - { - return document; - } - - /** - * Overridden to return null, as a RootView has no attributes on its own. - */ - public AttributeSet getAttributes() - { - return null; - } - - /** - * Overridden to provide an element for the view. - */ - public Element getElement() - { - return view.getElement(); - } - } - - /** - * The key that is used to store a HTML view in a JComponent's client - * properties. - */ - public static final String propertyKey = "html"; - - /** - * The key that is used to store the document base in a JComponent's client - * properties. The document base is used to resolve relative references - * in HTML. - */ - public static final String documentBaseKey = "html.base"; - - /** - * Creates a new instance of BasicHTML. This should not be necessary since - * all methods in this class are static. - */ - public BasicHTML() - { - // Nothing to do here. - } - - /** - * Creates a {@link View} instance that can be used by the component - * <code>c</code> to render the HTML string <code>html</code>. - * - * @param c the component that needs to render the HTML string - * @param html the HTML string to be rendered - * - * @return a view that can render the HTML string - */ - public static View createHTMLView(JComponent c, String html) - { - // TODO: This might be wrong. Lets see if it turns out good when - // the javax.swing.text.html package is in a good shape. - HTMLDocument doc = new HTMLDocument(); - HTMLEditorKit kit = new HTMLEditorKit(); - StringReader reader = new StringReader(html); - try - { - kit.read(reader, doc, 0); - } - catch (IOException ex) - { - AssertionError err = new AssertionError("unexpected IOException"); - err.initCause(ex); - throw err; - } - catch (BadLocationException ex) - { - AssertionError err = - new AssertionError("unexpected BadLocationException"); - err.initCause(ex); - throw err; - } - ViewFactory vf = kit.getViewFactory(); - Element root = doc.getDefaultRootElement(); - View view = vf.create(root); - HTMLRootView rootView = new HTMLRootView(c, view, kit, doc); - return rootView; - } - - /** - * Returns <code>true</code> if <code>s</code> is HTML, <code>false</code> - * otherwise. - * - * @param s the string to test - * - * @return <code>true</code> if <code>s</code> is HTML, <code>false</code> - * otherwise - */ - public static boolean isHTMLString(String s) - { - // We consider a string to be HTML if it contains both the '<' and '>' - // character at least once. - return (s != null) && s.contains("<") && s.contains(">"); - } - - /** - * Stores a HTML renderer in <code>c</code>'s client property if - * <code>text</code> is HTML, otherwise it clears the corresponding client - * property. This is useful for {@link javax.swing.plaf.ComponentUI} - * implementations that are shared between it's components. - * - * @param c the component to update the renderer for - * @param text the string to be rendered - */ - public static void updateRenderer(JComponent c, String text) - { - if (isHTMLString(text)) - c.putClientProperty(propertyKey, createHTMLView(c, text)); - else - c.putClientProperty(propertyKey, null); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicIconFactory.java b/libjava/classpath/javax/swing/plaf/basic/BasicIconFactory.java deleted file mode 100644 index 1b5afa7..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicIconFactory.java +++ /dev/null @@ -1,328 +0,0 @@ -/* BasicIconFactory.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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.io.Serializable; - -import javax.swing.Icon; -import javax.swing.JCheckBoxMenuItem; - -/** - * Creates icons for the {@link BasicLookAndFeel}. - */ -public class BasicIconFactory implements Serializable -{ - static final long serialVersionUID = 5605588811185324383L; - - private static class DummyIcon - implements Icon - { - public int getIconHeight() - { - return 10; - } - public int getIconWidth() - { - return 10; - } - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color save = g.getColor(); - g.setColor(c.getForeground()); - g.drawRect(x, y, 10, 10); - g.setColor(save); - } - } - - /** - * The icon used for CheckBoxes in the BasicLookAndFeel. This is an empty - * icon with a size of 13x13 pixels. - */ - static class CheckBoxIcon - implements Icon - { - /** - * Returns the height of the icon. The BasicLookAndFeel CheckBox icon - * has a height of 13 pixels. - * - * @return the height of the icon - */ - public int getIconHeight() - { - return 13; - } - - /** - * Returns the width of the icon. The BasicLookAndFeel CheckBox icon - * has a width of 13 pixels. - * - * @return the height of the icon - */ - public int getIconWidth() - { - return 13; - } - - /** - * Paints the icon. The BasicLookAndFeel CheckBox icon is empty and does - * not need to be painted. - * - * @param c the component to be painted - * @param g the Graphics context to be painted with - * @param x the x position of the icon - * @param y the y position of the icon - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - // The icon is empty and needs no painting. - } - } - - /** - * The icon used for {@link JCheckBoxMenuItem}s in the - * {@link BasicLookAndFeel}. This icon has a size of 9x9 pixels. - */ - static class CheckBoxMenuItemIcon - implements Icon - { - /** - * Returns the height of the icon in pixels. - * - * @return the height of the icon - */ - public int getIconHeight() - { - return 9; - } - - /** - * Returns the width of the icon in pixels. - * - * @return the height of the icon - */ - public int getIconWidth() - { - return 9; - } - - /** - * Paints the icon. - * - * @param c the component to be painted - * @param g the Graphics context to be painted with - * @param x the x position of the icon - * @param y the y position of the icon - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - JCheckBoxMenuItem item = (JCheckBoxMenuItem) c; - if (item.isSelected()) - { - // paint the check... - g.setColor(Color.black); - g.drawLine(x + 1, y + 3, x + 1, y + 4); - g.drawLine(x + 2, y + 4, x + 2, y + 5); - for (int i = 0; i < 5; i++) - g.drawLine(x + 3 + i, y + 5 - i, x + 3 + i, y + 6 - i); - } - } - } - - /** - * The icon used for RadioButtons in the BasicLookAndFeel. This is an empty - * icon with a size of 13x13 pixels. - */ - static class RadioButtonIcon - implements Icon - { - /** - * Returns the height of the icon. The BasicLookAndFeel RadioButton icon - * has a height of 13 pixels. - * - * @return the height of the icon - */ - public int getIconHeight() - { - return 13; - } - - /** - * Returns the width of the icon. The BasicLookAndFeel RadioButton icon - * has a width of 13 pixels. - * - * @return the height of the icon - */ - public int getIconWidth() - { - return 13; - } - - /** - * Paints the icon. The BasicLookAndFeel RadioButton icon is empty and does - * not need to be painted. - * - * @param c the component to be painted - * @param g the Graphics context to be painted with - * @param x the x position of the icon - * @param y the y position of the icon - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - // The icon is empty and needs no painting. - } - } - /** The cached CheckBoxIcon instance. */ - private static CheckBoxIcon checkBoxIcon; - - /** The cached RadioButtonIcon instance. */ - private static RadioButtonIcon radioButtonIcon; - - public static Icon getMenuItemCheckIcon() - { - return new Icon() - { - public int getIconHeight() - { - return 13; - } - - public int getIconWidth() - { - return 13; - } - - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - g.setColor(Color.BLACK); - g.drawLine(3 + x, 5 + y, 3 + x, 9 + y); - g.drawLine(4 + x, 5 + y, 4 + x, 9 + y); - g.drawLine(5 + x, 7 + y, 9 + x, 3 + y); - g.drawLine(5 + x, 8 + y, 9 + x, 4 + y); - g.setColor(saved); - } - }; - } - public static Icon getMenuItemArrowIcon() - { - return new DummyIcon(); - } - - /** - * Returns a new instance of a 4 x 8 icon showing a small black triangle that - * points to the right. This is displayed in menu items that have a - * sub menu. - * - * @return The icon. - */ - public static Icon getMenuArrowIcon() - { - return new Icon() - { - public int getIconHeight() - { - return 8; - } - public int getIconWidth() - { - return 4; - } - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - g.setColor(Color.BLACK); - for (int i = 0; i < 4; i++) - g.drawLine(x + i, y + i, x + i, y + 7 - i); - g.setColor(saved); - } - }; - } - - /** - * Returns an icon for CheckBoxes in the BasicLookAndFeel. CheckBox icons - * in the Basic L&F are empty and have a size of 13x13 pixels. - * This method returns a shared single instance of this icon. - * - * @return an icon for CheckBoxes in the BasicLookAndFeel - */ - public static Icon getCheckBoxIcon() - { - if (checkBoxIcon == null) - checkBoxIcon = new CheckBoxIcon(); - return checkBoxIcon; - } - - /** - * Returns an icon for RadioButtons in the BasicLookAndFeel. RadioButton - * icons in the Basic L&F are empty and have a size of 13x13 pixels. - * This method returns a shared single instance of this icon. - * - * @return an icon for RadioButtons in the BasicLookAndFeel - */ - public static Icon getRadioButtonIcon() - { - if (radioButtonIcon == null) - radioButtonIcon = new RadioButtonIcon(); - return radioButtonIcon; - } - - /** - * Creates and returns an icon used when rendering {@link JCheckBoxMenuItem} - * components. - * - * @return An icon. - */ - public static Icon getCheckBoxMenuItemIcon() - { - return new CheckBoxMenuItemIcon(); - } - - public static Icon getRadioButtonMenuItemIcon() - { - return getRadioButtonIcon(); - } - - public static Icon createEmptyFrameIcon() - { - return new DummyIcon(); - } -} // class BasicIconFactory diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java b/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java deleted file mode 100644 index 4846605..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameTitlePane.java +++ /dev/null @@ -1,1015 +0,0 @@ -/* BasicInternalFrameTitlePane.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyVetoException; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JInternalFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; - -/** - * This class acts as a titlebar for JInternalFrames. - */ -public class BasicInternalFrameTitlePane extends JComponent -{ - /** - * The Action responsible for closing the JInternalFrame. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class CloseAction extends AbstractAction - { - /** - * Creates a new action. - */ - public CloseAction() - { - super("Close"); - } - - /** - * This method is called when something closes the JInternalFrame. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - if (frame.isClosable()) - { - try - { - frame.setClosed(true); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } - } - } - - /** - * This Action is responsible for iconifying the JInternalFrame. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class IconifyAction extends AbstractAction - { - /** - * Creates a new action. - */ - public IconifyAction() - { - super("Minimize"); - } - - /** - * This method is called when the user wants to iconify the - * JInternalFrame. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - if (frame.isIconifiable() && ! frame.isIcon()) - { - try - { - frame.setIcon(true); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } - } - } - - /** - * This Action is responsible for maximizing the JInternalFrame. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class MaximizeAction extends AbstractAction - { - /** - * Creates a new action. - */ - public MaximizeAction() - { - super("Maximize"); - } - /** - * This method is called when the user wants to maximize the - * JInternalFrame. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - try - { - if (frame.isMaximizable() && ! frame.isMaximum()) - { - frame.setMaximum(true); - maxButton.setIcon(minIcon); - } - else if (frame.isMaximum()) - { - frame.setMaximum(false); - maxButton.setIcon(maxIcon); - } - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } - } - - /** - * This Action is responsible for dragging the JInternalFrame. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class MoveAction extends AbstractAction - { - /** - * Creates a new action. - */ - public MoveAction() - { - super("Move"); - } - /** - * This method is called when the user wants to drag the JInternalFrame. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - // FIXME: Implement keyboard driven? move actions. - } - } - - /** - * This Action is responsible for restoring the JInternalFrame. Restoring - * the JInternalFrame is the same as setting the maximum property to false. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class RestoreAction extends AbstractAction - { - /** - * Creates a new action. - */ - public RestoreAction() - { - super("Restore"); - } - /** - * This method is called when the user wants to restore the - * JInternalFrame. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - if (frame.isMaximum()) - { - try - { - frame.setMaximum(false); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - } - } - } - - /** - * This action is responsible for sizing the JInternalFrame. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class SizeAction extends AbstractAction - { - /** - * Creates a new action. - */ - public SizeAction() - { - super("Size"); - } - /** - * This method is called when the user wants to resize the JInternalFrame. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - // FIXME: Not sure how size actions should be handled. - } - } - - /** - * This class is responsible for handling property change events from the - * JInternalFrame and adjusting the Title Pane as necessary. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - /** - * This method is called when a PropertyChangeEvent is received by the - * Title Pane. - * - * @param evt The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent evt) - { - String propName = evt.getPropertyName(); - if (propName.equals("closable")) - { - if (evt.getNewValue().equals(Boolean.TRUE)) - closeButton.setVisible(true); - else - closeButton.setVisible(false); - } - else if (propName.equals("iconable")) - { - if (evt.getNewValue().equals(Boolean.TRUE)) - iconButton.setVisible(true); - else - iconButton.setVisible(false); - } - else if (propName.equals("maximizable")) - { - if (evt.getNewValue().equals(Boolean.TRUE)) - maxButton.setVisible(true); - else - maxButton.setVisible(false); - } - enableActions(); - } - } - - /** - * This class acts as the MenuBar for the TitlePane. Clicking on the Frame - * Icon in the top left corner will activate it. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class SystemMenuBar extends JMenuBar - { - /** - * This method returns true if it can receive focus. - * - * @return True if this Component can receive focus. - */ - public boolean isFocusTraversable() - { - return true; - } - - /** - * This method returns true if this Component is expected to paint all of - * itself. - * - * @return True if this Component is expect to paint all of itself. - */ - public boolean isOpaque() - { - return true; - } - - /** - * This method paints this Component. - * - * @param g The Graphics object to paint with. - */ - public void paint(Graphics g) - { - Icon frameIcon = frame.getFrameIcon(); - if (frameIcon == null) - frameIcon = BasicDesktopIconUI.defaultIcon; - frameIcon.paintIcon(this, g, 0, 0); - } - - /** - * This method requests that focus be given to this Component. - */ - public void requestFocus() - { - super.requestFocus(); - } - } - - /** - * This class acts as the Layout Manager for the TitlePane. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class TitlePaneLayout implements LayoutManager - { - /** - * Creates a new <code>TitlePaneLayout</code> object. - */ - public TitlePaneLayout() - { - // Do nothing. - } - - /** - * This method is called when adding a Component to the Container. - * - * @param name The name to reference the added Component by. - * @param c The Component to add. - */ - public void addLayoutComponent(String name, Component c) - { - // Do nothing. - } - - /** - * This method is called to lay out the children of the Title Pane. - * - * @param c The Container to lay out. - */ - public void layoutContainer(Container c) - { - Dimension size = c.getSize(); - Insets insets = c.getInsets(); - int width = size.width - insets.left - insets.right; - int height = size.height - insets.top - insets.bottom; - - // MenuBar is always present and located at the top left corner. - Dimension menupref = menuBar.getPreferredSize(); - menuBar.setBounds(insets.left, insets.top, menupref.width, height); - - int loc = width + insets.left - 1; - int top = insets.top + 1; - int buttonHeight = height - 4; - if (closeButton.isVisible()) - { - int buttonWidth = closeIcon.getIconWidth(); - loc -= buttonWidth + 2; - closeButton.setBounds(loc, top, buttonWidth, buttonHeight); - } - - if (maxButton.isVisible()) - { - int buttonWidth = maxIcon.getIconWidth(); - loc -= buttonWidth + 2; - maxButton.setBounds(loc, top, buttonWidth, buttonHeight); - } - - if (iconButton.isVisible()) - { - int buttonWidth = iconIcon.getIconWidth(); - loc -= buttonWidth + 2; - iconButton.setBounds(loc, top, buttonWidth, buttonHeight); - } - - if (title != null) - title.setBounds(insets.left + menupref.width, insets.top, - loc - menupref.width - insets.left, height); - } - - /** - * This method returns the minimum size of the given Container given the - * children that it has. - * - * @param c The Container to get a minimum size for. - * - * @return The minimum size of the Container. - */ - public Dimension minimumLayoutSize(Container c) - { - return preferredLayoutSize(c); - } - - /** - * This method returns the preferred size of the given Container taking - * into account the children that it has. - * - * @param c The Container to lay out. - * - * @return The preferred size of the Container. - */ - public Dimension preferredLayoutSize(Container c) - { - return new Dimension(22, 18); - } - - /** - * This method is called when removing a Component from the Container. - * - * @param c The Component to remove. - */ - public void removeLayoutComponent(Component c) - { - // Nothing to do here. - } - } - - /** - * This helper class is used to create the minimize, maximize and close - * buttons in the top right corner of the Title Pane. These buttons are - * special since they cannot be given focus and have no border. - */ - private class PaneButton extends JButton - { - /** - * Creates a new PaneButton object with the given Action. - * - * @param a The Action that the button uses. - */ - public PaneButton(Action a) - { - super(a); - setMargin(new Insets(0, 0, 0, 0)); - } - - /** - * This method returns true if the Component can be focused. - * - * @return false. - */ - public boolean isFocusable() - { - // These buttons cannot be given focus. - return false; - } - - } - - /** The action command for the Close action. */ - protected static final String CLOSE_CMD; - - /** The action command for the Minimize action. */ - protected static final String ICONIFY_CMD; - - /** The action command for the Maximize action. */ - protected static final String MAXIMIZE_CMD; - - /** The action command for the Move action. */ - protected static final String MOVE_CMD; - - /** The action command for the Restore action. */ - protected static final String RESTORE_CMD; - - /** The action command for the Size action. */ - protected static final String SIZE_CMD; - - /** The action associated with closing the JInternalFrame. */ - protected Action closeAction; - - /** The action associated with iconifying the JInternalFrame. */ - protected Action iconifyAction; - - /** The action associated with maximizing the JInternalFrame. */ - protected Action maximizeAction; - - /** The action associated with moving the JInternalFrame. */ - protected Action moveAction; - - /** The action associated with restoring the JInternalFrame. */ - protected Action restoreAction; - - /** The action associated with resizing the JInternalFrame. */ - protected Action sizeAction; - - /** The button that closes the JInternalFrame. */ - protected JButton closeButton; - - /** The button that iconifies the JInternalFrame. */ - protected JButton iconButton; - - /** The button that maximizes the JInternalFrame. */ - protected JButton maxButton; - - /** The icon displayed in the restore button. */ - protected Icon minIcon = BasicIconFactory.createEmptyFrameIcon(); - - /** The icon displayed in the maximize button. */ - protected Icon maxIcon = BasicIconFactory.createEmptyFrameIcon(); - - /** The icon displayed in the iconify button. */ - protected Icon iconIcon = BasicIconFactory.createEmptyFrameIcon(); - - /** The icon displayed in the close button. */ - protected Icon closeIcon; - - /** The JInternalFrame that this TitlePane is used in. */ - protected JInternalFrame frame; - - /** The JMenuBar that is located at the top left of the Title Pane. */ - protected JMenuBar menuBar; - - /** The JMenu inside the menuBar. */ - protected JMenu windowMenu; - - /** - * The text color of the TitlePane when the JInternalFrame is not selected. - */ - protected Color notSelectedTextColor; - - /** - * The background color of the TitlePane when the JInternalFrame is not - * selected. - */ - protected Color notSelectedTitleColor; - - /** The text color of the titlePane when the JInternalFrame is selected. */ - protected Color selectedTextColor; - - /** - * The background color of the TitlePane when the JInternalFrame is - * selected. - */ - protected Color selectedTitleColor; - - /** The Property Change listener that listens to the JInternalFrame. */ - protected PropertyChangeListener propertyChangeListener; - - /** - * The label used to display the title. This label is not added to the - * TitlePane. - * This is package-private to avoid an accessor method. - */ - transient JLabel title; - - static - { - // not constants in JDK - CLOSE_CMD = "Close"; - ICONIFY_CMD = "Minimize"; - MAXIMIZE_CMD = "Maximize"; - MOVE_CMD = "Move"; - RESTORE_CMD = "Restore"; - SIZE_CMD = "Size"; - } - - /** - * Creates a new BasicInternalFrameTitlePane object that is used in the - * given JInternalFrame. - * - * @param f The JInternalFrame this BasicInternalFrameTitlePane will be used - * in. - */ - public BasicInternalFrameTitlePane(JInternalFrame f) - { - frame = f; - setLayout(createLayout()); - title = new JLabel(); - title.setHorizontalAlignment(SwingConstants.LEFT); - title.setHorizontalTextPosition(SwingConstants.LEFT); - title.setOpaque(false); - setOpaque(true); - - setBackground(Color.LIGHT_GRAY); - setOpaque(true); - - installTitlePane(); - } - - /** - * This method installs the TitlePane onto the JInternalFrameTitlePane. It - * also creates any children components that need to be created and adds - * listeners to the appropriate components. - */ - protected void installTitlePane() - { - installDefaults(); - installListeners(); - createActions(); - - assembleSystemMenu(); - - createButtons(); - setButtonIcons(); - addSubComponents(); - enableActions(); - } - - /** - * This method adds the sub components to the TitlePane. - */ - protected void addSubComponents() - { - add(menuBar); - - add(closeButton); - add(iconButton); - add(maxButton); - } - - /** - * This method creates the actions that are used to manipulate the - * JInternalFrame. - */ - protected void createActions() - { - closeAction = new CloseAction(); - closeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, CLOSE_CMD); - - iconifyAction = new IconifyAction(); - iconifyAction.putValue(AbstractAction.ACTION_COMMAND_KEY, ICONIFY_CMD); - - maximizeAction = new MaximizeAction(); - maximizeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, MAXIMIZE_CMD); - - sizeAction = new SizeAction(); - sizeAction.putValue(AbstractAction.ACTION_COMMAND_KEY, SIZE_CMD); - - restoreAction = new RestoreAction(); - restoreAction.putValue(AbstractAction.ACTION_COMMAND_KEY, RESTORE_CMD); - - moveAction = new MoveAction(); - moveAction.putValue(AbstractAction.ACTION_COMMAND_KEY, MOVE_CMD); - } - - /** - * This method is used to install the listeners. - */ - protected void installListeners() - { - propertyChangeListener = createPropertyChangeListener(); - frame.addPropertyChangeListener(propertyChangeListener); - } - - /** - * This method is used to uninstall the listeners. - */ - protected void uninstallListeners() - { - frame.removePropertyChangeListener(propertyChangeListener); - propertyChangeListener = null; - } - - /** - * This method installs the defaults determined by the look and feel. - */ - protected void installDefaults() - { - title.setFont(UIManager.getFont("InternalFrame.titleFont")); - selectedTextColor = UIManager.getColor("InternalFrame.activeTitleForeground"); - selectedTitleColor = UIManager.getColor("InternalFrame.activeTitleBackground"); - notSelectedTextColor = UIManager.getColor("InternalFrame.inactiveTitleForeground"); - notSelectedTitleColor = UIManager.getColor("InternalFrame.inactiveTitleBackground"); - - closeIcon = UIManager.getIcon("InternalFrame.closeIcon"); - iconIcon = UIManager.getIcon("InternalFrame.iconifyIcon"); - maxIcon = UIManager.getIcon("InternalFrame.maximizeIcon"); - } - - /** - * This method uninstalls the defaults. - */ - protected void uninstallDefaults() - { - setFont(null); - selectedTextColor = null; - selectedTitleColor = null; - notSelectedTextColor = null; - notSelectedTitleColor = null; - - closeIcon = null; - iconIcon = null; - maxIcon = null; - } - - /** - * This method creates the buttons used in the TitlePane. - */ - protected void createButtons() - { - closeButton = new PaneButton(closeAction); - closeButton.setText(null); - if (!frame.isClosable()) - closeButton.setVisible(false); - iconButton = new PaneButton(iconifyAction); - iconButton.setText(null); - if (!frame.isIconifiable()) - iconButton.setVisible(false); - maxButton = new PaneButton(maximizeAction); - maxButton.setText(null); - if (!frame.isMaximizable()) - maxButton.setVisible(false); - } - - /** - * Set icons for the minimize-, maximize- and close-buttons. - */ - protected void setButtonIcons() - { - if (closeIcon != null && closeButton != null) - closeButton.setIcon(closeIcon); - if (iconIcon != null && iconButton != null) - iconButton.setIcon(iconIcon); - if (maxIcon != null && maxButton != null) - maxButton.setIcon(maxIcon); - } - - /** - * This method creates the MenuBar used in the TitlePane. - */ - protected void assembleSystemMenu() - { - menuBar = createSystemMenuBar(); - windowMenu = createSystemMenu(); - - menuBar.add(windowMenu); - - addSystemMenuItems(windowMenu); - enableActions(); - } - - /** - * This method adds the MenuItems to the given JMenu. - * - * @param systemMenu The JMenu to add MenuItems to. - */ - protected void addSystemMenuItems(JMenu systemMenu) - { - JMenuItem tmp; - - tmp = new JMenuItem(RESTORE_CMD); - tmp.addActionListener(restoreAction); - tmp.setMnemonic(KeyEvent.VK_R); - systemMenu.add(tmp); - - tmp = new JMenuItem(MOVE_CMD); - tmp.addActionListener(moveAction); - tmp.setMnemonic(KeyEvent.VK_M); - systemMenu.add(tmp); - - tmp = new JMenuItem(SIZE_CMD); - tmp.addActionListener(sizeAction); - tmp.setMnemonic(KeyEvent.VK_S); - systemMenu.add(tmp); - - tmp = new JMenuItem(ICONIFY_CMD); - tmp.addActionListener(iconifyAction); - tmp.setMnemonic(KeyEvent.VK_N); - systemMenu.add(tmp); - - tmp = new JMenuItem(MAXIMIZE_CMD); - tmp.addActionListener(maximizeAction); - tmp.setMnemonic(KeyEvent.VK_X); - systemMenu.add(tmp); - - systemMenu.addSeparator(); - - tmp = new JMenuItem(CLOSE_CMD); - tmp.addActionListener(closeAction); - tmp.setMnemonic(KeyEvent.VK_C); - systemMenu.add(tmp); - } - - /** - * This method creates a new JMenubar. - * - * @return A new JMenuBar. - */ - protected JMenuBar createSystemMenuBar() - { - if (menuBar == null) - menuBar = new SystemMenuBar(); - menuBar.removeAll(); - return menuBar; - } - - /** - * This method creates a new JMenu. - * - * @return A new JMenu. - */ - protected JMenu createSystemMenu() - { - if (windowMenu == null) - windowMenu = new JMenu(); - windowMenu.removeAll(); - return windowMenu; - } - - /** - * This method programmatically shows the JMenu. - */ - protected void showSystemMenu() - { - // FIXME: Untested as KeyEvents are not hooked up. - menuBar.getMenu(1).getPopupMenu().show(); - } - - /** - * This method paints the TitlePane. - * - * @param g The Graphics object to paint with. - */ - public void paintComponent(Graphics g) - { - paintTitleBackground(g); - if (frame.getTitle() != null && title != null) - { - Color saved = g.getColor(); - Font f = title.getFont(); - g.setFont(f); - FontMetrics fm = g.getFontMetrics(f); - if (frame.isSelected()) - g.setColor(selectedTextColor); - else - g.setColor(notSelectedTextColor); - title.setText(getTitle(frame.getTitle(), fm, title.getBounds().width)); - SwingUtilities.paintComponent(g, title, null, title.getBounds()); - g.setColor(saved); - } - } - - /** - * This method paints the TitlePane's background. - * - * @param g The Graphics object to paint with. - */ - protected void paintTitleBackground(Graphics g) - { - if (!isOpaque()) - return; - - Color saved = g.getColor(); - Dimension dims = getSize(); - - Color bg = getBackground(); - if (frame.isSelected()) - bg = selectedTitleColor; - else - bg = notSelectedTitleColor; - g.setColor(bg); - g.fillRect(0, 0, dims.width, dims.height); - g.setColor(saved); - } - - /** - * This method returns the title string based on the available width and the - * font metrics. - * - * @param text The desired title. - * @param fm The FontMetrics of the font used. - * @param availableWidth The available width. - * - * @return The allowable string. - */ - protected String getTitle(String text, FontMetrics fm, int availableWidth) - { - Rectangle vr = new Rectangle(0, 0, availableWidth, fm.getHeight()); - Rectangle ir = new Rectangle(); - Rectangle tr = new Rectangle(); - String value = SwingUtilities.layoutCompoundLabel(this, fm, text, null, - SwingConstants.CENTER, - SwingConstants.LEFT, - SwingConstants.CENTER, - SwingConstants.LEFT, vr, - ir, tr, 0); - return value; - } - - /** - * This method fires something similar to a WINDOW_CLOSING event. - * - * @param frame The JInternalFrame that is being closed. - */ - protected void postClosingEvent(JInternalFrame frame) - { - // FIXME: Implement postClosingEvent when I figure out what - // it's supposed to do. - // It says that this fires an WINDOW_CLOSING like event. - // So the closest thing is some kind of InternalFrameEvent. - // But none is fired. - // Can't see it called or anything. - } - - /** - * This method enables the actions for the TitlePane given the frame's - * properties. - */ - protected void enableActions() - { - closeAction.setEnabled(frame.isClosable()); - - iconifyAction.setEnabled(frame.isIconifiable()); - // The maximize action is responsible for restoring it - // as well, if clicked from the button - maximizeAction.setEnabled(frame.isMaximizable()); - - // The restoring action is only active when selected - // from the menu. - restoreAction.setEnabled(frame.isMaximum()); - - sizeAction.setEnabled(frame.isResizable()); - - // FIXME: Tie MoveAction enabled status to a variable. - moveAction.setEnabled(false); - } - - /** - * This method creates a new PropertyChangeListener. - * - * @return A new PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * This method creates a new LayoutManager for the TitlePane. - * - * @return A new LayoutManager. - */ - protected LayoutManager createLayout() - { - return new TitlePaneLayout(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java deleted file mode 100644 index da37e2b..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicInternalFrameUI.java +++ /dev/null @@ -1,1786 +0,0 @@ -/* BasicInternalFrameUI.java -- - Copyright (C) 2004, 2005, 2006 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.LayoutManager2; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyVetoException; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.DefaultDesktopManager; -import javax.swing.DesktopManager; -import javax.swing.JComponent; -import javax.swing.JDesktopPane; -import javax.swing.JInternalFrame; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.AbstractBorder; -import javax.swing.event.InternalFrameEvent; -import javax.swing.event.InternalFrameListener; -import javax.swing.event.MouseInputAdapter; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.InternalFrameUI; -import javax.swing.plaf.UIResource; - -/** - * This is the UI delegate for the Basic look and feel for JInternalFrames. - */ -public class BasicInternalFrameUI extends InternalFrameUI -{ - /** - * This is a helper class that listens to the JInternalFrame for - * InternalFrameEvents. - */ - protected class BasicInternalFrameListener implements InternalFrameListener - { - /** - * This method is called when the JInternalFrame is activated. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameActivated(InternalFrameEvent e) - { - frame.getGlassPane().setVisible(false); - } - - /** - * This method is called when the JInternalFrame is closed. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameClosed(InternalFrameEvent e) - { - // FIXME: Implement. - } - - /** - * This method is called when the JInternalFrame is closing. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameClosing(InternalFrameEvent e) - { - // FIXME: Implement. - } - - /** - * This method is called when the JInternalFrame is deactivated. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameDeactivated(InternalFrameEvent e) - { - frame.getGlassPane().setVisible(true); - } - - /** - * This method is called when the JInternalFrame is deiconified. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameDeiconified(InternalFrameEvent e) - { - // FIXME: Implement. - } - - /** - * This method is called when the JInternalFrame is iconified. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameIconified(InternalFrameEvent e) - { - // FIXME: Implement. - } - - /** - * This method is called when the JInternalFrame is opened. - * - * @param e The InternalFrameEvent. - */ - public void internalFrameOpened(InternalFrameEvent e) - { - // FIXME: Implement. - } - } - - /** - * This helper class listens to the edges of the JInternalFrame and the - * TitlePane for mouse events. It is responsible for dragging and resizing - * the JInternalFrame in response to the MouseEvents. - */ - protected class BorderListener extends MouseInputAdapter - implements SwingConstants - { - /** - * The current shape of the cursor. - */ - transient int showingCursor; - - /** FIXME: Use for something. */ - protected final int RESIZE_NONE = 0; - - /** The x offset from the top left corner of the JInternalFrame. */ - private transient int xOffset; - - /** The y offset from the top left corner of the JInternalFrame. */ - private transient int yOffset; - - /** The direction that the resize is occuring in. */ - private transient int direction = -1; - - /** Cache rectangle that can be reused. */ - private transient Rectangle cacheRect = new Rectangle(); - - /** - * This method is called when the mouse is clicked. - * - * @param e The MouseEvent. - */ - public void mouseClicked(MouseEvent e) - { - // Do minimization/maximization when double-clicking in the title pane. - if (e.getSource() == titlePane && e.getClickCount() == 2) - try - { - if (frame.isMaximizable() && ! frame.isMaximum()) - frame.setMaximum(true); - else if (frame.isMaximum()) - frame.setMaximum(false); - } - catch (PropertyVetoException pve) - { - // We do nothing if the attempt has been vetoed. - } - - // There is nothing to do when the mouse is clicked - // on the border. - } - - /** - * This method is called when the mouse is dragged. This method is - * responsible for resizing or dragging the JInternalFrame. - * - * @param e The MouseEvent. - */ - public void mouseDragged(MouseEvent e) - { - // If the frame is maximized, there is nothing that - // can be dragged around. - if (frame.isMaximum()) - return; - DesktopManager dm = getDesktopManager(); - Rectangle b = frame.getBounds(); - Dimension min = frame.getMinimumSize(); - if (min == null) - min = new Dimension(0, 0); - Insets insets = frame.getInsets(); - int x = e.getX(); - int y = e.getY(); - if (e.getSource() == frame && frame.isResizable()) - { - switch (direction) - { - case Cursor.N_RESIZE_CURSOR: - cacheRect.setBounds(b.x, Math.min(b.y + y, b.y + b.height - - min.height), - b.width, b.height - y); - break; - case Cursor.NE_RESIZE_CURSOR: - cacheRect.setBounds(b.x, Math.min(b.y + y, b.y + b.height - - min.height), x + 1, - b.height - y); - break; - case Cursor.E_RESIZE_CURSOR: - cacheRect.setBounds(b.x, b.y, x + 1, b.height); - break; - case Cursor.SE_RESIZE_CURSOR: - cacheRect.setBounds(b.x, b.y, x + 1, y + 1); - break; - case Cursor.S_RESIZE_CURSOR: - cacheRect.setBounds(b.x, b.y, b.width, y + 1); - break; - case Cursor.SW_RESIZE_CURSOR: - cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width), - b.y, b.width - x, y + 1); - break; - case Cursor.W_RESIZE_CURSOR: - cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width), - b.y, b.width - x, b.height); - break; - case Cursor.NW_RESIZE_CURSOR: - cacheRect.setBounds( - Math.min(b.x + x, b.x + b.width - min.width), - Math.min(b.y + y, b.y + b.height - min.height), - b.width - x, b.height - y); - break; - } - dm.resizeFrame(frame, cacheRect.x, cacheRect.y, - Math.max(min.width, cacheRect.width), - Math.max(min.height, cacheRect.height)); - setCursor(e); - } - else if (e.getSource() == titlePane) - { - Rectangle fBounds = frame.getBounds(); - frame.putClientProperty("bufferedDragging", Boolean.TRUE); - dm.dragFrame(frame, e.getX() - xOffset + b.x, e.getY() - yOffset - + b.y); - } - } - - /** - * This method is called when the mouse exits the JInternalFrame. - * - * @param e The MouseEvent. - */ - public void mouseExited(MouseEvent e) - { - if (showingCursor != Cursor.DEFAULT_CURSOR) - { - frame.setCursor(Cursor.getDefaultCursor()); - showingCursor = Cursor.DEFAULT_CURSOR; - } - } - - /** - * This method is called when the mouse is moved inside the JInternalFrame. - * - * @param e The MouseEvent. - */ - public void mouseMoved(MouseEvent e) - { - // Turn off the resize cursor if we are in the frame header. - if (showingCursor != Cursor.DEFAULT_CURSOR && e.getSource() != frame) - { - frame.setCursor(Cursor.getDefaultCursor()); - showingCursor = Cursor.DEFAULT_CURSOR; - } - else if (e.getSource() == frame && frame.isResizable()) - { - setCursor(e); - } - } - - /** - * Set the mouse cursor, how applicable. - * - * @param e the current mouse event. - */ - void setCursor(MouseEvent e) - { - int cursor = sectionOfClick(e.getX(), e.getY()); - if (cursor != showingCursor) - { - Cursor resize = Cursor.getPredefinedCursor(cursor); - frame.setCursor(resize); - showingCursor = cursor; - } - } - - /** - * This method is called when the mouse is pressed. - * - * @param e The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - activateFrame(frame); - DesktopManager dm = getDesktopManager(); - int x = e.getX(); - int y = e.getY(); - Insets insets = frame.getInsets(); - - if (e.getSource() == frame && frame.isResizable()) - { - direction = sectionOfClick(x, y); - dm.beginResizingFrame(frame, direction); - } - else if (e.getSource() == titlePane) - { - Rectangle tBounds = titlePane.getBounds(); - - xOffset = e.getX() - tBounds.x + insets.left; - yOffset = e.getY() - tBounds.y + insets.top; - - dm.beginDraggingFrame(frame); - } - } - - /** - * This method is called when the mouse is released. - * - * @param e The MouseEvent. - */ - public void mouseReleased(MouseEvent e) - { - DesktopManager dm = getDesktopManager(); - xOffset = 0; - yOffset = 0; - if (e.getSource() == frame && frame.isResizable()) - dm.endResizingFrame(frame); - else if (e.getSource() == titlePane) - { - dm.endDraggingFrame(frame); - frame.putClientProperty("bufferedDragging", null); - } - - setCursor(e); - } - - /** - * This method determines the direction of the resize based on the - * coordinates and the size of the JInternalFrame. - * - * @param x The x coordinate of the MouseEvent. - * @param y The y coordinate of the MouseEvent. - * - * @return The cursor constant, determining the resizing direction. - */ - private int sectionOfClick(int x, int y) - { - Rectangle b = frame.getBounds(); - int corner = InternalFrameBorder.cornerSize; - - if (x < corner && y < corner) - return Cursor.NW_RESIZE_CURSOR; - else if (x > b.width - corner && y < corner) - return Cursor.NE_RESIZE_CURSOR; - else if (x > b.width - corner && y > b.height - corner) - return Cursor.SE_RESIZE_CURSOR; - else if (x < corner && y > b.height - corner) - return Cursor.SW_RESIZE_CURSOR; - else if (y < corner) - return Cursor.N_RESIZE_CURSOR; - else if (x < corner) - return Cursor.W_RESIZE_CURSOR; - else if (y > b.height - corner) - return Cursor.S_RESIZE_CURSOR; - else if (x > b.width - corner) - return Cursor.E_RESIZE_CURSOR; - - return Cursor.DEFAULT_CURSOR; - } - } - - /** - * This helper class listens to the JDesktopPane that parents this - * JInternalFrame and listens for resize events and resizes the - * JInternalFrame appropriately. - */ - protected class ComponentHandler implements ComponentListener - { - /** - * This method is called when the JDesktopPane is hidden. - * - * @param e - * The ComponentEvent fired. - */ - public void componentHidden(ComponentEvent e) - { - // Do nothing. - } - - /** - * This method is called when the JDesktopPane is moved. - * - * @param e - * The ComponentEvent fired. - */ - public void componentMoved(ComponentEvent e) - { - // Do nothing. - } - - /** - * This method is called when the JDesktopPane is resized. - * - * @param e - * The ComponentEvent fired. - */ - public void componentResized(ComponentEvent e) - { - if (frame.isMaximum()) - { - Container parent = frame.getParent(); - Insets i = parent.getInsets(); - int width = parent.getWidth() - i.left - i.right; - int height = parent.getHeight() - i.top - i.bottom; - frame.setBounds(0, 0, width, height); - } - } - - /** - * This method is called when the JDesktopPane is shown. - * - * @param e - * The ComponentEvent fired. - */ - public void componentShown(ComponentEvent e) - { - // Do nothing. - } - } - - /** - * This helper class acts as the LayoutManager for JInternalFrames. - */ - public class InternalFrameLayout implements LayoutManager - { - /** - * This method is called when the given Component is added to the - * JInternalFrame. - * - * @param name - * The name of the Component. - * @param c - * The Component added. - */ - public void addLayoutComponent(String name, Component c) - { - // Nothing to do here. - } - - /** - * This method is used to set the bounds of the children of the - * JInternalFrame. - * - * @param c - * The Container to lay out. - */ - public void layoutContainer(Container c) - { - Dimension dims = frame.getSize(); - Insets insets = frame.getInsets(); - - dims.width -= insets.left + insets.right; - dims.height -= insets.top + insets.bottom; - - int nh = 0; - int sh = 0; - int ew = 0; - int ww = 0; - - if (northPane != null) - { - Dimension nDims = northPane.getPreferredSize(); - nh = Math.min(nDims.height, dims.height); - - northPane.setBounds(insets.left, insets.top, dims.width, nh); - } - - if (southPane != null) - { - Dimension sDims = southPane.getPreferredSize(); - sh = Math.min(sDims.height, dims.height - nh); - - southPane.setBounds(insets.left, insets.top + dims.height - sh, - dims.width, sh); - } - - int remHeight = dims.height - sh - nh; - - if (westPane != null) - { - Dimension wDims = westPane.getPreferredSize(); - ww = Math.min(dims.width, wDims.width); - - westPane.setBounds(insets.left, insets.top + nh, ww, remHeight); - } - - if (eastPane != null) - { - Dimension eDims = eastPane.getPreferredSize(); - ew = Math.min(eDims.width, dims.width - ww); - - eastPane.setBounds(insets.left + dims.width - ew, insets.top + nh, - ew, remHeight); - } - - int remWidth = dims.width - ww - ew; - - frame.getRootPane().setBounds(insets.left + ww, insets.top + nh, - remWidth, remHeight); - } - - /** - * This method returns the minimum layout size. - * - * @param c - * The Container to find a minimum layout size for. - * @return The minimum dimensions for the JInternalFrame. - */ - public Dimension minimumLayoutSize(Container c) - { - return getSize(c, true); - } - - /** - * Th8is method returns the preferred layout size. - * - * @param c - * The Container to find a preferred layout size for. - * @return The preferred dimensions for the JInternalFrame. - */ - public Dimension preferredLayoutSize(Container c) - { - return getSize(c, false); - } - - /** - * DOCUMENT ME! - * - * @param c - * DOCUMENT ME! - * @param min - * DOCUMENT ME! - * @return DOCUMENT ME! - */ - private Dimension getSize(Container c, boolean min) - { - Insets insets = frame.getInsets(); - - Dimension contentDims = frame.getContentPane().getPreferredSize(); - if (min) - contentDims.width = contentDims.height = 0; - int nWidth = 0; - int nHeight = 0; - int sWidth = 0; - int sHeight = 0; - int eWidth = 0; - int eHeight = 0; - int wWidth = 0; - int wHeight = 0; - Dimension dims; - - if (northPane != null) - { - dims = northPane.getPreferredSize(); - if (dims != null) - { - nWidth = dims.width; - nHeight = dims.height; - } - } - - if (southPane != null) - { - dims = southPane.getPreferredSize(); - if (dims != null) - { - sWidth = dims.width; - sHeight = dims.height; - } - } - - if (eastPane != null) - { - dims = eastPane.getPreferredSize(); - if (dims != null) - { - sWidth = dims.width; - sHeight = dims.height; - } - } - - if (westPane != null) - { - dims = westPane.getPreferredSize(); - if (dims != null) - { - wWidth = dims.width; - wHeight = dims.height; - } - } - - int width = Math.max(sWidth, nWidth); - width = Math.max(width, contentDims.width + eWidth + wWidth); - - int height = Math.max(eHeight, wHeight); - height = Math.max(height, contentDims.height); - height += nHeight + sHeight; - - width += insets.left + insets.right; - height += insets.top + insets.bottom; - - return new Dimension(width, height); - } - - /** - * This method is called when a Component is removed from the - * JInternalFrame. - * - * @param c The Component that was removed. - */ - public void removeLayoutComponent(Component c) - { - // Nothing to do here. - } - } - - /** - * This helper class is used to listen to the JDesktopPane's glassPane for - * MouseEvents. The JInternalFrame can then be selected if a click is - * detected on its children. - */ - protected class GlassPaneDispatcher implements MouseInputListener - { - /** The MouseEvent target. */ - private transient Component mouseEventTarget; - - private Component dragTarget; - - /** - * Indicates if we are currently in a dragging operation or not. - */ - private boolean isDragging; - - /** - * This method is called when the mouse enters the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mouseEntered(MouseEvent e) - { - handleEvent(e); - } - - /** - * This method is called when the mouse is clicked on the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mouseClicked(MouseEvent e) - { - handleEvent(e); - } - - /** - * This method is called when the mouse is dragged in the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mouseDragged(MouseEvent e) - { - handleEvent(e); - } - - /** - * This method is called when the mouse exits the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mouseExited(MouseEvent e) - { - handleEvent(e); - } - - /** - * This method is called when the mouse is moved in the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mouseMoved(MouseEvent e) - { - handleEvent(e); - } - - /** - * This method is called when the mouse is pressed in the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - // Experiments show that this seems to call the - // borderListener.mousePressed() method to activate the frame. - if (borderListener != null) - borderListener.mousePressed(e); - handleEvent(e); - } - - /** - * This method is called when the mouse is released in the glass pane. - * - * @param e - * The MouseEvent. - */ - public void mouseReleased(MouseEvent e) - { - handleEvent(e); - } - - /** - * This is a helper method that dispatches the GlassPane MouseEvents to the - * proper component. - * - * @param e the mouse event to be dispatched - */ - private void handleEvent(MouseEvent e) - { - // Find candidate component inside the JInternalFrame. - Component target = frame.getLayeredPane().findComponentAt(e.getX(), - e.getY()); - - // Now search upwards to find a component that actually has - // a MouseListener attached. - while (target != null - && target.getMouseListeners().length == 0 - && target.getMouseMotionListeners().length == 0 - && target.getMouseWheelListeners().length == 0) - { - target = target.getParent(); - } - - if (target != null) - { - int id = e.getID(); - switch (id) - { - case MouseEvent.MOUSE_ENTERED: - // Now redispatch the thing. - if (! isDragging || frame.isSelected()) - { - mouseEventTarget = target; - redispatch(id, e, mouseEventTarget); - } - break; - case MouseEvent.MOUSE_EXITED: - if (! isDragging || frame.isSelected()) - { - redispatch(id, e, mouseEventTarget); - } - break; - case MouseEvent.MOUSE_PRESSED: - mouseEventTarget = target; - redispatch(id, e, mouseEventTarget); - // Start dragging. - dragTarget = target; - break; - case MouseEvent.MOUSE_RELEASED: - if (isDragging) - { - redispatch(id, e, dragTarget); - isDragging = false; - } - else - redispatch(id, e, mouseEventTarget); - break; - case MouseEvent.MOUSE_CLICKED: - redispatch(id, e, mouseEventTarget); - break; - case MouseEvent.MOUSE_MOVED: - if (target != mouseEventTarget) - { - // Create additional MOUSE_EXITED/MOUSE_ENTERED pairs. - redispatch(MouseEvent.MOUSE_EXITED, e, mouseEventTarget); - mouseEventTarget = target; - redispatch(MouseEvent.MOUSE_ENTERED, e, mouseEventTarget); - } - redispatch(id, e, mouseEventTarget); - break; - case MouseEvent.MOUSE_DRAGGED: - if (! isDragging) - isDragging = true; - redispatch(id, e, mouseEventTarget); - break; - case MouseEvent.MOUSE_WHEEL: - redispatch(id, e, mouseEventTarget); - break; - default: - assert false : "Must not reach here"; - } - } - } - - /** - * Redispatches the event to the real target with the specified id. - * - * @param id the new event ID - * @param e the original event - * @param target the real event target - */ - private void redispatch(int id, MouseEvent e, Component target) - { - Point p = SwingUtilities.convertPoint(frame.getLayeredPane(), e.getX(), - e.getY(), target); - MouseEvent ev = new MouseEvent(target, id, e.getWhen(), - e.getModifiers() | e.getModifiersEx(), - p.x, p.y, e.getClickCount(), - e.isPopupTrigger()); - target.dispatchEvent(ev); - } - } - - /** - * This helper class listens for PropertyChangeEvents from the - * JInternalFrame. - */ - public class InternalFramePropertyChangeListener - implements PropertyChangeListener - { - - /** - * This method is called when one of the JInternalFrame's properties change. - * - * @param evt - * The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent evt) - { - String property = evt.getPropertyName(); - if (property.equals(JInternalFrame.IS_MAXIMUM_PROPERTY)) - { - if (frame.isMaximum()) - maximizeFrame(frame); - else - minimizeFrame(frame); - } - else if (property.equals(JInternalFrame.IS_ICON_PROPERTY)) - { - if (frame.isIcon()) - iconifyFrame(frame); - else - deiconifyFrame(frame); - } - else if (property.equals(JInternalFrame.IS_SELECTED_PROPERTY)) - { - Component glassPane = frame.getGlassPane(); - if (frame.isSelected()) - { - activateFrame(frame); - glassPane.setVisible(false); - } - else - { - deactivateFrame(frame); - glassPane.setVisible(true); - } - } - else if (property.equals(JInternalFrame.ROOT_PANE_PROPERTY) - || property.equals(JInternalFrame.GLASS_PANE_PROPERTY)) - { - Component old = (Component) evt.getOldValue(); - if (old != null) - { - old.removeMouseListener(glassPaneDispatcher); - old.removeMouseMotionListener(glassPaneDispatcher); - } - - Component newPane = (Component) evt.getNewValue(); - if (newPane != null) - { - newPane.addMouseListener(glassPaneDispatcher); - newPane.addMouseMotionListener(glassPaneDispatcher); - } - - frame.revalidate(); - } - else if (property.equals(JInternalFrame.IS_CLOSED_PROPERTY)) - { - if (evt.getNewValue() == Boolean.TRUE) - { - Container parent = frame.getParent(); - if (parent != null) - parent.removeComponentListener(componentListener); - closeFrame(frame); - } - } - else if (property.equals("ancestor")) - { - Container newParent = (Container) evt.getNewValue(); - Container oldParent = (Container) evt.getOldValue(); - if (newParent != null) - { - newParent.addComponentListener(componentListener); - } - else if (oldParent != null) - { - oldParent.removeComponentListener(componentListener); - } - } - } - } - - /** - * This helper class is the border for the JInternalFrame. - */ - class InternalFrameBorder extends AbstractBorder implements - UIResource - { - /** - * The width of the border. - */ - static final int bSize = 5; - - /** - * The size of the corners (also used by the mouse listener). - */ - static final int cornerSize = 10; - - /** - * This method returns whether the border is opaque. - * - * @return Whether the border is opaque. - */ - public boolean isBorderOpaque() - { - return true; - } - - /** - * This method returns the insets of the border. - * - * @param c - * The Component to find border insets for. - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return new Insets(bSize, bSize, bSize, bSize); - } - - /** - * This method paints the border. - * - * @param c - * The Component that owns the border. - * @param g - * The Graphics object to paint with. - * @param x - * The x coordinate to paint at. - * @param y - * The y coordinate to paint at. - * @param width - * The width of the Component. - * @param height - * The height of the Component. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int width, - int height) - { - g.translate(x, y); - Color saved = g.getColor(); - Rectangle b = frame.getBounds(); - - Color d = c.getBackground(); - g.setColor(d); - g.fillRect(0, 0, bSize, b.height); - g.fillRect(0, 0, b.width, bSize); - g.fillRect(0, b.height - bSize, b.width, bSize); - g.fillRect(b.width - bSize, 0, bSize, b.height); - - int x1 = 0; - int x2 = bSize; - int x3 = b.width - bSize; - int x4 = b.width; - - int y1 = 0; - int y2 = bSize; - int y3 = b.height - bSize; - int y4 = b.height; - - g.setColor(Color.GRAY); - g.fillRect(0, 0, bSize, y4); - g.fillRect(0, 0, x4, bSize); - g.fillRect(0, y3, b.width, bSize); - g.fillRect(x3, 0, bSize, b.height); - - g.fill3DRect(0, cornerSize, bSize, b.height - 2 * cornerSize, false); - g.fill3DRect(cornerSize, 0, b.width - 2 * cornerSize, bSize, false); - g.fill3DRect(cornerSize, b.height - bSize, b.width - 2 * cornerSize, - bSize, false); - g.fill3DRect(b.width - bSize, cornerSize, bSize, - b.height - 2 * cornerSize, false); - - g.translate(-x, -y); - g.setColor(saved); - } - } - - /** - * This action triggers the system menu. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class ShowSystemMenuAction - extends AbstractAction - { - public void actionPerformed(ActionEvent e) - { - if (titlePane != null) - { - titlePane.showSystemMenu(); - } - } - } - - /** - * The MouseListener that is responsible for dragging and resizing the - * JInternalFrame in response to MouseEvents. - */ - protected MouseInputAdapter borderListener; - - /** - * The ComponentListener that is responsible for resizing the JInternalFrame - * in response to ComponentEvents from the JDesktopPane. - */ - protected ComponentListener componentListener; - - /** - * The MouseListener that is responsible for activating the JInternalFrame - * when the mouse press activates one of its descendents. - */ - protected MouseInputListener glassPaneDispatcher; - - /** - * The PropertyChangeListener that is responsible for listening to - * PropertyChangeEvents from the JInternalFrame. - */ - protected PropertyChangeListener propertyChangeListener; - - /** The InternalFrameListener that listens to the JInternalFrame. */ - private transient BasicInternalFrameListener internalFrameListener; - - /** The JComponent placed at the east region of the JInternalFrame. */ - protected JComponent eastPane; - - /** The JComponent placed at the north region of the JInternalFrame. */ - protected JComponent northPane; - - /** The JComponent placed at the south region of the JInternalFrame. */ - protected JComponent southPane; - - /** The JComponent placed at the west region of the JInternalFrame. */ - protected JComponent westPane; - - /** - * The Keystroke bound to open the menu. - * @deprecated - */ - protected KeyStroke openMenuKey; - - /** The TitlePane displayed at the top of the JInternalFrame. */ - protected BasicInternalFrameTitlePane titlePane; - - /** The JInternalFrame this UI is responsible for. */ - protected JInternalFrame frame; - - /** The LayoutManager used in the JInternalFrame. */ - protected LayoutManager internalFrameLayout; - - /** The JDesktopPane that is the parent of the JInternalFrame. */ - private transient JDesktopPane desktopPane; - - /** - * Creates a new BasicInternalFrameUI object. - * - * @param b The JInternalFrame this UI will represent. - */ - public BasicInternalFrameUI(JInternalFrame b) - { - // Nothing to do here. - } - - /** - * This method will create a new BasicInternalFrameUI for the given - * JComponent. - * - * @param b The JComponent to create a BasicInternalFrameUI for. - * - * @return A new BasicInternalFrameUI. - */ - public static ComponentUI createUI(JComponent b) - { - return new BasicInternalFrameUI((JInternalFrame) b); - } - - /** - * This method installs a UI for the JInternalFrame. - * - * @param c The JComponent to install this UI on. - */ - public void installUI(JComponent c) - { - if (c instanceof JInternalFrame) - { - frame = (JInternalFrame) c; - - installDefaults(); - installListeners(); - installComponents(); - installKeyboardActions(); - - if (! frame.isSelected()) - frame.getGlassPane().setVisible(true); - } - } - - /** - * This method reverses the work done by installUI. - * - * @param c The JComponent to uninstall this UI for. - */ - public void uninstallUI(JComponent c) - { - uninstallKeyboardActions(); - uninstallComponents(); - uninstallListeners(); - uninstallDefaults(); - - frame.getRootPane().getGlassPane().setVisible(false); - frame = null; - } - - /** - * This method installs the defaults specified by the look and feel. - */ - protected void installDefaults() - { - internalFrameLayout = createLayoutManager(); - frame.setLayout(internalFrameLayout); - LookAndFeel.installBorder(frame, "InternalFrame.border"); - frame.setFrameIcon(UIManager.getIcon("InternalFrame.icon")); - - // Let the content pane inherit the background color from its - // frame by setting the background to null. - Component contentPane = frame.getContentPane(); - if (contentPane != null - && contentPane.getBackground() instanceof UIResource) - { - contentPane.setBackground(null); - } - } - - /** - * This method installs the keyboard actions for the JInternalFrame. - */ - protected void installKeyboardActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - am.put("showSystemMenu", new ShowSystemMenuAction()); - - // The RI impl installs the audio actions as parent of the UI action map, - // so do we. - BasicLookAndFeel blaf = (BasicLookAndFeel) UIManager.getLookAndFeel(); - ActionMap audioActionMap = blaf.getAudioActionMap(); - am.setParent(audioActionMap); - - SwingUtilities.replaceUIActionMap(frame, am); - } - - /** - * This method installs the Components for the JInternalFrame. - */ - protected void installComponents() - { - setNorthPane(createNorthPane(frame)); - setSouthPane(createSouthPane(frame)); - setEastPane(createEastPane(frame)); - setWestPane(createWestPane(frame)); - } - - /** - * This method installs the listeners for the JInternalFrame. - */ - protected void installListeners() - { - glassPaneDispatcher = createGlassPaneDispatcher(); - createInternalFrameListener(); - borderListener = createBorderListener(frame); - componentListener = createComponentListener(); - propertyChangeListener = createPropertyChangeListener(); - - frame.addMouseListener(borderListener); - frame.addMouseMotionListener(borderListener); - frame.addInternalFrameListener(internalFrameListener); - frame.addPropertyChangeListener(propertyChangeListener); - frame.getRootPane().getGlassPane().addMouseListener(glassPaneDispatcher); - frame.getRootPane().getGlassPane().addMouseMotionListener(glassPaneDispatcher); - - Container parent = frame.getParent(); - if (parent != null) - { - parent.addComponentListener(componentListener); - } - } - - /** - * This method uninstalls the defaults for the JInternalFrame. - */ - protected void uninstallDefaults() - { - frame.setBorder(null); - frame.setLayout(null); - internalFrameLayout = null; - } - - /** - * This method uninstalls the Components for the JInternalFrame. - */ - protected void uninstallComponents() - { - setNorthPane(null); - setSouthPane(null); - setEastPane(null); - setWestPane(null); - } - - /** - * This method uninstalls the listeners for the JInternalFrame. - */ - protected void uninstallListeners() - { - - Container parent = frame.getParent(); - if (parent != null) - { - parent.removeComponentListener(componentListener); - } - componentListener = null; - - frame.getRootPane().getGlassPane().removeMouseMotionListener(glassPaneDispatcher); - frame.getRootPane().getGlassPane().removeMouseListener(glassPaneDispatcher); - - frame.removePropertyChangeListener(propertyChangeListener); - frame.removeInternalFrameListener(internalFrameListener); - frame.removeMouseMotionListener(borderListener); - frame.removeMouseListener(borderListener); - - propertyChangeListener = null; - - borderListener = null; - internalFrameListener = null; - glassPaneDispatcher = null; - } - - /** - * This method uninstalls the keyboard actions for the JInternalFrame. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIActionMap(frame, null); - SwingUtilities.replaceUIInputMap(frame, JComponent.WHEN_IN_FOCUSED_WINDOW, - null); - } - - /** - * This method creates a new LayoutManager for the JInternalFrame. - * - * @return A new LayoutManager for the JInternalFrame. - */ - protected LayoutManager createLayoutManager() - { - return new InternalFrameLayout(); - } - - /** - * This method creates a new PropertyChangeListener for the JInternalFrame. - * - * @return A new PropertyChangeListener for the JInternalFrame. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new InternalFramePropertyChangeListener(); - } - - /** - * This method returns the preferred size of the given JComponent. - * - * @param x The JComponent to find a preferred size for. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent x) - { - Dimension pref = null; - LayoutManager layout = frame.getLayout(); - if (frame == x && layout != null) - pref = layout.preferredLayoutSize(frame); - else - pref = new Dimension(100, 100); - return pref; - } - - /** - * This method returns the minimum size of the given JComponent. - * - * @param x The JComponent to find a minimum size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent x) - { - Dimension min = null; - LayoutManager layout = frame.getLayout(); - if (frame == x && layout != null) - min = layout.minimumLayoutSize(frame); - else - min = new Dimension(0, 0); - return min; - } - - /** - * This method returns the maximum size of the given JComponent. - * - * @param x The JComponent to find a maximum size for. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent x) - { - Dimension max = null; - LayoutManager layout = frame.getLayout(); - if (frame == x && layout != null && layout instanceof LayoutManager2) - max = ((LayoutManager2) layout).maximumLayoutSize(frame); - else - max = new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - return max; - } - - /** - * This method replaces the currentPane with the newPane. When replacing it - * also removes the MouseHandlers for the old pane and installs them on - * the new pane. - * - * @param currentPane The old pane to remove. - * @param newPane The new pane to install. - */ - protected void replacePane(JComponent currentPane, JComponent newPane) - { - if (currentPane != null) - { - deinstallMouseHandlers(currentPane); - frame.remove(currentPane); - } - - if (newPane != null) - { - installMouseHandlers(newPane); - frame.add(newPane); - } - } - - /** - * This method removes the necessary MouseListeners from the given - * JComponent. - * - * @param c The JComponent to remove MouseListeners from. - */ - protected void deinstallMouseHandlers(JComponent c) - { - c.removeMouseListener(borderListener); - c.removeMouseMotionListener(borderListener); - } - - /** - * This method installs the necessary MouseListeners from the given - * JComponent. - * - * @param c The JComponent to install MouseListeners on. - */ - protected void installMouseHandlers(JComponent c) - { - c.addMouseListener(borderListener); - c.addMouseMotionListener(borderListener); - } - - /** - * This method creates the north pane used in the JInternalFrame. - * - * @param w The JInternalFrame to create a north pane for. - * - * @return The north pane. - */ - protected JComponent createNorthPane(JInternalFrame w) - { - titlePane = new BasicInternalFrameTitlePane(w); - return titlePane; - } - - /** - * This method creates the west pane used in the JInternalFrame. - * - * @param w The JInternalFrame to create a west pane for. - * - * @return The west pane. - */ - protected JComponent createWestPane(JInternalFrame w) - { - return null; - } - - /** - * This method creates the south pane used in the JInternalFrame. - * - * @param w The JInternalFrame to create a south pane for. - * - * @return The south pane. - */ - protected JComponent createSouthPane(JInternalFrame w) - { - return null; - } - - /** - * This method creates the east pane used in the JInternalFrame. - * - * @param w The JInternalFrame to create an east pane for. - * - * @return The east pane. - */ - protected JComponent createEastPane(JInternalFrame w) - { - return null; - } - - /** - * This method returns a new BorderListener for the given JInternalFrame. - * - * @param w The JIntenalFrame to create a BorderListener for. - * - * @return A new BorderListener. - */ - protected MouseInputAdapter createBorderListener(JInternalFrame w) - { - return new BorderListener(); - } - - /** - * This method creates a new InternalFrameListener for the JInternalFrame. - */ - protected void createInternalFrameListener() - { - internalFrameListener = new BasicInternalFrameListener(); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - protected final boolean isKeyBindingRegistered() - { - // FIXME: Implement. - return false; - } - - /** - * DOCUMENT ME! - * - * @param b DOCUMENT ME! - */ - protected final void setKeyBindingRegistered(boolean b) - { - // FIXME: Implement. - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public final boolean isKeyBindingActive() - { - // FIXME: Implement. - return false; - } - - /** - * DOCUMENT ME! - * - * @param b DOCUMENT ME! - */ - protected final void setKeyBindingActive(boolean b) - { - // FIXME: Implement. - } - - /** - * DOCUMENT ME! - */ - protected void setupMenuOpenKey() - { - // FIXME: Implement. - } - - /** - * DOCUMENT ME! - */ - protected void setupMenuCloseKey() - { - // FIXME: Implement. - } - - /** - * This method returns the north pane. - * - * @return The north pane. - */ - public JComponent getNorthPane() - { - return northPane; - } - - /** - * This method sets the north pane to be the given JComponent. - * - * @param c The new north pane. - */ - public void setNorthPane(JComponent c) - { - replacePane(northPane, c); - northPane = c; - // the following is needed to make internal frames draggable when using - // the JGoodies PlasticLookAndFeel, because it overrides the - // createNorthPane() method and doesn't assign anything to the titlePane - // field. It is possible there is another way to make this work, but - // I didn't find it... - if (c instanceof BasicInternalFrameTitlePane) - titlePane = (BasicInternalFrameTitlePane) c; - } - - /** - * This method returns the south pane. - * - * @return The south pane. - */ - public JComponent getSouthPane() - { - return southPane; - } - - /** - * This method sets the south pane to be the given JComponent. - * - * @param c The new south pane. - */ - public void setSouthPane(JComponent c) - { - replacePane(southPane, c); - southPane = c; - } - - /** - * This method sets the east pane to be the given JComponent. - * - * @param c The new east pane. - */ - public void setEastPane(JComponent c) - { - replacePane(eastPane, c); - eastPane = c; - } - - /** - * This method returns the east pane. - * - * @return The east pane. - */ - public JComponent getEastPane() - { - return eastPane; - } - - /** - * This method sets the west pane to be the given JComponent. - * - * @param c The new west pane. - */ - public void setWestPane(JComponent c) - { - replacePane(westPane, c); - westPane = c; - } - - /** - * This method returns the west pane. - * - * @return The west pane. - */ - public JComponent getWestPane() - { - return westPane; - } - - /** - * This method returns the DesktopManager to use with the JInternalFrame. - * - * @return The DesktopManager to use with the JInternalFrame. - */ - protected DesktopManager getDesktopManager() - { - DesktopManager value = null; - JDesktopPane pane = frame.getDesktopPane(); - if (pane != null) - value = frame.getDesktopPane().getDesktopManager(); - if (value == null) - value = createDesktopManager(); - return value; - } - - /** - * This method returns a default DesktopManager that can be used with this - * JInternalFrame. - * - * @return A default DesktopManager that can be used with this - * JInternalFrame. - */ - protected DesktopManager createDesktopManager() - { - return new DefaultDesktopManager(); - } - - /** - * This is a convenience method that closes the JInternalFrame. - * - * @param f The JInternalFrame to close. - */ - protected void closeFrame(JInternalFrame f) - { - getDesktopManager().closeFrame(f); - } - - /** - * This is a convenience method that maximizes the JInternalFrame. - * - * @param f The JInternalFrame to maximize. - */ - protected void maximizeFrame(JInternalFrame f) - { - getDesktopManager().maximizeFrame(f); - } - - /** - * This is a convenience method that minimizes the JInternalFrame. - * - * @param f The JInternalFrame to minimize. - */ - protected void minimizeFrame(JInternalFrame f) - { - getDesktopManager().minimizeFrame(f); - } - - /** - * This is a convenience method that iconifies the JInternalFrame. - * - * @param f The JInternalFrame to iconify. - */ - protected void iconifyFrame(JInternalFrame f) - { - getDesktopManager().iconifyFrame(f); - } - - /** - * This is a convenience method that deiconifies the JInternalFrame. - * - * @param f The JInternalFrame to deiconify. - */ - protected void deiconifyFrame(JInternalFrame f) - { - getDesktopManager().deiconifyFrame(f); - } - - /** - * This is a convenience method that activates the JInternalFrame. - * - * @param f The JInternalFrame to activate. - */ - protected void activateFrame(JInternalFrame f) - { - getDesktopManager().activateFrame(f); - } - - /** - * This is a convenience method that deactivates the JInternalFrame. - * - * @param f the JInternalFrame to deactivate - */ - protected void deactivateFrame(JInternalFrame f) - { - getDesktopManager().deactivateFrame(f); - } - - /** - * This method returns a new ComponentListener for the JDesktopPane. - * - * @return A new ComponentListener. - */ - protected ComponentListener createComponentListener() - { - return new ComponentHandler(); - } - - /** - * This method returns a new GlassPaneDispatcher. - * - * @return A new GlassPaneDispatcher. - */ - protected MouseInputListener createGlassPaneDispatcher() - { - return new GlassPaneDispatcher(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java deleted file mode 100644 index 9469b56..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicLabelUI.java +++ /dev/null @@ -1,542 +0,0 @@ -/* BasicLabelUI.java - Copyright (C) 2002, 2004, 2006, 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.plaf.basic; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.awt.Toolkit; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.Icon; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.LabelUI; -import javax.swing.text.View; - -/** - * This is the Basic Look and Feel class for the JLabel. One BasicLabelUI - * object is used to paint all JLabels that utilize the Basic Look and Feel. - */ -public class BasicLabelUI extends LabelUI implements PropertyChangeListener -{ - /** The labelUI that is shared by all labels. */ - protected static BasicLabelUI labelUI; - - /** - * These fields hold the rectangles for the whole label, - * the icon and the text. - */ - private Rectangle vr; - private Rectangle ir; - private Rectangle tr; - - /** - * A cached Insets object for reuse in the label layout methods. - */ - private Insets cachedInsets; - - /** - * Creates a new BasicLabelUI object. - */ - public BasicLabelUI() - { - super(); - vr = new Rectangle(); - ir = new Rectangle(); - tr = new Rectangle(); - } - - /** - * Creates and returns a UI for the label. Since one UI is shared by all - * labels, this means creating only if necessary and returning the shared - * UI. - * - * @param c The {@link JComponent} that a UI is being created for. - * - * @return A label UI for the Basic Look and Feel. - */ - public static ComponentUI createUI(JComponent c) - { - if (labelUI == null) - labelUI = new BasicLabelUI(); - return labelUI; - } - - /** - * Returns the preferred size of this component as calculated by the - * {@link #layoutCL(JLabel, FontMetrics, String, Icon, Rectangle, Rectangle, - * Rectangle)} method. - * - * @param c This {@link JComponent} to get a preferred size for. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - JLabel lab = (JLabel) c; - Insets insets = lab.getInsets(); - int insetsX = insets.left + insets.right; - int insetsY = insets.top + insets.bottom; - Icon icon = lab.getIcon(); - String text = lab.getText(); - Dimension ret; - if (icon == null && text == null) - ret = new Dimension(insetsX, insetsY); - else if (icon != null && text == null) - ret = new Dimension(icon.getIconWidth() + insetsX, - icon.getIconHeight() + insetsY); - else - { - FontMetrics fm = getFontMetrics(lab); - ir.x = 0; - ir.y = 0; - ir.width = 0; - ir.height = 0; - tr.x = 0; - tr.y = 0; - tr.width = 0; - tr.height = 0; - vr.x = 0; - vr.y = 0; - vr.width = Short.MAX_VALUE; - vr.height = Short.MAX_VALUE; - layoutCL(lab, fm, text, icon, vr, ir, tr); - Rectangle cr = SwingUtilities.computeUnion(tr.x, tr.y, tr.width, - tr.height, ir); - ret = new Dimension(cr.width + insetsX, cr.height + insetsY); - } - return ret; - } - - /** - * This method returns the minimum size of the {@link JComponent} given. If - * this method returns null, then it is up to the Layout Manager to give - * this component a minimum size. - * - * @param c The {@link JComponent} to get a minimum size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the maximum size of the {@link JComponent} given. If - * this method returns null, then it is up to the Layout Manager to give - * this component a maximum size. - * - * @param c The {@link JComponent} to get a maximum size for. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * The method that paints the label according to its current state. - * - * @param g The {@link Graphics} object to paint with. - * @param c The {@link JComponent} to paint. - */ - public void paint(Graphics g, JComponent c) - { - JLabel b = (JLabel) c; - Icon icon = (b.isEnabled()) ? b.getIcon() : b.getDisabledIcon(); - String text = b.getText(); - if (icon != null || (text != null && ! text.equals(""))) - { - FontMetrics fm = getFontMetrics(b); - Insets i = c.getInsets(cachedInsets); - vr.x = i.left; - vr.y = i.right; - vr.width = c.getWidth() - i.left - i.right; - vr.height = c.getHeight() - i.top - i.bottom; - ir.x = 0; - ir.y = 0; - ir.width = 0; - ir.height = 0; - tr.x = 0; - tr.y = 0; - tr.width = 0; - tr.height = 0; - - text = layoutCL(b, fm, text, icon, vr, ir, tr); - - if (icon != null) - icon.paintIcon(b, g, ir.x, ir.y); - - if (text != null && ! text.equals("")) - { - Object htmlRenderer = b.getClientProperty(BasicHTML.propertyKey); - if (htmlRenderer == null) - { - if (b.isEnabled()) - paintEnabledText(b, g, text, tr.x, tr.y + fm.getAscent()); - else - paintDisabledText(b, g, text, tr.x, tr.y + fm.getAscent()); - } - else - { - ((View) htmlRenderer).paint(g, tr); - } - } - } - } - - /** - * This method is simply calls SwingUtilities's layoutCompoundLabel. - * - * @param label The label to lay out. - * @param fontMetrics The FontMetrics for the font used. - * @param text The text to paint. - * @param icon The icon to draw. - * @param viewR The entire viewable rectangle. - * @param iconR The icon bounds rectangle. - * @param textR The text bounds rectangle. - * - * @return A possibly clipped version of the text. - */ - protected String layoutCL(JLabel label, FontMetrics fontMetrics, String text, - Icon icon, Rectangle viewR, Rectangle iconR, Rectangle textR) - { - return SwingUtilities.layoutCompoundLabel(label, fontMetrics, text, icon, - label.getVerticalAlignment(), label.getHorizontalAlignment(), label - .getVerticalTextPosition(), label.getHorizontalTextPosition(), - viewR, iconR, textR, label.getIconTextGap()); - } - - /** - * Paints the text if the label is disabled. By default, this paints the - * clipped text returned by layoutCompoundLabel using the - * background.brighter() color. It also paints the same text using the - * background.darker() color one pixel to the right and one pixel down. - * - * @param l The {@link JLabel} being painted. - * @param g The {@link Graphics} object to paint with. - * @param s The String to paint. - * @param textX The x coordinate of the start of the baseline. - * @param textY The y coordinate of the start of the baseline. - */ - protected void paintDisabledText(JLabel l, Graphics g, String s, int textX, - int textY) - { - g.setColor(l.getBackground().brighter()); - - int mnemIndex = l.getDisplayedMnemonicIndex(); - - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX, - textY); - else - g.drawString(s, textX, textY); - - g.setColor(l.getBackground().darker()); - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX + 1, - textY + 1); - else - g.drawString(s, textX + 1, textY + 1); - } - - /** - * Paints the text if the label is enabled. The text is painted using the - * foreground color. - * - * @param l The {@link JLabel} being painted. - * @param g The {@link Graphics} object to paint with. - * @param s The String to paint. - * @param textX The x coordinate of the start of the baseline. - * @param textY The y coordinate of the start of the baseline. - */ - protected void paintEnabledText(JLabel l, Graphics g, String s, int textX, - int textY) - { - g.setColor(l.getForeground()); - - int mnemIndex = l.getDisplayedMnemonicIndex(); - - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX, - textY); - else - g.drawString(s, textX, textY); - } - - /** - * This method installs the UI for the given {@link JComponent}. This - * method will install the component, defaults, listeners, and keyboard - * actions. - * - * @param c The {@link JComponent} that this UI is being installed on. - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JLabel) - { - JLabel l = (JLabel) c; - - installComponents(l); - installDefaults(l); - installListeners(l); - installKeyboardActions(l); - } - } - - /** - * This method uninstalls the UI for the given {@link JComponent}. This - * method will uninstall the component, defaults, listeners, and keyboard - * actions. - * - * @param c The {@link JComponent} that this UI is being installed on. - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - if (c instanceof JLabel) - { - JLabel l = (JLabel) c; - - uninstallKeyboardActions(l); - uninstallListeners(l); - uninstallDefaults(l); - uninstallComponents(l); - } - } - - /** - * This method installs the components for this {@link JLabel}. - * - * @param c The {@link JLabel} to install components for. - */ - protected void installComponents(JLabel c) - { - BasicHTML.updateRenderer(c, c.getText()); - } - - /** - * This method uninstalls the components for this {@link JLabel}. - * - * @param c The {@link JLabel} to uninstall components for. - */ - protected void uninstallComponents(JLabel c) - { - c.putClientProperty(BasicHTML.propertyKey, null); - c.putClientProperty(BasicHTML.documentBaseKey, null); - } - - /** - * This method installs the defaults that are defined in the Basic look and - * feel for this {@link JLabel}. - * - * @param c The {@link JLabel} to install defaults for. - */ - protected void installDefaults(JLabel c) - { - LookAndFeel.installColorsAndFont(c, "Label.background", "Label.foreground", - "Label.font"); - //XXX: There are properties we don't use called disabledForeground - //and disabledShadow. - } - - /** - * This method uninstalls the defaults that are defined in the Basic look - * and feel for this {@link JLabel}. - * - * @param c The {@link JLabel} to uninstall defaults for. - */ - protected void uninstallDefaults(JLabel c) - { - c.setForeground(null); - c.setBackground(null); - c.setFont(null); - } - - /** - * Installs the keyboard actions for the given {@link JLabel}. - * - * @param l The {@link JLabel} to install keyboard actions for. - */ - protected void installKeyboardActions(JLabel l) - { - Component c = l.getLabelFor(); - if (c != null) - { - int mnemonic = l.getDisplayedMnemonic(); - if (mnemonic > 0) - { - // add a keystroke for the given mnemonic mapping to 'press'; - InputMap keyMap = new InputMap(); - keyMap.put(KeyStroke.getKeyStroke(mnemonic, KeyEvent.VK_ALT), - "press"); - SwingUtilities.replaceUIInputMap(l, - JComponent.WHEN_IN_FOCUSED_WINDOW, keyMap); - - // add an action to focus the component when 'press' happens - ActionMap map = new ActionMap(); - map.put("press", new AbstractAction() { - public void actionPerformed(ActionEvent event) - { - JLabel label = (JLabel) event.getSource(); - Component c = label.getLabelFor(); - if (c != null) - c.requestFocus(); - } - }); - SwingUtilities.replaceUIActionMap(l, map); - } - } - } - - /** - * This method uninstalls the keyboard actions for the given {@link JLabel}. - * - * @param l The {@link JLabel} to uninstall keyboard actions for. - */ - protected void uninstallKeyboardActions(JLabel l) - { - SwingUtilities.replaceUIActionMap(l, null); - SwingUtilities.replaceUIInputMap(l, JComponent.WHEN_IN_FOCUSED_WINDOW, - null); - } - - /** - * This method installs the listeners for the given {@link JLabel}. The UI - * delegate only listens to the label. - * - * @param c The {@link JLabel} to install listeners for. - */ - protected void installListeners(JLabel c) - { - c.addPropertyChangeListener(this); - } - - /** - * This method uninstalls the listeners for the given {@link JLabel}. The UI - * delegate only listens to the label. - * - * @param c The {@link JLabel} to uninstall listeners for. - */ - protected void uninstallListeners(JLabel c) - { - c.removePropertyChangeListener(this); - } - - /** - * This method is called whenever any JLabel's that use this UI has one of - * their properties change. - * - * @param e The {@link PropertyChangeEvent} that describes the change. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals("text")) - { - String text = (String) e.getNewValue(); - JLabel l = (JLabel) e.getSource(); - BasicHTML.updateRenderer(l, text); - } - else if (e.getPropertyName().equals("displayedMnemonic")) - { - // update the key to action mapping - JLabel label = (JLabel) e.getSource(); - if (label.getLabelFor() != null) - { - int oldMnemonic = ((Integer) e.getOldValue()).intValue(); - int newMnemonic = ((Integer) e.getNewValue()).intValue(); - InputMap keyMap = label.getInputMap( - JComponent.WHEN_IN_FOCUSED_WINDOW); - keyMap.put(KeyStroke.getKeyStroke(oldMnemonic, - KeyEvent.ALT_DOWN_MASK), null); - keyMap.put(KeyStroke.getKeyStroke(newMnemonic, - KeyEvent.ALT_DOWN_MASK), "press"); - } - } - else if (e.getPropertyName().equals("labelFor")) - { - JLabel label = (JLabel) e.getSource(); - InputMap keyMap = label.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); - int mnemonic = label.getDisplayedMnemonic(); - if (mnemonic > 0) - keyMap.put(KeyStroke.getKeyStroke(mnemonic, KeyEvent.ALT_DOWN_MASK), - "press"); - } - } - - /** - * Fetches a font metrics object for the specified label. This first - * tries to get it from the label object itself by calling - * {@link Component#getFontMetrics(Font)}, and if that does not work - * (for instance, when we are in the initialization and have no parent yet), - * it asks the Toolkit for a font metrics object. - * - * @param l the label - * - * @return a suitable font metrics object - */ - private FontMetrics getFontMetrics(JLabel l) - { - Font font = l.getFont(); - FontMetrics fm = l.getFontMetrics(font); - if (fm == null) - { - Toolkit tk = Toolkit.getDefaultToolkit(); - fm = tk.getFontMetrics(font); - } - return fm; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java deleted file mode 100644 index 0e33957..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicListUI.java +++ /dev/null @@ -1,1421 +0,0 @@ -/* BasicListUI.java -- - Copyright (C) 2002, 2004, 2005, 2006 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.plaf.basic; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.CellRendererPane; -import javax.swing.DefaultListSelectionModel; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JList; -import javax.swing.ListCellRenderer; -import javax.swing.ListModel; -import javax.swing.ListSelectionModel; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.TransferHandler; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.event.ListDataEvent; -import javax.swing.event.ListDataListener; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ListUI; -import javax.swing.plaf.UIResource; - -/** - * The Basic Look and Feel UI delegate for the - * JList. - */ -public class BasicListUI extends ListUI -{ - - /** - * A helper class which listens for {@link FocusEvent}s - * from the JList. - */ - public class FocusHandler implements FocusListener - { - /** - * Called when the JList acquires focus. - * - * @param e The FocusEvent representing focus acquisition - */ - public void focusGained(FocusEvent e) - { - repaintCellFocus(); - } - - /** - * Called when the JList loses focus. - * - * @param e The FocusEvent representing focus loss - */ - public void focusLost(FocusEvent e) - { - repaintCellFocus(); - } - - /** - * Helper method to repaint the focused cell's - * lost or acquired focus state. - */ - protected void repaintCellFocus() - { - // TODO: Implement this properly. - } - } - - /** - * A helper class which listens for {@link ListDataEvent}s generated by - * the {@link JList}'s {@link ListModel}. - * - * @see javax.swing.JList#getModel() - */ - public class ListDataHandler implements ListDataListener - { - /** - * Called when a general change has happened in the model which cannot - * be represented in terms of a simple addition or deletion. - * - * @param e The event representing the change - */ - public void contentsChanged(ListDataEvent e) - { - updateLayoutStateNeeded |= modelChanged; - list.revalidate(); - } - - /** - * Called when an interval of objects has been added to the model. - * - * @param e The event representing the addition - */ - public void intervalAdded(ListDataEvent e) - { - updateLayoutStateNeeded |= modelChanged; - list.revalidate(); - } - - /** - * Called when an inteval of objects has been removed from the model. - * - * @param e The event representing the removal - */ - public void intervalRemoved(ListDataEvent e) - { - updateLayoutStateNeeded |= modelChanged; - list.revalidate(); - } - } - - /** - * A helper class which listens for {@link ListSelectionEvent}s - * from the {@link JList}'s {@link ListSelectionModel}. - */ - public class ListSelectionHandler implements ListSelectionListener - { - /** - * Called when the list selection changes. - * - * @param e The event representing the change - */ - public void valueChanged(ListSelectionEvent e) - { - int index1 = e.getFirstIndex(); - int index2 = e.getLastIndex(); - Rectangle damaged = getCellBounds(list, index1, index2); - if (damaged != null) - list.repaint(damaged); - } - } - - /** - * This class is used to mimmic the behaviour of the JDK when registering - * keyboard actions. It is the same as the private class used in JComponent - * for the same reason. This class receives an action event and dispatches - * it to the true receiver after altering the actionCommand property of the - * event. - */ - private static class ActionListenerProxy - extends AbstractAction - { - ActionListener target; - String bindingCommandName; - - public ActionListenerProxy(ActionListener li, - String cmd) - { - target = li; - bindingCommandName = cmd; - } - - public void actionPerformed(ActionEvent e) - { - ActionEvent derivedEvent = new ActionEvent(e.getSource(), - e.getID(), - bindingCommandName, - e.getModifiers()); - target.actionPerformed(derivedEvent); - } - } - - /** - * Implements the action for the JList's keyboard commands. - */ - private class ListAction - extends AbstractAction - { - // TODO: Maybe make a couple of classes out of this bulk Action. - // Form logical groups of Actions when doing this. - - /** - * Creates a new ListAction for the specified command. - * - * @param cmd the actionCommand to set - */ - ListAction(String cmd) - { - putValue(ACTION_COMMAND_KEY, cmd); - } - - public void actionPerformed(ActionEvent e) - { - int lead = list.getLeadSelectionIndex(); - int max = list.getModel().getSize() - 1; - DefaultListSelectionModel selModel - = (DefaultListSelectionModel) list.getSelectionModel(); - String command = e.getActionCommand(); - // Do nothing if list is empty - if (max == -1) - return; - - if (command.equals("selectNextRow")) - { - selectNextIndex(); - } - else if (command.equals("selectPreviousRow")) - { - selectPreviousIndex(); - } - else if (command.equals("clearSelection")) - { - list.clearSelection(); - } - else if (command.equals("selectAll")) - { - list.setSelectionInterval(0, max); - // this next line is to restore the lead selection index to the old - // position, because select-all should not change the lead index - list.addSelectionInterval(lead, lead); - } - else if (command.equals("selectLastRow")) - { - list.setSelectedIndex(list.getModel().getSize() - 1); - } - else if (command.equals("selectLastRowChangeLead")) - { - selModel.moveLeadSelectionIndex(list.getModel().getSize() - 1); - } - else if (command.equals("scrollDownExtendSelection")) - { - int target; - if (lead == list.getLastVisibleIndex()) - { - target = Math.min(max, lead + (list.getLastVisibleIndex() - - list.getFirstVisibleIndex() + 1)); - } - else - target = list.getLastVisibleIndex(); - selModel.setLeadSelectionIndex(target); - } - else if (command.equals("scrollDownChangeLead")) - { - int target; - if (lead == list.getLastVisibleIndex()) - { - target = Math.min(max, lead + (list.getLastVisibleIndex() - - list.getFirstVisibleIndex() + 1)); - } - else - target = list.getLastVisibleIndex(); - selModel.moveLeadSelectionIndex(target); - } - else if (command.equals("scrollUpExtendSelection")) - { - int target; - if (lead == list.getFirstVisibleIndex()) - { - target = Math.max(0, lead - (list.getLastVisibleIndex() - - list.getFirstVisibleIndex() + 1)); - } - else - target = list.getFirstVisibleIndex(); - selModel.setLeadSelectionIndex(target); - } - else if (command.equals("scrollUpChangeLead")) - { - int target; - if (lead == list.getFirstVisibleIndex()) - { - target = Math.max(0, lead - (list.getLastVisibleIndex() - - list.getFirstVisibleIndex() + 1)); - } - else - target = list.getFirstVisibleIndex(); - selModel.moveLeadSelectionIndex(target); - } - else if (command.equals("selectNextRowExtendSelection")) - { - selModel.setLeadSelectionIndex(Math.min(lead + 1, max)); - } - else if (command.equals("selectFirstRow")) - { - list.setSelectedIndex(0); - } - else if (command.equals("selectFirstRowChangeLead")) - { - selModel.moveLeadSelectionIndex(0); - } - else if (command.equals("selectFirstRowExtendSelection")) - { - selModel.setLeadSelectionIndex(0); - } - else if (command.equals("selectPreviousRowExtendSelection")) - { - selModel.setLeadSelectionIndex(Math.max(0, lead - 1)); - } - else if (command.equals("scrollUp")) - { - int target; - if (lead == list.getFirstVisibleIndex()) - { - target = Math.max(0, lead - (list.getLastVisibleIndex() - - list.getFirstVisibleIndex() + 1)); - } - else - target = list.getFirstVisibleIndex(); - list.setSelectedIndex(target); - } - else if (command.equals("selectLastRowExtendSelection")) - { - selModel.setLeadSelectionIndex(list.getModel().getSize() - 1); - } - else if (command.equals("scrollDown")) - { - int target; - if (lead == list.getLastVisibleIndex()) - { - target = Math.min(max, lead + (list.getLastVisibleIndex() - - list.getFirstVisibleIndex() + 1)); - } - else - target = list.getLastVisibleIndex(); - list.setSelectedIndex(target); - } - else if (command.equals("selectNextRowChangeLead")) - { - if (selModel.getSelectionMode() != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) - selectNextIndex(); - else - { - selModel.moveLeadSelectionIndex(Math.min(max, lead + 1)); - } - } - else if (command.equals("selectPreviousRowChangeLead")) - { - if (selModel.getSelectionMode() != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) - selectPreviousIndex(); - else - { - selModel.moveLeadSelectionIndex(Math.max(0, lead - 1)); - } - } - else if (command.equals("addToSelection")) - { - list.addSelectionInterval(lead, lead); - } - else if (command.equals("extendTo")) - { - selModel.setSelectionInterval(selModel.getAnchorSelectionIndex(), - lead); - } - else if (command.equals("toggleAndAnchor")) - { - if (!list.isSelectedIndex(lead)) - list.addSelectionInterval(lead, lead); - else - list.removeSelectionInterval(lead, lead); - selModel.setAnchorSelectionIndex(lead); - } - else - { - // DEBUG: uncomment the following line to print out - // key bindings that aren't implemented yet - - // System.out.println ("not implemented: "+e.getActionCommand()); - } - - list.ensureIndexIsVisible(list.getLeadSelectionIndex()); - } - } - - /** - * A helper class which listens for {@link MouseEvent}s - * from the {@link JList}. - */ - public class MouseInputHandler implements MouseInputListener - { - /** - * Called when a mouse button press/release cycle completes - * on the {@link JList} - * - * @param event The event representing the mouse click - */ - public void mouseClicked(MouseEvent event) - { - Point click = event.getPoint(); - int index = locationToIndex(list, click); - if (index == -1) - return; - if (event.isShiftDown()) - { - if (list.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION) - list.setSelectedIndex(index); - else if (list.getSelectionMode() == - ListSelectionModel.SINGLE_INTERVAL_SELECTION) - // COMPAT: the IBM VM is compatible with the following line of code. - // However, compliance with Sun's VM would correspond to replacing - // getAnchorSelectionIndex() with getLeadSelectionIndex().This is - // both unnatural and contradictory to the way they handle other - // similar UI interactions. - list.setSelectionInterval(list.getAnchorSelectionIndex(), index); - else - // COMPAT: both Sun and IBM are compatible instead with: - // list.setSelectionInterval - // (list.getLeadSelectionIndex(),index); - // Note that for IBM this is contradictory to what they did in - // the above situation for SINGLE_INTERVAL_SELECTION. - // The most natural thing to do is the following: - if (list.isSelectedIndex(list.getAnchorSelectionIndex())) - list.getSelectionModel().setLeadSelectionIndex(index); - else - list.addSelectionInterval(list.getAnchorSelectionIndex(), index); - } - else if (event.isControlDown()) - { - if (list.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION) - list.setSelectedIndex(index); - else if (list.isSelectedIndex(index)) - list.removeSelectionInterval(index, index); - else - list.addSelectionInterval(index, index); - } - else - list.setSelectedIndex(index); - - list.ensureIndexIsVisible(list.getLeadSelectionIndex()); - } - - /** - * Called when a mouse button is pressed down on the - * {@link JList}. - * - * @param event The event representing the mouse press - */ - public void mousePressed(MouseEvent event) - { - // We need to explicitly request focus. - list.requestFocusInWindow(); - } - - /** - * Called when a mouse button is released on - * the {@link JList} - * - * @param event The event representing the mouse press - */ - public void mouseReleased(MouseEvent event) - { - // TODO: What should be done here, if anything? - } - - /** - * Called when the mouse pointer enters the area bounded - * by the {@link JList} - * - * @param event The event representing the mouse entry - */ - public void mouseEntered(MouseEvent event) - { - // TODO: What should be done here, if anything? - } - - /** - * Called when the mouse pointer leaves the area bounded - * by the {@link JList} - * - * @param event The event representing the mouse exit - */ - public void mouseExited(MouseEvent event) - { - // TODO: What should be done here, if anything? - } - - /** - * Called when the mouse pointer moves over the area bounded - * by the {@link JList} while a button is held down. - * - * @param event The event representing the mouse drag - */ - public void mouseDragged(MouseEvent event) - { - Point click = event.getPoint(); - int index = locationToIndex(list, click); - if (index == -1) - return; - if (!event.isShiftDown() && !event.isControlDown()) - list.setSelectedIndex(index); - - list.ensureIndexIsVisible(list.getLeadSelectionIndex()); - } - - /** - * Called when the mouse pointer moves over the area bounded - * by the {@link JList}. - * - * @param event The event representing the mouse move - */ - public void mouseMoved(MouseEvent event) - { - // TODO: What should be done here, if anything? - } - } - - /** - * Helper class which listens to {@link PropertyChangeEvent}s - * from the {@link JList}. - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - /** - * Called when the {@link JList} changes one of its bound properties. - * - * @param e The event representing the property change - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals("model")) - { - if (e.getOldValue() != null && e.getOldValue() instanceof ListModel) - { - ListModel oldModel = (ListModel) e.getOldValue(); - oldModel.removeListDataListener(listDataListener); - } - if (e.getNewValue() != null && e.getNewValue() instanceof ListModel) - { - ListModel newModel = (ListModel) e.getNewValue(); - newModel.addListDataListener(BasicListUI.this.listDataListener); - } - - updateLayoutStateNeeded |= modelChanged; - } - else if (e.getPropertyName().equals("selectionModel")) - updateLayoutStateNeeded |= selectionModelChanged; - else if (e.getPropertyName().equals("font")) - updateLayoutStateNeeded |= fontChanged; - else if (e.getPropertyName().equals("fixedCellWidth")) - updateLayoutStateNeeded |= fixedCellWidthChanged; - else if (e.getPropertyName().equals("fixedCellHeight")) - updateLayoutStateNeeded |= fixedCellHeightChanged; - else if (e.getPropertyName().equals("prototypeCellValue")) - updateLayoutStateNeeded |= prototypeCellValueChanged; - else if (e.getPropertyName().equals("cellRenderer")) - updateLayoutStateNeeded |= cellRendererChanged; - } - } - - /** - * A constant to indicate that the model has changed. - */ - protected static final int modelChanged = 1; - - /** - * A constant to indicate that the selection model has changed. - */ - protected static final int selectionModelChanged = 2; - - /** - * A constant to indicate that the font has changed. - */ - protected static final int fontChanged = 4; - - /** - * A constant to indicate that the fixedCellWidth has changed. - */ - protected static final int fixedCellWidthChanged = 8; - - /** - * A constant to indicate that the fixedCellHeight has changed. - */ - protected static final int fixedCellHeightChanged = 16; - - /** - * A constant to indicate that the prototypeCellValue has changed. - */ - protected static final int prototypeCellValueChanged = 32; - - /** - * A constant to indicate that the cellRenderer has changed. - */ - protected static final int cellRendererChanged = 64; - - /** - * Creates a new BasicListUI for the component. - * - * @param c The component to create a UI for - * - * @return A new UI - */ - public static ComponentUI createUI(final JComponent c) - { - return new BasicListUI(); - } - - /** The current focus listener. */ - protected FocusListener focusListener; - - /** The data listener listening to the model. */ - protected ListDataListener listDataListener; - - /** The selection listener listening to the selection model. */ - protected ListSelectionListener listSelectionListener; - - /** The mouse listener listening to the list. */ - protected MouseInputListener mouseInputListener; - - /** The property change listener listening to the list. */ - protected PropertyChangeListener propertyChangeListener; - - /** Saved reference to the list this UI was created for. */ - protected JList list; - - /** - * The height of a single cell in the list. This field is used when the - * fixedCellHeight property of the list is set. Otherwise this field is - * set to <code>-1</code> and {@link #cellHeights} is used instead. - */ - protected int cellHeight; - - /** The width of a single cell in the list. */ - protected int cellWidth; - - /** - * An array of varying heights of cells in the list, in cases where each - * cell might have a different height. This field is used when the - * <code>fixedCellHeight</code> property of the list is not set. Otherwise - * this field is <code>null</code> and {@link #cellHeight} is used. - */ - protected int[] cellHeights; - - /** - * A bitmask that indicates which properties of the JList have changed. - * When nonzero, indicates that the UI class is out of - * date with respect to the underlying list, and must recalculate the - * list layout before painting or performing size calculations. - * - * @see #modelChanged - * @see #selectionModelChanged - * @see #fontChanged - * @see #fixedCellWidthChanged - * @see #fixedCellHeightChanged - * @see #prototypeCellValueChanged - * @see #cellRendererChanged - */ - protected int updateLayoutStateNeeded; - - /** - * The {@link CellRendererPane} that is used for painting. - */ - protected CellRendererPane rendererPane; - - /** The action bound to KeyStrokes. */ - ListAction action; - - /** - * Calculate the height of a particular row. If there is a fixed {@link - * #cellHeight}, return it; otherwise return the specific row height - * requested from the {@link #cellHeights} array. If the requested row - * is invalid, return <code>-1</code>. - * - * @param row The row to get the height of - * - * @return The height, in pixels, of the specified row - */ - protected int getRowHeight(int row) - { - int height; - if (cellHeights == null) - height = cellHeight; - else - { - if (row < 0 || row >= cellHeights.length) - height = -1; - else - height = cellHeights[row]; - } - return height; - } - - /** - * Calculate the bounds of a particular cell, considering the upper left - * corner of the list as the origin position <code>(0,0)</code>. - * - * @param l Ignored; calculates over <code>this.list</code> - * @param index1 The first row to include in the bounds - * @param index2 The last row to incude in the bounds - * - * @return A rectangle encompassing the range of rows between - * <code>index1</code> and <code>index2</code> inclusive, or null - * such a rectangle couldn't be calculated for the given indexes. - */ - public Rectangle getCellBounds(JList l, int index1, int index2) - { - maybeUpdateLayoutState(); - - if (l != list || cellWidth == -1) - return null; - - int minIndex = Math.min(index1, index2); - int maxIndex = Math.max(index1, index2); - Point loc = indexToLocation(list, minIndex); - - // When the layoutOrientation is VERTICAL, then the width == the list - // width. Otherwise the cellWidth field is used. - int width = cellWidth; - if (l.getLayoutOrientation() == JList.VERTICAL) - width = l.getWidth(); - - Rectangle bounds = new Rectangle(loc.x, loc.y, width, - getCellHeight(minIndex)); - for (int i = minIndex + 1; i <= maxIndex; i++) - { - Point hiLoc = indexToLocation(list, i); - bounds = SwingUtilities.computeUnion(hiLoc.x, hiLoc.y, width, - getCellHeight(i), bounds); - } - - return bounds; - } - - /** - * Calculates the maximum cell height. - * - * @param index the index of the cell - * - * @return the maximum cell height - */ - private int getCellHeight(int index) - { - int height = cellHeight; - if (height <= 0) - { - if (list.getLayoutOrientation() == JList.VERTICAL) - height = getRowHeight(index); - else - { - for (int j = 0; j < cellHeights.length; j++) - height = Math.max(height, cellHeights[j]); - } - } - return height; - } - - /** - * Calculate the Y coordinate of the upper edge of a particular row, - * considering the Y coordinate <code>0</code> to occur at the top of the - * list. - * - * @param row The row to calculate the Y coordinate of - * - * @return The Y coordinate of the specified row, or <code>-1</code> if - * the specified row number is invalid - */ - protected int convertRowToY(int row) - { - int y = 0; - for (int i = 0; i < row; ++i) - { - int h = getRowHeight(i); - if (h == -1) - return -1; - y += h; - } - return y; - } - - /** - * Calculate the row number containing a particular Y coordinate, - * considering the Y coodrinate <code>0</code> to occur at the top of the - * list. - * - * @param y0 The Y coordinate to calculate the row number for - * - * @return The row number containing the specified Y value, or <code>-1</code> - * if the list model is empty - * - * @specnote This method is specified to return -1 for an invalid Y - * coordinate. However, some simple tests show that the behaviour - * is to return the index of the last list element for an Y - * coordinate that lies outside of the list bounds (even for - * negative indices). <code>-1</code> - * is only returned if the list model is empty. - */ - protected int convertYToRow(int y0) - { - if (list.getModel().getSize() == 0) - return -1; - - // When y0 < 0, then the JDK returns the maximum row index of the list. So - // do we. - if (y0 < 0) - return list.getModel().getSize() - 1; - - // Update the layout if necessary. - maybeUpdateLayoutState(); - - int index = list.getModel().getSize() - 1; - - // If a fixed cell height is set, then we can work more efficient. - if (cellHeight > 0) - index = Math.min(y0 / cellHeight, index); - // If we have no fixed cell height, we must add up each cell height up - // to y0. - else - { - int h = 0; - for (int row = 0; row < cellHeights.length; ++row) - { - h += cellHeights[row]; - if (y0 < h) - { - index = row; - break; - } - } - } - return index; - } - - /** - * Recomputes the {@link #cellHeights}, {@link #cellHeight}, and {@link - * #cellWidth} properties by examining the variouis properties of the - * {@link JList}. - */ - protected void updateLayoutState() - { - int nrows = list.getModel().getSize(); - cellHeight = -1; - cellWidth = -1; - if (cellHeights == null || cellHeights.length != nrows) - cellHeights = new int[nrows]; - ListCellRenderer rend = list.getCellRenderer(); - // Update the cellHeight(s) fields. - int fixedCellHeight = list.getFixedCellHeight(); - if (fixedCellHeight > 0) - { - cellHeight = fixedCellHeight; - cellHeights = null; - } - else - { - cellHeight = -1; - for (int i = 0; i < nrows; ++i) - { - Component flyweight = - rend.getListCellRendererComponent(list, - list.getModel().getElementAt(i), - i, list.isSelectedIndex(i), - list.getSelectionModel().getAnchorSelectionIndex() == i); - Dimension dim = flyweight.getPreferredSize(); - cellHeights[i] = dim.height; - } - } - - // Update the cellWidth field. - int fixedCellWidth = list.getFixedCellWidth(); - if (fixedCellWidth > 0) - cellWidth = fixedCellWidth; - else - { - for (int i = 0; i < nrows; ++i) - { - Component flyweight = - rend.getListCellRendererComponent(list, - list.getModel().getElementAt(i), - i, list.isSelectedIndex(i), - list.getSelectionModel().getAnchorSelectionIndex() == i); - Dimension dim = flyweight.getPreferredSize(); - cellWidth = Math.max(cellWidth, dim.width); - } - } - } - - /** - * Calls {@link #updateLayoutState} if {@link #updateLayoutStateNeeded} - * is nonzero, then resets {@link #updateLayoutStateNeeded} to zero. - */ - protected void maybeUpdateLayoutState() - { - if (updateLayoutStateNeeded != 0 || !list.isValid()) - { - updateLayoutState(); - updateLayoutStateNeeded = 0; - } - } - - /** - * Creates a new BasicListUI object. - */ - public BasicListUI() - { - updateLayoutStateNeeded = 1; - rendererPane = new CellRendererPane(); - } - - /** - * Installs various default settings (mostly colors) from the {@link - * UIDefaults} into the {@link JList} - * - * @see #uninstallDefaults - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(list, "List.background", - "List.foreground", "List.font"); - list.setSelectionForeground(UIManager.getColor("List.selectionForeground")); - list.setSelectionBackground(UIManager.getColor("List.selectionBackground")); - list.setOpaque(true); - } - - /** - * Resets to <code>null</code> those defaults which were installed in - * {@link #installDefaults} - */ - protected void uninstallDefaults() - { - list.setForeground(null); - list.setBackground(null); - list.setSelectionForeground(null); - list.setSelectionBackground(null); - } - - /** - * Attaches all the listeners we have in the UI class to the {@link - * JList}, its model and its selection model. - * - * @see #uninstallListeners - */ - protected void installListeners() - { - if (focusListener == null) - focusListener = createFocusListener(); - list.addFocusListener(focusListener); - if (listDataListener == null) - listDataListener = createListDataListener(); - list.getModel().addListDataListener(listDataListener); - if (listSelectionListener == null) - listSelectionListener = createListSelectionListener(); - list.addListSelectionListener(listSelectionListener); - if (mouseInputListener == null) - mouseInputListener = createMouseInputListener(); - list.addMouseListener(mouseInputListener); - list.addMouseMotionListener(mouseInputListener); - if (propertyChangeListener == null) - propertyChangeListener = createPropertyChangeListener(); - list.addPropertyChangeListener(propertyChangeListener); - } - - /** - * Detaches all the listeners we attached in {@link #installListeners}. - */ - protected void uninstallListeners() - { - list.removeFocusListener(focusListener); - list.getModel().removeListDataListener(listDataListener); - list.removeListSelectionListener(listSelectionListener); - list.removeMouseListener(mouseInputListener); - list.removeMouseMotionListener(mouseInputListener); - list.removePropertyChangeListener(propertyChangeListener); - } - - /** - * Installs keyboard actions for this UI in the {@link JList}. - */ - protected void installKeyboardActions() - { - // Install UI InputMap. - InputMap focusInputMap = (InputMap) UIManager.get("List.focusInputMap"); - SwingUtilities.replaceUIInputMap(list, JComponent.WHEN_FOCUSED, - focusInputMap); - - // Install UI ActionMap. - ActionMap am = (ActionMap) UIManager.get("List.actionMap"); - if (am == null) - { - // Create the actionMap once and store it in the current UIDefaults - // for use in other components. - am = new ActionMapUIResource(); - ListAction action; - action = new ListAction("selectPreviousRow"); - am.put("selectPreviousRow", action); - action = new ListAction("selectNextRow"); - am.put("selectNextRow", action); - action = new ListAction("selectPreviousRowExtendSelection"); - am.put("selectPreviousRowExtendSelection", action); - action = new ListAction("selectNextRowExtendSelection"); - am.put("selectNextRowExtendSelection", action); - - action = new ListAction("selectPreviousColumn"); - am.put("selectPreviousColumn", action); - action = new ListAction("selectNextColumn"); - am.put("selectNextColumn", action); - action = new ListAction("selectPreviousColumnExtendSelection"); - am.put("selectPreviousColumnExtendSelection", action); - action = new ListAction("selectNextColumnExtendSelection"); - am.put("selectNextColumnExtendSelection", action); - - action = new ListAction("selectFirstRow"); - am.put("selectFirstRow", action); - action = new ListAction("selectLastRow"); - am.put("selectLastRow", action); - action = new ListAction("selectFirstRowExtendSelection"); - am.put("selectFirstRowExtendSelection", action); - action = new ListAction("selectLastRowExtendSelection"); - am.put("selectLastRowExtendSelection", action); - - action = new ListAction("scrollUp"); - am.put("scrollUp", action); - action = new ListAction("scrollUpExtendSelection"); - am.put("scrollUpExtendSelection", action); - action = new ListAction("scrollDown"); - am.put("scrollDown", action); - action = new ListAction("scrollDownExtendSelection"); - am.put("scrollDownExtendSelection", action); - - action = new ListAction("selectAll"); - am.put("selectAll", action); - action = new ListAction("clearSelection"); - am.put("clearSelection", action); - - am.put("copy", TransferHandler.getCopyAction()); - am.put("cut", TransferHandler.getCutAction()); - am.put("paste", TransferHandler.getPasteAction()); - - UIManager.put("List.actionMap", am); - } - - SwingUtilities.replaceUIActionMap(list, am); - } - - /** - * Uninstalls keyboard actions for this UI in the {@link JList}. - */ - protected void uninstallKeyboardActions() - { - // Uninstall the InputMap. - InputMap im = SwingUtilities.getUIInputMap(list, JComponent.WHEN_FOCUSED); - if (im instanceof UIResource) - SwingUtilities.replaceUIInputMap(list, JComponent.WHEN_FOCUSED, null); - - // Uninstall the ActionMap. - if (SwingUtilities.getUIActionMap(list) instanceof UIResource) - SwingUtilities.replaceUIActionMap(list, null); - } - - /** - * Installs the various aspects of the UI in the {@link JList}. In - * particular, calls {@link #installDefaults}, {@link #installListeners} - * and {@link #installKeyboardActions}. Also saves a reference to the - * provided component, cast to a {@link JList}. - * - * @param c The {@link JList} to install the UI into - */ - public void installUI(final JComponent c) - { - super.installUI(c); - list = (JList) c; - installDefaults(); - installListeners(); - installKeyboardActions(); - maybeUpdateLayoutState(); - } - - /** - * Uninstalls all the aspects of the UI which were installed in {@link - * #installUI}. When finished uninstalling, drops the saved reference to - * the {@link JList}. - * - * @param c Ignored; the UI is uninstalled from the {@link JList} - * reference saved during the call to {@link #installUI} - */ - public void uninstallUI(final JComponent c) - { - uninstallKeyboardActions(); - uninstallListeners(); - uninstallDefaults(); - list = null; - } - - /** - * Gets the size this list would prefer to assume. This is calculated by - * calling {@link #getCellBounds} over the entire list. - * - * @param c Ignored; uses the saved {@link JList} reference - * - * @return DOCUMENT ME! - */ - public Dimension getPreferredSize(JComponent c) - { - maybeUpdateLayoutState(); - int size = list.getModel().getSize(); - int visibleRows = list.getVisibleRowCount(); - int layoutOrientation = list.getLayoutOrientation(); - - int h; - int w; - int maxCellHeight = cellHeight; - if (maxCellHeight <= 0) - { - for (int i = 0; i < cellHeights.length; i++) - maxCellHeight = Math.max(maxCellHeight, cellHeights[i]); - } - if (layoutOrientation == JList.HORIZONTAL_WRAP) - { - if (visibleRows > 0) - { - // We cast to double here to force double divisions. - double modelSize = size; - int neededColumns = (int) Math.ceil(modelSize / visibleRows); - int adjustedRows = (int) Math.ceil(modelSize / neededColumns); - h = maxCellHeight * adjustedRows; - w = cellWidth * neededColumns; - } - else - { - int neededColumns = Math.min(1, list.getWidth() / cellWidth); - h = size / neededColumns * maxCellHeight; - w = neededColumns * cellWidth; - } - } - else if (layoutOrientation == JList.VERTICAL_WRAP) - { - if (visibleRows > 0) - h = visibleRows * maxCellHeight; - else - h = Math.max(list.getHeight(), maxCellHeight); - int neededColumns = h / maxCellHeight; - w = cellWidth * neededColumns; - } - else - { - if (list.getFixedCellWidth() > 0) - w = list.getFixedCellWidth(); - else - w = cellWidth; - if (list.getFixedCellHeight() > 0) - // FIXME: We need to add some cellVerticalMargins here, according - // to the specs. - h = list.getFixedCellHeight() * size; - else - h = maxCellHeight * size; - } - Insets insets = list.getInsets(); - Dimension retVal = new Dimension(w + insets.left + insets.right, - h + insets.top + insets.bottom); - return retVal; - } - - /** - * Paints a single cell in the list. - * - * @param g The graphics context to paint in - * @param row The row number to paint - * @param bounds The bounds of the cell to paint, assuming a coordinate - * system beginning at <code>(0,0)</code> in the upper left corner of the - * list - * @param rend A cell renderer to paint with - * @param data The data to provide to the cell renderer - * @param sel A selection model to provide to the cell renderer - * @param lead The lead selection index of the list - */ - protected void paintCell(Graphics g, int row, Rectangle bounds, - ListCellRenderer rend, ListModel data, - ListSelectionModel sel, int lead) - { - boolean isSel = list.isSelectedIndex(row); - boolean hasFocus = (list.getLeadSelectionIndex() == row) && BasicListUI.this.list.hasFocus(); - Component comp = rend.getListCellRendererComponent(list, - data.getElementAt(row), - row, isSel, hasFocus); - rendererPane.paintComponent(g, comp, list, bounds); - } - - /** - * Paints the list by repeatedly calling {@link #paintCell} for each visible - * cell in the list. - * - * @param g The graphics context to paint with - * @param c Ignored; uses the saved {@link JList} reference - */ - public void paint(Graphics g, JComponent c) - { - int nrows = list.getModel().getSize(); - if (nrows == 0) - return; - - maybeUpdateLayoutState(); - ListCellRenderer render = list.getCellRenderer(); - ListModel model = list.getModel(); - ListSelectionModel sel = list.getSelectionModel(); - int lead = sel.getLeadSelectionIndex(); - Rectangle clip = g.getClipBounds(); - - int startIndex = locationToIndex(list, new Point(clip.x, clip.y)); - int endIndex = locationToIndex(list, new Point(clip.x + clip.width, - clip.y + clip.height)); - - for (int row = startIndex; row <= endIndex; ++row) - { - Rectangle bounds = getCellBounds(list, row, row); - if (bounds != null && bounds.intersects(clip)) - paintCell(g, row, bounds, render, model, sel, lead); - } - } - - /** - * Computes the index of a list cell given a point within the list. If the - * location lies outside the bounds of the list, the greatest index in the - * list model is returned. - * - * @param l the list which on which the computation is based on - * @param location the coordinates - * - * @return the index of the list item that is located at the given - * coordinates or <code>-1</code> if the list model is empty - */ - public int locationToIndex(JList l, Point location) - { - int layoutOrientation = list.getLayoutOrientation(); - int index = -1; - switch (layoutOrientation) - { - case JList.VERTICAL: - index = convertYToRow(location.y); - break; - case JList.HORIZONTAL_WRAP: - // determine visible rows and cells per row - int maxCellHeight = getCellHeight(0); - int visibleRows = list.getHeight() / maxCellHeight; - int cellsPerRow = -1; - int numberOfItems = list.getModel().getSize(); - cellsPerRow = numberOfItems / visibleRows + 1; - - // determine index for the given location - int cellsPerColumn = numberOfItems / cellsPerRow + 1; - int gridX = Math.min(location.x / cellWidth, cellsPerRow - 1); - int gridY = Math.min(location.y / maxCellHeight, cellsPerColumn); - index = gridX + gridY * cellsPerRow; - break; - case JList.VERTICAL_WRAP: - // determine visible rows and cells per column - int maxCellHeight2 = getCellHeight(0); - int visibleRows2 = list.getHeight() / maxCellHeight2; - int numberOfItems2 = list.getModel().getSize(); - int cellsPerRow2 = numberOfItems2 / visibleRows2 + 1; - - int gridX2 = Math.min(location.x / cellWidth, cellsPerRow2 - 1); - int gridY2 = Math.min(location.y / maxCellHeight2, visibleRows2); - index = gridY2 + gridX2 * visibleRows2; - break; - } - return index; - } - - public Point indexToLocation(JList l, int index) - { - int layoutOrientation = list.getLayoutOrientation(); - Point loc = null; - switch (layoutOrientation) - { - case JList.VERTICAL: - loc = new Point(0, convertRowToY(index)); - break; - case JList.HORIZONTAL_WRAP: - // determine visible rows and cells per row - int maxCellHeight = getCellHeight(0); - int visibleRows = list.getHeight() / maxCellHeight; - int numberOfCellsPerRow = -1; - int numberOfItems = list.getModel().getSize(); - numberOfCellsPerRow = numberOfItems / visibleRows + 1; - - // compute coordinates inside the grid - int gridX = index % numberOfCellsPerRow; - int gridY = index / numberOfCellsPerRow; - int locX = gridX * cellWidth; - int locY; - locY = gridY * maxCellHeight; - loc = new Point(locX, locY); - break; - case JList.VERTICAL_WRAP: - // determine visible rows and cells per column - int maxCellHeight2 = getCellHeight(0); - int visibleRows2 = list.getHeight() / maxCellHeight2; - // compute coordinates inside the grid - if (visibleRows2 > 0) - { - int gridY2 = index % visibleRows2; - int gridX2 = index / visibleRows2; - int locX2 = gridX2 * cellWidth; - int locY2 = gridY2 * maxCellHeight2; - loc = new Point(locX2, locY2); - } - else - loc = new Point(0, convertRowToY(index)); - break; - } - return loc; - } - - /** - * Creates and returns the focus listener for this UI. - * - * @return the focus listener for this UI - */ - protected FocusListener createFocusListener() - { - return new FocusHandler(); - } - - /** - * Creates and returns the list data listener for this UI. - * - * @return the list data listener for this UI - */ - protected ListDataListener createListDataListener() - { - return new ListDataHandler(); - } - - /** - * Creates and returns the list selection listener for this UI. - * - * @return the list selection listener for this UI - */ - protected ListSelectionListener createListSelectionListener() - { - return new ListSelectionHandler(); - } - - /** - * Creates and returns the mouse input listener for this UI. - * - * @return the mouse input listener for this UI - */ - protected MouseInputListener createMouseInputListener() - { - return new MouseInputHandler(); - } - - /** - * Creates and returns the property change listener for this UI. - * - * @return the property change listener for this UI - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * Selects the next list item and force it to be visible. - */ - protected void selectNextIndex() - { - int index = list.getSelectionModel().getLeadSelectionIndex(); - if (index < list.getModel().getSize() - 1) - { - index++; - list.setSelectedIndex(index); - } - list.ensureIndexIsVisible(index); - } - - /** - * Selects the previous list item and force it to be visible. - */ - protected void selectPreviousIndex() - { - int index = list.getSelectionModel().getLeadSelectionIndex(); - if (index > 0) - { - index--; - list.setSelectedIndex(index); - } - list.ensureIndexIsVisible(index); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java b/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java deleted file mode 100644 index 9a1f544..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java +++ /dev/null @@ -1,1734 +0,0 @@ -/* BasicLookAndFeel.java -- - Copyright (C) 2002, 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.AWTEvent; -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.SystemColor; -import java.awt.Toolkit; -import java.awt.event.AWTEventListener; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.util.Enumeration; -import java.util.ResourceBundle; - -import javax.sound.sampled.AudioInputStream; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.Clip; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.UnsupportedAudioFileException; -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.MenuSelectionManager; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.border.BevelBorder; -import javax.swing.border.Border; -import javax.swing.plaf.BorderUIResource; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.DimensionUIResource; -import javax.swing.plaf.FontUIResource; -import javax.swing.plaf.IconUIResource; -import javax.swing.plaf.InsetsUIResource; - -/** - * A basic implementation of Swing's Look and Feel framework. This can serve - * as a base for custom look and feel implementations. - * - * @author Andrew Selkirk - */ -public abstract class BasicLookAndFeel extends LookAndFeel - implements Serializable -{ - - /** - * Helps closing menu popups when the user clicks outside of any menu area. - * This is implemented as an AWTEventListener that listens on the event - * queue directly, grabs all mouse events from there and finds out of they - * are targetted at a menu/submenu/menubar or not. If not, - * the MenuSelectionManager is messaged to close the currently opened menus, - * if any. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class PopupHelper implements AWTEventListener - { - - /** - * Receives an event from the event queue. - * - * @param event - */ - public void eventDispatched(AWTEvent event) - { - if (event instanceof MouseEvent) - { - MouseEvent mouseEvent = (MouseEvent) event; - if (mouseEvent.getID() == MouseEvent.MOUSE_PRESSED) - mousePressed(mouseEvent); - } - } - - /** - * Handles mouse pressed events from the event queue. - * - * @param ev the mouse pressed event - */ - private void mousePressed(MouseEvent ev) - { - // Autoclose all menus managed by the MenuSelectionManager. - MenuSelectionManager m = MenuSelectionManager.defaultManager(); - Component target = ev.getComponent(); - if (target instanceof Container) - target = ((Container) target).findComponentAt(ev.getPoint()); - if (m.getSelectedPath().length > 0 - && ! m.isComponentPartOfCurrentMenu(target) - && (((JComponent)target).getClientProperty(DONT_CANCEL_POPUP) == null - || !((JComponent)target).getClientProperty(DONT_CANCEL_POPUP).equals(Boolean.TRUE))) - { - m.clearSelectedPath(); - } - } - - } - - /** - * An action that can play an audio file. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class AudioAction extends AbstractAction - { - /** - * The UIDefaults key that specifies the sound. - */ - Object key; - - /** - * Creates a new AudioAction. - * - * @param key the key that describes the audio action, normally a filename - * of an audio file relative to the current package - */ - AudioAction(Object key) - { - this.key = key; - } - - /** - * Plays the sound represented by this action. - * - * @param event the action event that triggers this audio action - */ - public void actionPerformed(ActionEvent event) - { - // We only can handle strings for now. - if (key instanceof String) - { - String name = UIManager.getString(key); - InputStream stream = getClass().getResourceAsStream(name); - try - { - Clip clip = AudioSystem.getClip(); - AudioInputStream audioStream = - AudioSystem.getAudioInputStream(stream); - clip.open(audioStream); - } - catch (LineUnavailableException ex) - { - // Nothing we can do about it. - } - catch (IOException ex) - { - // Nothing we can do about it. - } - catch (UnsupportedAudioFileException e) - { - // Nothing we can do about it. - } - } - } - } - - static final long serialVersionUID = -6096995660290287879L; - - /** - * This is a key for a client property that tells the PopupHelper that - * it shouldn't close popups when the mouse event target has this - * property set. This is used when the component handles popup closing - * itself. - */ - static final String DONT_CANCEL_POPUP = "noCancelPopup"; - - /** - * Helps closing menu popups when user clicks outside of the menu area. - */ - private transient PopupHelper popupHelper; - - /** - * Maps the audio actions for this l&f. - */ - private ActionMap audioActionMap; - - /** - * Creates a new instance of the Basic look and feel. - */ - public BasicLookAndFeel() - { - // Nothing to do here. - } - - /** - * Creates and returns a new instance of the default resources for this look - * and feel. - * - * @return The UI defaults. - */ - public UIDefaults getDefaults() - { - // Variables - UIDefaults def = new UIDefaults(); - // Initialize Class Defaults - initClassDefaults(def); - // Initialize System Colour Defaults - initSystemColorDefaults(def); - // Initialize Component Defaults - initComponentDefaults(def); - // Return UI Defaults - return def; - } - - /** - * Populates the <code>defaults</code> table with mappings between class IDs - * and fully qualified class names for the UI delegates. - * - * @param defaults the defaults table (<code>null</code> not permitted). - */ - protected void initClassDefaults(UIDefaults defaults) - { - // Variables - Object[] uiDefaults; - // Initialize Class Defaults - uiDefaults = new Object[] { - "ButtonUI", "javax.swing.plaf.basic.BasicButtonUI", - "CheckBoxMenuItemUI", "javax.swing.plaf.basic.BasicCheckBoxMenuItemUI", - "CheckBoxUI", "javax.swing.plaf.basic.BasicCheckBoxUI", - "ColorChooserUI", "javax.swing.plaf.basic.BasicColorChooserUI", - "ComboBoxUI", "javax.swing.plaf.basic.BasicComboBoxUI", - "DesktopIconUI", "javax.swing.plaf.basic.BasicDesktopIconUI", - "DesktopPaneUI", "javax.swing.plaf.basic.BasicDesktopPaneUI", - "EditorPaneUI", "javax.swing.plaf.basic.BasicEditorPaneUI", - "FileChooserUI", "javax.swing.plaf.basic.BasicFileChooserUI", - "FormattedTextFieldUI", "javax.swing.plaf.basic.BasicFormattedTextFieldUI", - "InternalFrameUI", "javax.swing.plaf.basic.BasicInternalFrameUI", - "LabelUI", "javax.swing.plaf.basic.BasicLabelUI", - "ListUI", "javax.swing.plaf.basic.BasicListUI", - "MenuBarUI", "javax.swing.plaf.basic.BasicMenuBarUI", - "MenuItemUI", "javax.swing.plaf.basic.BasicMenuItemUI", - "MenuUI", "javax.swing.plaf.basic.BasicMenuUI", - "OptionPaneUI", "javax.swing.plaf.basic.BasicOptionPaneUI", - "PanelUI", "javax.swing.plaf.basic.BasicPanelUI", - "PasswordFieldUI", "javax.swing.plaf.basic.BasicPasswordFieldUI", - "PopupMenuSeparatorUI", "javax.swing.plaf.basic.BasicPopupMenuSeparatorUI", - "PopupMenuUI", "javax.swing.plaf.basic.BasicPopupMenuUI", - "ProgressBarUI", "javax.swing.plaf.basic.BasicProgressBarUI", - "RadioButtonMenuItemUI", "javax.swing.plaf.basic.BasicRadioButtonMenuItemUI", - "RadioButtonUI", "javax.swing.plaf.basic.BasicRadioButtonUI", - "RootPaneUI", "javax.swing.plaf.basic.BasicRootPaneUI", - "ScrollBarUI", "javax.swing.plaf.basic.BasicScrollBarUI", - "ScrollPaneUI", "javax.swing.plaf.basic.BasicScrollPaneUI", - "SeparatorUI", "javax.swing.plaf.basic.BasicSeparatorUI", - "SliderUI", "javax.swing.plaf.basic.BasicSliderUI", - "SplitPaneUI", "javax.swing.plaf.basic.BasicSplitPaneUI", - "SpinnerUI", "javax.swing.plaf.basic.BasicSpinnerUI", - "StandardDialogUI", "javax.swing.plaf.basic.BasicStandardDialogUI", - "TabbedPaneUI", "javax.swing.plaf.basic.BasicTabbedPaneUI", - "TableHeaderUI", "javax.swing.plaf.basic.BasicTableHeaderUI", - "TableUI", "javax.swing.plaf.basic.BasicTableUI", - "TextPaneUI", "javax.swing.plaf.basic.BasicTextPaneUI", - "TextAreaUI", "javax.swing.plaf.basic.BasicTextAreaUI", - "TextFieldUI", "javax.swing.plaf.basic.BasicTextFieldUI", - "ToggleButtonUI", "javax.swing.plaf.basic.BasicToggleButtonUI", - "ToolBarSeparatorUI", "javax.swing.plaf.basic.BasicToolBarSeparatorUI", - "ToolBarUI", "javax.swing.plaf.basic.BasicToolBarUI", - "ToolTipUI", "javax.swing.plaf.basic.BasicToolTipUI", - "TreeUI", "javax.swing.plaf.basic.BasicTreeUI", - "ViewportUI", "javax.swing.plaf.basic.BasicViewportUI" - }; - // Add Class Defaults to UI Defaults table - defaults.putDefaults(uiDefaults); - } - - /** - * Populates the <code>defaults</code> table with system color defaults. - * - * This sets up a couple of default values and passes them to - * {@link #loadSystemColors(UIDefaults, String[], boolean)}. If the - * look and feel is a native look and feel, these defaults may be overridden - * by the corresponding SystemColor constants. - * - * @param defaults the defaults table (<code>null</code> not permitted). - */ - protected void initSystemColorDefaults(UIDefaults defaults) - { - String[] defaultColors = new String[] { - "activeCaption", "#000080", - "activeCaptionBorder", "#C0C0C0", - "activeCaptionText", "#FFFFFF", - "control", "#C0C0C0", - "controlDkShadow", "#000000", - "controlHighlight", "#C0C0C0", - "controlLtHighlight", "#FFFFFF", - "controlShadow", "#808080", - "controlText", "#000000", - "desktop", "#005C5C", - "inactiveCaption", "#808080", - "inactiveCaptionBorder", "#C0C0C0", - "inactiveCaptionText", "#C0C0C0", - "info", "#FFFFE1", - "infoText", "#000000", - "menu", "#C0C0C0", - "menuText", "#000000", - "scrollbar", "#E0E0E0", - "text", "#C0C0C0", - "textHighlight", "#000080", - "textHighlightText", "#FFFFFF", - "textInactiveText", "#808080", - "textText", "#000000", - "window", "#FFFFFF", - "windowBorder", "#000000", - "windowText", "#000000" - }; - loadSystemColors(defaults, defaultColors, isNativeLookAndFeel()); - } - - /** - * Populates the <code>defaults</code> table with the system colors. If - * <code>useNative</code> is <code>true</code>, the table is populated - * with the constants in {@link SystemColor}, otherwise the - * <code>systemColors</code> parameter is decoded into the defaults table. - * The system colors array is made up of pairs, where the first entry is the - * name of the system color, and the second entry is a string denoting - * an RGB color value like "#C0C0C0", which is decoded using - * {@link Color#decode(String)}. - * - * @param defaults the defaults table (<code>null</code> not permitted). - * @param systemColors defaults to use when <code>useNative</code> is - * <code>false</code> - * @param useNative when <code>true</code>, installs the values of the - * SystemColor constants, when <code>false</code>, install the values - * from <code>systemColors</code> - */ - protected void loadSystemColors(UIDefaults defaults, String[] systemColors, - boolean useNative) - { - if (useNative) - { - defaults.put("activeCaption", - new ColorUIResource(SystemColor.ACTIVE_CAPTION)); - defaults.put("activeCaptionBorder", - new ColorUIResource(SystemColor.ACTIVE_CAPTION_BORDER)); - defaults.put("activeCaptionText", - new ColorUIResource(SystemColor.ACTIVE_CAPTION_TEXT)); - defaults.put("control", - new ColorUIResource(SystemColor.CONTROL)); - defaults.put("controlDkShadow", - new ColorUIResource(SystemColor.CONTROL_DK_SHADOW)); - defaults.put("controlHighlight", - new ColorUIResource(SystemColor.CONTROL_HIGHLIGHT)); - defaults.put("controlLtHighlight", - new ColorUIResource(SystemColor.CONTROL_LT_HIGHLIGHT)); - defaults.put("controlShadow", - new ColorUIResource(SystemColor.CONTROL_SHADOW)); - defaults.put("controlText", - new ColorUIResource(SystemColor.CONTROL_TEXT)); - defaults.put("desktop", - new ColorUIResource(SystemColor.DESKTOP)); - defaults.put("inactiveCaption", - new ColorUIResource(SystemColor.INACTIVE_CAPTION)); - defaults.put("inactiveCaptionBorder", - new ColorUIResource(SystemColor.INACTIVE_CAPTION_BORDER)); - defaults.put("inactiveCaptionText", - new ColorUIResource(SystemColor.INACTIVE_CAPTION_TEXT)); - defaults.put("info", - new ColorUIResource(SystemColor.INFO)); - defaults.put("infoText", - new ColorUIResource(SystemColor.INFO_TEXT)); - defaults.put("menu", - new ColorUIResource(SystemColor.MENU)); - defaults.put("menuText", - new ColorUIResource(SystemColor.MENU_TEXT)); - defaults.put("scrollbar", - new ColorUIResource(SystemColor.SCROLLBAR)); - defaults.put("text", - new ColorUIResource(SystemColor.TEXT)); - defaults.put("textHighlight", - new ColorUIResource(SystemColor.TEXT_HIGHLIGHT)); - defaults.put("textHighlightText", - new ColorUIResource(SystemColor.TEXT_HIGHLIGHT_TEXT)); - defaults.put("textInactiveText", - new ColorUIResource(SystemColor.TEXT_INACTIVE_TEXT)); - defaults.put("textText", - new ColorUIResource(SystemColor.TEXT_TEXT)); - defaults.put("window", - new ColorUIResource(SystemColor.WINDOW)); - defaults.put("windowBorder", - new ColorUIResource(SystemColor.WINDOW_BORDER)); - defaults.put("windowText", - new ColorUIResource(SystemColor.WINDOW_TEXT)); - } - else - { - for (int i = 0; i < systemColors.length; i += 2) - { - Color color = Color.BLACK; - try - { - color = Color.decode(systemColors[i + 1]); - } - catch (NumberFormatException e) - { - e.printStackTrace(); - } - defaults.put(systemColors[i], new ColorUIResource(color)); - } - } - } - - /** - * Loads the resource bundle in 'resources/basic' and adds the contained - * key/value pairs to the <code>defaults</code> table. - * - * @param defaults the UI defaults to load the resources into - */ - // FIXME: This method is not used atm and private and thus could be removed. - // However, I consider this method useful for providing localized - // descriptions and similar stuff and therefore think that we should use it - // instead and provide the resource bundles. - private void loadResourceBundle(UIDefaults defaults) - { - ResourceBundle bundle; - Enumeration e; - String key; - String value; - bundle = ResourceBundle.getBundle("resources/basic"); - // Process Resources - e = bundle.getKeys(); - while (e.hasMoreElements()) - { - key = (String) e.nextElement(); - value = bundle.getString(key); - defaults.put(key, value); - } - } - - /** - * Populates the <code>defaults</code> table with UI default values for - * colors, fonts, keybindings and much more. - * - * @param defaults the defaults table (<code>null</code> not permitted). - */ - protected void initComponentDefaults(UIDefaults defaults) - { - Object[] uiDefaults; - - Color highLight = new Color(249, 247, 246); - Color light = new Color(239, 235, 231); - Color shadow = new Color(139, 136, 134); - Color darkShadow = new Color(16, 16, 16); - - uiDefaults = new Object[] { - - "AbstractUndoableEdit.undoText", "Undo", - "AbstractUndoableEdit.redoText", "Redo", - "Button.background", new ColorUIResource(Color.LIGHT_GRAY), - "Button.border", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults table) - { - return BasicBorders.getButtonBorder(); - } - }, - "Button.darkShadow", new ColorUIResource(Color.BLACK), - "Button.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Button.foreground", new ColorUIResource(Color.BLACK), - "Button.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("SPACE"), "pressed", - KeyStroke.getKeyStroke("released SPACE"), "released" - }), - "Button.highlight", new ColorUIResource(Color.WHITE), - "Button.light", new ColorUIResource(Color.LIGHT_GRAY), - "Button.margin", new InsetsUIResource(2, 14, 2, 14), - "Button.shadow", new ColorUIResource(Color.GRAY), - "Button.textIconGap", new Integer(4), - "Button.textShiftOffset", new Integer(0), - "CheckBox.background", new ColorUIResource(new Color(204, 204, 204)), - "CheckBox.border", new BorderUIResource.CompoundBorderUIResource(null, - null), - "CheckBox.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("SPACE"), "pressed", - KeyStroke.getKeyStroke("released SPACE"), "released" - }), - "CheckBox.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "CheckBox.foreground", new ColorUIResource(darkShadow), - "CheckBox.icon", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults def) - { - return BasicIconFactory.getCheckBoxIcon(); - } - }, - "CheckBox.checkIcon", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults def) - { - return BasicIconFactory.getMenuItemCheckIcon(); - } - }, - "CheckBox.margin", new InsetsUIResource(2, 2, 2, 2), - "CheckBox.textIconGap", new Integer(4), - "CheckBox.textShiftOffset", new Integer(0), - "CheckBoxMenuItem.acceleratorFont", new FontUIResource("Dialog", - Font.PLAIN, 12), - "CheckBoxMenuItem.acceleratorForeground", - new ColorUIResource(new Color(16, 16, 16)), - "CheckBoxMenuItem.acceleratorSelectionForeground", - new ColorUIResource(Color.white), - "CheckBoxMenuItem.arrowIcon", BasicIconFactory.getMenuItemArrowIcon(), - "CheckBoxMenuItem.background", new ColorUIResource(light), - "CheckBoxMenuItem.border", new BasicBorders.MarginBorder(), - "CheckBoxMenuItem.borderPainted", Boolean.FALSE, - "CheckBoxMenuItem.checkIcon", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults def) - { - return BasicIconFactory.getCheckBoxMenuItemIcon(); - } - }, - "CheckBoxMenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "CheckBoxMenuItem.foreground", new ColorUIResource(darkShadow), - "CheckBoxMenuItem.margin", new InsetsUIResource(2, 2, 2, 2), - "CheckBoxMenuItem.selectionBackground", new ColorUIResource(Color.black), - "CheckBoxMenuItem.selectionForeground", new ColorUIResource(Color.white), - "ColorChooser.background", new ColorUIResource(light), - "ColorChooser.cancelText", "Cancel", - "ColorChooser.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "ColorChooser.foreground", new ColorUIResource(darkShadow), - "ColorChooser.hsbBlueText", "B", - "ColorChooser.hsbBrightnessText", "B", - "ColorChooser.hsbGreenText", "G", - "ColorChooser.hsbHueText", "H", - "ColorChooser.hsbNameText", "HSB", - "ColorChooser.hsbRedText", "R", - "ColorChooser.hsbSaturationText", "S", - "ColorChooser.okText", "OK", - "ColorChooser.previewText", "Preview", - "ColorChooser.resetText", "Reset", - "ColorChooser.rgbBlueMnemonic", "66", - "ColorChooser.rgbBlueText", "Blue", - "ColorChooser.rgbGreenMnemonic", "78", - "ColorChooser.rgbGreenText", "Green", - "ColorChooser.rgbNameText", "RGB", - "ColorChooser.rgbRedMnemonic", "68", - "ColorChooser.rgbRedText", "Red", - "ColorChooser.sampleText", "Sample Text Sample Text", - "ColorChooser.swatchesDefaultRecentColor", new ColorUIResource(light), - "ColorChooser.swatchesNameText", "Swatches", - "ColorChooser.swatchesRecentSwatchSize", new Dimension(10, 10), - "ColorChooser.swatchesRecentText", "Recent:", - "ColorChooser.swatchesSwatchSize", new Dimension(10, 10), - "ComboBox.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "ESCAPE", "hidePopup", - "PAGE_UP", "pageUpPassThrough", - "PAGE_DOWN", "pageDownPassThrough", - "HOME", "homePassThrough", - "END", "endPassThrough" - }), - "ComboBox.background", new ColorUIResource(Color.white), - "ComboBox.buttonBackground", new ColorUIResource(light), - "ComboBox.buttonDarkShadow", new ColorUIResource(darkShadow), - "ComboBox.buttonHighlight", new ColorUIResource(highLight), - "ComboBox.buttonShadow", new ColorUIResource(shadow), - "ComboBox.disabledBackground", new ColorUIResource(light), - "ComboBox.disabledForeground", new ColorUIResource(Color.gray), - "ComboBox.font", new FontUIResource("SansSerif", Font.PLAIN, 12), - "ComboBox.foreground", new ColorUIResource(Color.black), - "ComboBox.selectionBackground", new ColorUIResource(0, 0, 128), - "ComboBox.selectionForeground", new ColorUIResource(Color.white), - "Desktop.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "KP_LEFT", "left", - "KP_RIGHT", "right", - "ctrl F5", "restore", - "LEFT", "left", - "ctrl alt F6", "selectNextFrame", - "UP", "up", - "ctrl F6", "selectNextFrame", - "RIGHT", "right", - "DOWN", "down", - "ctrl F7", "move", - "ctrl F8", "resize", - "ESCAPE", "escape", - "ctrl TAB", "selectNextFrame", - "ctrl F9", "minimize", - "KP_UP", "up", - "ctrl F4", "close", - "KP_DOWN", "down", - "ctrl F10", "maximize", - "ctrl alt shift F6", "selectPreviousFrame" - }), - "DesktopIcon.border", new BorderUIResource.CompoundBorderUIResource(null, - null), - "EditorPane.background", new ColorUIResource(Color.white), - "EditorPane.border", BasicBorders.getMarginBorder(), - "EditorPane.caretBlinkRate", new Integer(500), - "EditorPane.caretForeground", new ColorUIResource(Color.black), - "EditorPane.font", new FontUIResource("Serif", Font.PLAIN, 12), - "EditorPane.foreground", new ColorUIResource(Color.black), - "EditorPane.inactiveForeground", new ColorUIResource(Color.gray), - "EditorPane.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("shift UP"), "selection-up", - KeyStroke.getKeyStroke("ctrl RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("shift KP_UP"), "selection-up", - KeyStroke.getKeyStroke("DOWN"), "caret-down", - KeyStroke.getKeyStroke("shift ctrl T"), "previous-link-action", - KeyStroke.getKeyStroke("ctrl LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("CUT"), "cut-to-clipboard", - KeyStroke.getKeyStroke("END"), "caret-end-line", - KeyStroke.getKeyStroke("shift PAGE_UP"), "selection-page-up", - KeyStroke.getKeyStroke("KP_UP"), "caret-up", - KeyStroke.getKeyStroke("DELETE"), "delete-next", - KeyStroke.getKeyStroke("ctrl HOME"), "caret-begin", - KeyStroke.getKeyStroke("shift LEFT"), "selection-backward", - KeyStroke.getKeyStroke("ctrl END"), "caret-end", - KeyStroke.getKeyStroke("BACK_SPACE"), "delete-previous", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("LEFT"), "caret-backward", - KeyStroke.getKeyStroke("KP_LEFT"), "caret-backward", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("ctrl SPACE"), "activate-link-action", - KeyStroke.getKeyStroke("ctrl H"), "delete-previous", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "unselect", - KeyStroke.getKeyStroke("ENTER"), "insert-break", - KeyStroke.getKeyStroke("shift HOME"), "selection-begin-line", - KeyStroke.getKeyStroke("RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl PAGE_UP"), "selection-page-left", - KeyStroke.getKeyStroke("shift DOWN"), "selection-down", - KeyStroke.getKeyStroke("PAGE_DOWN"), "page-down", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selection-backward", - KeyStroke.getKeyStroke("shift ctrl O"), "toggle-componentOrientation", - KeyStroke.getKeyStroke("ctrl X"), "cut-to-clipboard", - KeyStroke.getKeyStroke("shift ctrl PAGE_DOWN"), "selection-page-right", - KeyStroke.getKeyStroke("ctrl C"), "copy-to-clipboard", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("shift END"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("HOME"), "caret-begin-line", - KeyStroke.getKeyStroke("ctrl V"), "paste-from-clipboard", - KeyStroke.getKeyStroke("KP_DOWN"), "caret-down", - KeyStroke.getKeyStroke("ctrl A"), "select-all", - KeyStroke.getKeyStroke("shift RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("shift ctrl END"), "selection-end", - KeyStroke.getKeyStroke("COPY"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("ctrl T"), "next-link-action", - KeyStroke.getKeyStroke("shift KP_DOWN"), "selection-down", - KeyStroke.getKeyStroke("TAB"), "insert-tab", - KeyStroke.getKeyStroke("UP"), "caret-up", - KeyStroke.getKeyStroke("shift ctrl HOME"), "selection-begin", - KeyStroke.getKeyStroke("shift PAGE_DOWN"), "selection-page-down", - KeyStroke.getKeyStroke("KP_RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("PAGE_UP"), "page-up", - KeyStroke.getKeyStroke("PASTE"), "paste-from-clipboard" - }), - "EditorPane.margin", new InsetsUIResource(3, 3, 3, 3), - "EditorPane.selectionBackground", new ColorUIResource(Color.black), - "EditorPane.selectionForeground", new ColorUIResource(Color.white), - "FileChooser.acceptAllFileFilterText", "All Files (*.*)", - "FileChooser.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "ESCAPE", "cancelSelection" - }), - "FileChooser.cancelButtonMnemonic", "67", - "FileChooser.cancelButtonText", "Cancel", - "FileChooser.cancelButtonToolTipText", "Abort file chooser dialog", - "FileChooser.directoryDescriptionText", "Directory", - "FileChooser.fileDescriptionText", "Generic File", - "FileChooser.directoryOpenButtonMnemonic", "79", - "FileChooser.helpButtonMnemonic", "72", - "FileChooser.helpButtonText", "Help", - "FileChooser.helpButtonToolTipText", "FileChooser help", - "FileChooser.newFolderErrorSeparator", ":", - "FileChooser.newFolderErrorText", "Error creating new folder", - "FileChooser.openButtonMnemonic", "79", - "FileChooser.openButtonText", "Open", - "FileChooser.openButtonToolTipText", "Open selected file", - "FileChooser.saveButtonMnemonic", "83", - "FileChooser.saveButtonText", "Save", - "FileChooser.saveButtonToolTipText", "Save selected file", - "FileChooser.updateButtonMnemonic", "85", - "FileChooser.updateButtonText", "Update", - "FileChooser.updateButtonToolTipText", "Update directory listing", - "FocusManagerClassName", "TODO", - "FormattedTextField.background", new ColorUIResource(light), - "FormattedTextField.caretForeground", new ColorUIResource(Color.black), - "FormattedTextField.margin", new InsetsUIResource(0, 0, 0, 0), - "FormattedTextField.caretBlinkRate", new Integer(500), - "FormattedTextField.font", - new FontUIResource("SansSerif", Font.PLAIN, 12), - "FormattedTextField.foreground", new ColorUIResource(Color.black), - "FormattedTextField.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("KP_UP"), "increment", - KeyStroke.getKeyStroke("END"), "caret-end-line", - KeyStroke.getKeyStroke("shift ctrl O"), "toggle-componentOrientation", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selection-backward", - KeyStroke.getKeyStroke("shift RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("KP_DOWN"), "decrement", - KeyStroke.getKeyStroke("HOME"), "caret-begin-line", - KeyStroke.getKeyStroke("ctrl V"), "paste-from-clipboard", - KeyStroke.getKeyStroke("ctrl H"), "delete-previous", - KeyStroke.getKeyStroke("KP_LEFT"), "caret-backward", - KeyStroke.getKeyStroke("LEFT"), "caret-backward", - KeyStroke.getKeyStroke("ctrl X"), "cut-to-clipboard", - KeyStroke.getKeyStroke("KP_RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("UP"), "increment", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("COPY"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift HOME"), "selection-begin-line", - KeyStroke.getKeyStroke("ESCAPE"), "reset-field-edit", - KeyStroke.getKeyStroke("RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("DOWN"), "decrement", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("PASTE"), "paste-from-clipboard", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "unselect", - KeyStroke.getKeyStroke("ctrl A"), "select-all", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("CUT"), "cut-to-clipboard", - KeyStroke.getKeyStroke("ctrl LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("BACK_SPACE"), "delete-previous", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("ctrl C"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift END"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("DELETE"), "delete-next", - KeyStroke.getKeyStroke("ENTER"), "notify-field-accept", - KeyStroke.getKeyStroke("shift LEFT"), "selection-backward" - }), - "FormattedTextField.inactiveBackground", new ColorUIResource(light), - "FormattedTextField.inactiveForeground", new ColorUIResource(Color.gray), - "FormattedTextField.selectionBackground", - new ColorUIResource(Color.black), - "FormattedTextField.selectionForeground", - new ColorUIResource(Color.white), - "FormView.resetButtonText", "Reset", - "FormView.submitButtonText", "Submit Query", - "InternalFrame.activeTitleBackground", new ColorUIResource(0, 0, 128), - "InternalFrame.activeTitleForeground", new ColorUIResource(Color.white), - "InternalFrame.border", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults table) - { - Color lineColor = new Color(238, 238, 238); - Border inner = BorderFactory.createLineBorder(lineColor, 1); - Color shadowInner = new Color(184, 207, 229); - Color shadowOuter = new Color(122, 138, 153); - Border outer = BorderFactory.createBevelBorder(BevelBorder.RAISED, - Color.WHITE, - Color.WHITE, - shadowOuter, - shadowInner); - Border border = new BorderUIResource.CompoundBorderUIResource(outer, - inner); - return border; - } - }, - "InternalFrame.borderColor", new ColorUIResource(light), - "InternalFrame.borderDarkShadow", new ColorUIResource(Color.BLACK), - "InternalFrame.borderHighlight", new ColorUIResource(Color.WHITE), - "InternalFrame.borderLight", new ColorUIResource(Color.LIGHT_GRAY), - "InternalFrame.borderShadow", new ColorUIResource(Color.GRAY), - "InternalFrame.closeIcon", BasicIconFactory.createEmptyFrameIcon(), - "InternalFrame.icon", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults def) - { - return new IconUIResource(BasicIconFactory.createEmptyFrameIcon()); - } - }, - "InternalFrame.iconifyIcon", BasicIconFactory.createEmptyFrameIcon(), - "InternalFrame.inactiveTitleBackground", new ColorUIResource(Color.gray), - "InternalFrame.inactiveTitleForeground", - new ColorUIResource(Color.lightGray), - "InternalFrame.maximizeIcon", BasicIconFactory.createEmptyFrameIcon(), - "InternalFrame.minimizeIcon", BasicIconFactory.createEmptyFrameIcon(), - "InternalFrame.titleFont", new FontUIResource("Dialog", Font.BOLD, 12), - "InternalFrame.windowBindings", new Object[] { - "shift ESCAPE", "showSystemMenu", - "ctrl SPACE", "showSystemMenu", - "ESCAPE", "showSystemMenu" - }, - "Label.background", new ColorUIResource(light), - "Label.disabledForeground", new ColorUIResource(Color.white), - "Label.disabledShadow", new ColorUIResource(shadow), - "Label.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Label.foreground", new ColorUIResource(darkShadow), - "List.background", new ColorUIResource(Color.white), - "List.border", new BasicBorders.MarginBorder(), - "List.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("ctrl DOWN"), "selectNextRowChangeLead", - KeyStroke.getKeyStroke("shift UP"), "selectPreviousRowExtendSelection", - KeyStroke.getKeyStroke("ctrl RIGHT"), "selectNextColumnChangeLead", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selectPreviousColumnExtendSelection", - KeyStroke.getKeyStroke("shift KP_UP"), "selectPreviousRowExtendSelection", - KeyStroke.getKeyStroke("DOWN"), "selectNextRow", - KeyStroke.getKeyStroke("ctrl UP"), "selectPreviousRowChangeLead", - KeyStroke.getKeyStroke("ctrl LEFT"), "selectPreviousColumnChangeLead", - KeyStroke.getKeyStroke("CUT"), "cut", - KeyStroke.getKeyStroke("END"), "selectLastRow", - KeyStroke.getKeyStroke("shift PAGE_UP"), "scrollUpExtendSelection", - KeyStroke.getKeyStroke("KP_UP"), "selectPreviousRow", - KeyStroke.getKeyStroke("shift ctrl UP"), "selectPreviousRowExtendSelection", - KeyStroke.getKeyStroke("ctrl HOME"), "selectFirstRowChangeLead", - KeyStroke.getKeyStroke("shift LEFT"), "selectPreviousColumnExtendSelection", - KeyStroke.getKeyStroke("ctrl END"), "selectLastRowChangeLead", - KeyStroke.getKeyStroke("ctrl PAGE_DOWN"), "scrollDownChangeLead", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selectNextColumnExtendSelection", - KeyStroke.getKeyStroke("LEFT"), "selectPreviousColumn", - KeyStroke.getKeyStroke("ctrl PAGE_UP"), "scrollUpChangeLead", - KeyStroke.getKeyStroke("KP_LEFT"), "selectPreviousColumn", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selectNextColumnExtendSelection", - KeyStroke.getKeyStroke("SPACE"), "addToSelection", - KeyStroke.getKeyStroke("ctrl SPACE"), "toggleAndAnchor", - KeyStroke.getKeyStroke("shift SPACE"), "extendTo", - KeyStroke.getKeyStroke("shift ctrl SPACE"), "moveSelectionTo", - KeyStroke.getKeyStroke("shift ctrl DOWN"), "selectNextRowExtendSelection", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "clearSelection", - KeyStroke.getKeyStroke("shift HOME"), "selectFirstRowExtendSelection", - KeyStroke.getKeyStroke("RIGHT"), "selectNextColumn", - KeyStroke.getKeyStroke("shift ctrl PAGE_UP"), "scrollUpExtendSelection", - KeyStroke.getKeyStroke("shift DOWN"), "selectNextRowExtendSelection", - KeyStroke.getKeyStroke("PAGE_DOWN"), "scrollDown", - KeyStroke.getKeyStroke("shift ctrl KP_UP"), "selectPreviousRowExtendSelection", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selectPreviousColumnExtendSelection", - KeyStroke.getKeyStroke("ctrl X"), "cut", - KeyStroke.getKeyStroke("shift ctrl PAGE_DOWN"), "scrollDownExtendSelection", - KeyStroke.getKeyStroke("ctrl SLASH"), "selectAll", - KeyStroke.getKeyStroke("ctrl C"), "copy", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "selectNextColumnChangeLead", - KeyStroke.getKeyStroke("shift END"), "selectLastRowExtendSelection", - KeyStroke.getKeyStroke("shift ctrl KP_DOWN"), "selectNextRowExtendSelection", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "selectPreviousColumnChangeLead", - KeyStroke.getKeyStroke("HOME"), "selectFirstRow", - KeyStroke.getKeyStroke("ctrl V"), "paste", - KeyStroke.getKeyStroke("KP_DOWN"), "selectNextRow", - KeyStroke.getKeyStroke("ctrl KP_DOWN"), "selectNextRowChangeLead", - KeyStroke.getKeyStroke("shift RIGHT"), "selectNextColumnExtendSelection", - KeyStroke.getKeyStroke("ctrl A"), "selectAll", - KeyStroke.getKeyStroke("shift ctrl END"), "selectLastRowExtendSelection", - KeyStroke.getKeyStroke("COPY"), "copy", - KeyStroke.getKeyStroke("ctrl KP_UP"), "selectPreviousRowChangeLead", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selectPreviousColumnExtendSelection", - KeyStroke.getKeyStroke("shift KP_DOWN"), "selectNextRowExtendSelection", - KeyStroke.getKeyStroke("UP"), "selectPreviousRow", - KeyStroke.getKeyStroke("shift ctrl HOME"), "selectFirstRowExtendSelection", - KeyStroke.getKeyStroke("shift PAGE_DOWN"), "scrollDownExtendSelection", - KeyStroke.getKeyStroke("KP_RIGHT"), "selectNextColumn", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selectNextColumnExtendSelection", - KeyStroke.getKeyStroke("PAGE_UP"), "scrollUp", - KeyStroke.getKeyStroke("PASTE"), "paste" - }), - "List.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "List.foreground", new ColorUIResource(Color.black), - "List.selectionBackground", new ColorUIResource(0, 0, 128), - "List.selectionForeground", new ColorUIResource(Color.white), - "List.focusCellHighlightBorder", - new BorderUIResource. - LineBorderUIResource(new ColorUIResource(Color.yellow)), - "Menu.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 12), - "Menu.crossMenuMnemonic", Boolean.TRUE, - "Menu.acceleratorForeground", new ColorUIResource(darkShadow), - "Menu.acceleratorSelectionForeground", new ColorUIResource(Color.white), - "Menu.arrowIcon", BasicIconFactory.getMenuArrowIcon(), - "Menu.background", new ColorUIResource(light), - "Menu.border", new BasicBorders.MarginBorder(), - "Menu.borderPainted", Boolean.FALSE, - "Menu.checkIcon", BasicIconFactory.getMenuItemCheckIcon(), - "Menu.consumesTabs", Boolean.TRUE, - "Menu.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Menu.foreground", new ColorUIResource(darkShadow), - "Menu.margin", new InsetsUIResource(2, 2, 2, 2), - "Menu.selectedWindowInputMapBindings", new Object[] { - "ESCAPE", "cancel", - "DOWN", "selectNext", - "KP_DOWN", "selectNext", - "UP", "selectPrevious", - "KP_UP", "selectPrevious", - "LEFT", "selectParent", - "KP_LEFT", "selectParent", - "RIGHT", "selectChild", - "KP_RIGHT", "selectChild", - "ENTER", "return", - "SPACE", "return" - }, - "Menu.menuPopupOffsetX", new Integer(0), - "Menu.menuPopupOffsetY", new Integer(0), - "Menu.submenuPopupOffsetX", new Integer(0), - "Menu.submenuPopupOffsetY", new Integer(0), - "Menu.selectionBackground", new ColorUIResource(Color.black), - "Menu.selectionForeground", new ColorUIResource(Color.white), - "MenuBar.background", new ColorUIResource(light), - "MenuBar.border", new BasicBorders.MenuBarBorder(null, null), - "MenuBar.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "MenuBar.foreground", new ColorUIResource(darkShadow), - "MenuBar.highlight", new ColorUIResource(highLight), - "MenuBar.shadow", new ColorUIResource(shadow), - "MenuBar.windowBindings", new Object[] { - "F10", "takeFocus" - }, - "MenuItem.acceleratorDelimiter", "+", - "MenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 12), - "MenuItem.acceleratorForeground", new ColorUIResource(darkShadow), - "MenuItem.acceleratorSelectionForeground", - new ColorUIResource(Color.white), - "MenuItem.arrowIcon", BasicIconFactory.getMenuItemArrowIcon(), - "MenuItem.background", new ColorUIResource(light), - "MenuItem.border", new BasicBorders.MarginBorder(), - "MenuItem.borderPainted", Boolean.FALSE, - "MenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "MenuItem.foreground", new ColorUIResource(darkShadow), - "MenuItem.margin", new InsetsUIResource(2, 2, 2, 2), - "MenuItem.selectionBackground", new ColorUIResource(Color.black), - "MenuItem.selectionForeground", new ColorUIResource(Color.white), - "OptionPane.background", new ColorUIResource(light), - "OptionPane.border", - new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0), - "OptionPane.buttonAreaBorder", - new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0), - "OptionPane.buttonClickThreshhold", new Integer(500), - "OptionPane.cancelButtonText", "Cancel", - "OptionPane.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "OptionPane.foreground", new ColorUIResource(darkShadow), - "OptionPane.messageAreaBorder", - new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0), - "OptionPane.messageForeground", new ColorUIResource(darkShadow), - "OptionPane.minimumSize", - new DimensionUIResource(BasicOptionPaneUI.MinimumWidth, - BasicOptionPaneUI.MinimumHeight), - "OptionPane.noButtonText", "No", - "OptionPane.okButtonText", "OK", - "OptionPane.windowBindings", new Object[] { - "ESCAPE", "close" - }, - "OptionPane.yesButtonText", "Yes", - "Panel.background", new ColorUIResource(light), - "Panel.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Panel.foreground", new ColorUIResource(Color.black), - "PasswordField.background", new ColorUIResource(light), - "PasswordField.border", new BasicBorders.FieldBorder(null, null, - null, null), - "PasswordField.caretBlinkRate", new Integer(500), - "PasswordField.caretForeground", new ColorUIResource(Color.black), - "PasswordField.font", new FontUIResource("MonoSpaced", Font.PLAIN, 12), - "PasswordField.foreground", new ColorUIResource(Color.black), - "PasswordField.inactiveBackground", new ColorUIResource(light), - "PasswordField.inactiveForeground", new ColorUIResource(Color.gray), - "PasswordField.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("END"), "caret-end-line", - KeyStroke.getKeyStroke("shift ctrl O"), "toggle-componentOrientation", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selection-backward", - KeyStroke.getKeyStroke("shift RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("HOME"), "caret-begin-line", - KeyStroke.getKeyStroke("ctrl V"), "paste-from-clipboard", - KeyStroke.getKeyStroke("ctrl H"), "delete-previous", - KeyStroke.getKeyStroke("KP_LEFT"), "caret-backward", - KeyStroke.getKeyStroke("LEFT"), "caret-backward", - KeyStroke.getKeyStroke("ctrl X"), "cut-to-clipboard", - KeyStroke.getKeyStroke("KP_RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selection-end-line", - KeyStroke.getKeyStroke("COPY"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift HOME"), "selection-begin-line", - KeyStroke.getKeyStroke("RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selection-begin-line", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "caret-begin-line", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "caret-end-line", - KeyStroke.getKeyStroke("PASTE"), "paste-from-clipboard", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "unselect", - KeyStroke.getKeyStroke("ctrl A"), "select-all", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("CUT"), "cut-to-clipboard", - KeyStroke.getKeyStroke("ctrl LEFT"), "caret-begin-line", - KeyStroke.getKeyStroke("BACK_SPACE"), "delete-previous", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selection-begin-line", - KeyStroke.getKeyStroke("ctrl C"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift END"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl RIGHT"), "caret-end-line", - KeyStroke.getKeyStroke("DELETE"), "delete-next", - KeyStroke.getKeyStroke("ENTER"), "notify-field-accept", - KeyStroke.getKeyStroke("shift LEFT"), "selection-backward" - }), - "PasswordField.margin", new InsetsUIResource(0, 0, 0, 0), - "PasswordField.selectionBackground", new ColorUIResource(Color.black), - "PasswordField.selectionForeground", new ColorUIResource(Color.white), - "PopupMenu.background", new ColorUIResource(light), - "PopupMenu.border", new BorderUIResource.BevelBorderUIResource(0), - "PopupMenu.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "PopupMenu.foreground", new ColorUIResource(darkShadow), - "PopupMenu.selectedWindowInputMapBindings", - new Object[] {"ESCAPE", "cancel", - "DOWN", "selectNext", - "KP_DOWN", "selectNext", - "UP", "selectPrevious", - "KP_UP", "selectPrevious", - "LEFT", "selectParent", - "KP_LEFT", "selectParent", - "RIGHT", "selectChild", - "KP_RIGHT", "selectChild", - "ENTER", "return", - "SPACE", "return" - }, - "PopupMenu.selectedWindowInputMapBindings.RightToLeft", - new Object[] {"LEFT", "selectChild", - "KP_LEFT", "selectChild", - "RIGHT", "selectParent", - "KP_RIGHT", "selectParent", - }, - "ProgressBar.background", new ColorUIResource(Color.LIGHT_GRAY), - "ProgressBar.border", - new BorderUIResource.LineBorderUIResource(Color.GREEN, 2), - "ProgressBar.cellLength", new Integer(1), - "ProgressBar.cellSpacing", new Integer(0), - "ProgressBar.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "ProgressBar.foreground", new ColorUIResource(0, 0, 128), - "ProgressBar.selectionBackground", new ColorUIResource(0, 0, 128), - "ProgressBar.selectionForeground", new ColorUIResource(Color.LIGHT_GRAY), - "ProgressBar.repaintInterval", new Integer(50), - "ProgressBar.cycleTime", new Integer(3000), - "RadioButton.background", new ColorUIResource(light), - "RadioButton.border", BasicBorders.getRadioButtonBorder(), - "RadioButton.darkShadow", new ColorUIResource(shadow), - "RadioButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("SPACE"), "pressed", - KeyStroke.getKeyStroke("released SPACE"), "released" - }), - "RadioButton.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "RadioButton.foreground", new ColorUIResource(darkShadow), - "RadioButton.highlight", new ColorUIResource(highLight), - "RadioButton.icon", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults def) - { - return BasicIconFactory.getRadioButtonIcon(); - } - }, - "RadioButton.light", new ColorUIResource(highLight), - "RadioButton.margin", new InsetsUIResource(2, 2, 2, 2), - "RadioButton.shadow", new ColorUIResource(shadow), - "RadioButton.textIconGap", new Integer(4), - "RadioButton.textShiftOffset", new Integer(0), - "RadioButtonMenuItem.acceleratorFont", - new FontUIResource("Dialog", Font.PLAIN, 12), - "RadioButtonMenuItem.acceleratorForeground", - new ColorUIResource(darkShadow), - "RadioButtonMenuItem.acceleratorSelectionForeground", - new ColorUIResource(Color.white), - "RadioButtonMenuItem.arrowIcon", BasicIconFactory.getMenuItemArrowIcon(), - "RadioButtonMenuItem.background", new ColorUIResource(light), - "RadioButtonMenuItem.border", new BasicBorders.MarginBorder(), - "RadioButtonMenuItem.borderPainted", Boolean.FALSE, - "RadioButtonMenuItem.checkIcon", BasicIconFactory.getRadioButtonMenuItemIcon(), - "RadioButtonMenuItem.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "RadioButtonMenuItem.foreground", new ColorUIResource(darkShadow), - "RadioButtonMenuItem.margin", new InsetsUIResource(2, 2, 2, 2), - "RadioButtonMenuItem.selectionBackground", - new ColorUIResource(Color.black), - "RadioButtonMenuItem.selectionForeground", - new ColorUIResource(Color.white), - "RootPane.defaultButtonWindowKeyBindings", new Object[] { - "ENTER", "press", - "released ENTER", "release", - "ctrl ENTER", "press", - "ctrl released ENTER", "release" - }, - "ScrollBar.background", new ColorUIResource(224, 224, 224), - "ScrollBar.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - "PAGE_UP", "negativeBlockIncrement", - "PAGE_DOWN", "positiveBlockIncrement", - "END", "maxScroll", - "HOME", "minScroll", - "LEFT", "negativeUnitIncrement", - "KP_UP", "negativeUnitIncrement", - "KP_DOWN", "positiveUnitIncrement", - "UP", "negativeUnitIncrement", - "RIGHT", "positiveUnitIncrement", - "KP_LEFT", "negativeUnitIncrement", - "DOWN", "positiveUnitIncrement", - "KP_RIGHT", "positiveUnitIncrement" - }), - "ScrollBar.foreground", new ColorUIResource(light), - "ScrollBar.maximumThumbSize", new DimensionUIResource(4096, 4096), - "ScrollBar.minimumThumbSize", new DimensionUIResource(8, 8), - "ScrollBar.thumb", new ColorUIResource(light), - "ScrollBar.thumbDarkShadow", new ColorUIResource(shadow), - "ScrollBar.thumbHighlight", new ColorUIResource(highLight), - "ScrollBar.thumbShadow", new ColorUIResource(shadow), - "ScrollBar.track", new ColorUIResource(light), - "ScrollBar.trackHighlight", new ColorUIResource(shadow), - "ScrollBar.width", new Integer(16), - "ScrollPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "PAGE_UP", "scrollUp", - "KP_LEFT", "unitScrollLeft", - "ctrl PAGE_DOWN", "scrollRight", - "PAGE_DOWN", "scrollDown", - "KP_RIGHT", "unitScrollRight", - "LEFT", "unitScrollLeft", - "ctrl END", "scrollEnd", - "UP", "unitScrollUp", - "RIGHT", "unitScrollRight", - "DOWN", "unitScrollDown", - "ctrl HOME", "scrollHome", - "ctrl PAGE_UP", "scrollLeft", - "KP_UP", "unitScrollUp", - "KP_DOWN", "unitScrollDown" - }), - "ScrollPane.background", new ColorUIResource(light), - "ScrollPane.border", new BorderUIResource.EtchedBorderUIResource(), - "ScrollPane.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "ScrollPane.foreground", new ColorUIResource(darkShadow), - "Separator.background", new ColorUIResource(highLight), - "Separator.foreground", new ColorUIResource(shadow), - "Separator.highlight", new ColorUIResource(highLight), - "Separator.shadow", new ColorUIResource(shadow), - "Slider.background", new ColorUIResource(light), - "Slider.focus", new ColorUIResource(shadow), - "Slider.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - "ctrl PAGE_DOWN", "negativeBlockIncrement", - "PAGE_DOWN", "negativeBlockIncrement", - "PAGE_UP", "positiveBlockIncrement", - "ctrl PAGE_UP", "positiveBlockIncrement", - "KP_RIGHT", "positiveUnitIncrement", - "DOWN", "negativeUnitIncrement", - "KP_LEFT", "negativeUnitIncrement", - "RIGHT", "positiveUnitIncrement", - "KP_DOWN", "negativeUnitIncrement", - "UP", "positiveUnitIncrement", - "KP_UP", "positiveUnitIncrement", - "LEFT", "negativeUnitIncrement", - "HOME", "minScroll", - "END", "maxScroll" - }), - "Slider.focusInsets", new InsetsUIResource(2, 2, 2, 2), - "Slider.foreground", new ColorUIResource(light), - "Slider.highlight", new ColorUIResource(highLight), - "Slider.shadow", new ColorUIResource(shadow), - "Slider.thumbHeight", new Integer(20), - "Slider.thumbWidth", new Integer(11), - "Slider.tickHeight", new Integer(12), - "Slider.horizontalSize", new Dimension(200, 21), - "Slider.verticalSize", new Dimension(21, 200), - "Slider.minimumHorizontalSize", new Dimension(36, 21), - "Slider.minimumVerticalSize", new Dimension(21, 36), - "Spinner.background", new ColorUIResource(light), - "Spinner.foreground", new ColorUIResource(light), - "Spinner.arrowButtonSize", new DimensionUIResource(16, 5), - "Spinner.editorBorderPainted", Boolean.FALSE, - "Spinner.font", new FontUIResource("MonoSpaced", Font.PLAIN, 12), - "SplitPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "F6", "toggleFocus", - "F8", "startResize", - "END", "selectMax", - "HOME", "selectMin", - "LEFT", "negativeIncrement", - "KP_UP", "negativeIncrement", - "KP_DOWN", "positiveIncrement", - "UP", "negativeIncrement", - "RIGHT", "positiveIncrement", - "KP_LEFT", "negativeIncrement", - "DOWN", "positiveIncrement", - "KP_RIGHT", "positiveIncrement", - "shift ctrl pressed TAB", "focusOutBackward", - "ctrl pressed TAB", "focusOutForward" - }), - "SplitPane.background", new ColorUIResource(light), - "SplitPane.border", new BasicBorders.SplitPaneBorder(null, null), - "SplitPane.darkShadow", new ColorUIResource(shadow), - "SplitPane.dividerSize", new Integer(7), - "SplitPane.highlight", new ColorUIResource(highLight), - "SplitPane.shadow", new ColorUIResource(shadow), - "SplitPaneDivider.border", BasicBorders.getSplitPaneDividerBorder(), - "SplitPaneDivider.draggingColor", new ColorUIResource(Color.DARK_GRAY), - "TabbedPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "ctrl PAGE_DOWN", "navigatePageDown", - "ctrl PAGE_UP", "navigatePageUp", - "ctrl UP", "requestFocus", - "ctrl KP_UP", "requestFocus" - }), - "TabbedPane.background", new ColorUIResource(192, 192, 192), - "TabbedPane.contentBorderInsets", new InsetsUIResource(2, 2, 3, 3), - "TabbedPane.darkShadow", new ColorUIResource(Color.black), - "TabbedPane.focus", new ColorUIResource(Color.black), - "TabbedPane.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("ctrl DOWN"), "requestFocusForVisibleComponent", - KeyStroke.getKeyStroke("KP_UP"), "navigateUp", - KeyStroke.getKeyStroke("LEFT"), "navigateLeft", - KeyStroke.getKeyStroke("ctrl KP_DOWN"), "requestFocusForVisibleComponent", - KeyStroke.getKeyStroke("UP"), "navigateUp", - KeyStroke.getKeyStroke("KP_DOWN"), "navigateDown", - KeyStroke.getKeyStroke("KP_LEFT"), "navigateLeft", - KeyStroke.getKeyStroke("RIGHT"), "navigateRight", - KeyStroke.getKeyStroke("KP_RIGHT"), "navigateRight", - KeyStroke.getKeyStroke("DOWN"), "navigateDown" - }), - "TabbedPane.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "TabbedPane.foreground", new ColorUIResource(Color.black), - "TabbedPane.highlight", new ColorUIResource(Color.white), - "TabbedPane.light", new ColorUIResource(192, 192, 192), - "TabbedPane.selectedTabPadInsets", new InsetsUIResource(2, 2, 2, 1), - "TabbedPane.shadow", new ColorUIResource(128, 128, 128), - "TabbedPane.tabsOpaque", Boolean.TRUE, - "TabbedPane.tabAreaInsets", new InsetsUIResource(3, 2, 0, 2), - "TabbedPane.tabInsets", new InsetsUIResource(0, 4, 1, 4), - "TabbedPane.tabRunOverlay", new Integer(2), - "TabbedPane.tabsOverlapBorder", Boolean.FALSE, - "TabbedPane.textIconGap", new Integer(4), - "Table.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "ctrl DOWN", "selectNextRowChangeLead", - "ctrl RIGHT", "selectNextColumnChangeLead", - "ctrl UP", "selectPreviousRowChangeLead", - "ctrl LEFT", "selectPreviousColumnChangeLead", - "CUT", "cut", - "SPACE", "addToSelection", - "ctrl SPACE", "toggleAndAnchor", - "shift SPACE", "extendTo", - "shift ctrl SPACE", "moveSelectionTo", - "ctrl X", "cut", - "ctrl C", "copy", - "ctrl KP_RIGHT", "selectNextColumnChangeLead", - "ctrl KP_LEFT", "selectPreviousColumnChangeLead", - "ctrl V", "paste", - "ctrl KP_DOWN", "selectNextRowChangeLead", - "COPY", "copy", - "ctrl KP_UP", "selectPreviousRowChangeLead", - "PASTE", "paste", - "shift PAGE_DOWN", "scrollDownExtendSelection", - "PAGE_DOWN", "scrollDownChangeSelection", - "END", "selectLastColumn", - "shift END", "selectLastColumnExtendSelection", - "HOME", "selectFirstColumn", - "ctrl END", "selectLastRow", - "ctrl shift END", "selectLastRowExtendSelection", - "LEFT", "selectPreviousColumn", - "shift HOME", "selectFirstColumnExtendSelection", - "UP", "selectPreviousRow", - "RIGHT", "selectNextColumn", - "ctrl HOME", "selectFirstRow", - "shift LEFT", "selectPreviousColumnExtendSelection", - "DOWN", "selectNextRow", - "ctrl shift HOME", "selectFirstRowExtendSelection", - "shift UP", "selectPreviousRowExtendSelection", - "F2", "startEditing", - "shift RIGHT", "selectNextColumnExtendSelection", - "TAB", "selectNextColumnCell", - "shift DOWN", "selectNextRowExtendSelection", - "ENTER", "selectNextRowCell", - "KP_UP", "selectPreviousRow", - "KP_DOWN", "selectNextRow", - "KP_LEFT", "selectPreviousColumn", - "KP_RIGHT", "selectNextColumn", - "shift TAB", "selectPreviousColumnCell", - "ctrl A", "selectAll", - "shift ENTER", "selectPreviousRowCell", - "shift KP_DOWN", "selectNextRowExtendSelection", - "shift KP_LEFT", "selectPreviousColumnExtendSelection", - "ESCAPE", "cancel", - "ctrl shift PAGE_UP", "scrollLeftExtendSelection", - "shift KP_RIGHT", "selectNextColumnExtendSelection", - "ctrl PAGE_UP", "scrollLeftChangeSelection", - "shift PAGE_UP", "scrollUpExtendSelection", - "ctrl shift PAGE_DOWN", "scrollRightExtendSelection", - "ctrl PAGE_DOWN", "scrollRightChangeSelection", - "PAGE_UP", "scrollUpChangeSelection", - "ctrl shift LEFT", "selectPreviousColumnExtendSelection", - "shift KP_UP", "selectPreviousRowExtendSelection", - "ctrl shift UP", "selectPreviousRowExtendSelection", - "ctrl shift RIGHT", "selectNextColumnExtendSelection", - "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection", - "ctrl shift DOWN", "selectNextRowExtendSelection", - "ctrl BACK_SLASH", "clearSelection", - "ctrl shift KP_UP", "selectPreviousRowExtendSelection", - "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection", - "ctrl SLASH", "selectAll", - "ctrl shift KP_DOWN", "selectNextRowExtendSelection", - }), - "Table.background", new ColorUIResource(new ColorUIResource(255, 255, 255)), - "Table.focusCellBackground", new ColorUIResource(new ColorUIResource(255, 255, 255)), - "Table.focusCellForeground", new ColorUIResource(new ColorUIResource(0, 0, 0)), - "Table.focusCellHighlightBorder", - new BorderUIResource.LineBorderUIResource( - new ColorUIResource(255, 255, 0)), - "Table.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Table.foreground", new ColorUIResource(new ColorUIResource(0, 0, 0)), - "Table.gridColor", new ColorUIResource(new ColorUIResource(128, 128, 128)), - "Table.scrollPaneBorder", new BorderUIResource.BevelBorderUIResource(0), - "Table.selectionBackground", new ColorUIResource(new ColorUIResource(0, 0, 128)), - "Table.selectionForeground", new ColorUIResource(new ColorUIResource(255, 255, 255)), - "TableHeader.background", new ColorUIResource(new ColorUIResource(192, 192, 192)), - "TableHeader.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "TableHeader.foreground", new ColorUIResource(new ColorUIResource(0, 0, 0)), - - "TextArea.background", new ColorUIResource(light), - "TextArea.border", new BorderUIResource(BasicBorders.getMarginBorder()), - "TextArea.caretBlinkRate", new Integer(500), - "TextArea.caretForeground", new ColorUIResource(Color.black), - "TextArea.font", new FontUIResource("MonoSpaced", Font.PLAIN, 12), - "TextArea.foreground", new ColorUIResource(Color.black), - "TextArea.inactiveForeground", new ColorUIResource(Color.gray), - "TextArea.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("shift UP"), "selection-up", - KeyStroke.getKeyStroke("ctrl RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("shift KP_UP"), "selection-up", - KeyStroke.getKeyStroke("DOWN"), "caret-down", - KeyStroke.getKeyStroke("shift ctrl T"), "previous-link-action", - KeyStroke.getKeyStroke("ctrl LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("CUT"), "cut-to-clipboard", - KeyStroke.getKeyStroke("END"), "caret-end-line", - KeyStroke.getKeyStroke("shift PAGE_UP"), "selection-page-up", - KeyStroke.getKeyStroke("KP_UP"), "caret-up", - KeyStroke.getKeyStroke("DELETE"), "delete-next", - KeyStroke.getKeyStroke("ctrl HOME"), "caret-begin", - KeyStroke.getKeyStroke("shift LEFT"), "selection-backward", - KeyStroke.getKeyStroke("ctrl END"), "caret-end", - KeyStroke.getKeyStroke("BACK_SPACE"), "delete-previous", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("LEFT"), "caret-backward", - KeyStroke.getKeyStroke("KP_LEFT"), "caret-backward", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("ctrl SPACE"), "activate-link-action", - KeyStroke.getKeyStroke("ctrl H"), "delete-previous", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "unselect", - KeyStroke.getKeyStroke("ENTER"), "insert-break", - KeyStroke.getKeyStroke("shift HOME"), "selection-begin-line", - KeyStroke.getKeyStroke("RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl PAGE_UP"), "selection-page-left", - KeyStroke.getKeyStroke("shift DOWN"), "selection-down", - KeyStroke.getKeyStroke("PAGE_DOWN"), "page-down", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selection-backward", - KeyStroke.getKeyStroke("shift ctrl O"), "toggle-componentOrientation", - KeyStroke.getKeyStroke("ctrl X"), "cut-to-clipboard", - KeyStroke.getKeyStroke("shift ctrl PAGE_DOWN"), "selection-page-right", - KeyStroke.getKeyStroke("ctrl C"), "copy-to-clipboard", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("shift END"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("HOME"), "caret-begin-line", - KeyStroke.getKeyStroke("ctrl V"), "paste-from-clipboard", - KeyStroke.getKeyStroke("KP_DOWN"), "caret-down", - KeyStroke.getKeyStroke("ctrl A"), "select-all", - KeyStroke.getKeyStroke("shift RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("shift ctrl END"), "selection-end", - KeyStroke.getKeyStroke("COPY"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("ctrl T"), "next-link-action", - KeyStroke.getKeyStroke("shift KP_DOWN"), "selection-down", - KeyStroke.getKeyStroke("TAB"), "insert-tab", - KeyStroke.getKeyStroke("UP"), "caret-up", - KeyStroke.getKeyStroke("shift ctrl HOME"), "selection-begin", - KeyStroke.getKeyStroke("shift PAGE_DOWN"), "selection-page-down", - KeyStroke.getKeyStroke("KP_RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("PAGE_UP"), "page-up", - KeyStroke.getKeyStroke("PASTE"), "paste-from-clipboard" - }), - "TextArea.margin", new InsetsUIResource(0, 0, 0, 0), - "TextArea.selectionBackground", new ColorUIResource(Color.black), - "TextArea.selectionForeground", new ColorUIResource(Color.white), - "TextField.background", new ColorUIResource(light), - "TextField.border", new BasicBorders.FieldBorder(null, null, null, null), - "TextField.caretBlinkRate", new Integer(500), - "TextField.caretForeground", new ColorUIResource(Color.black), - "TextField.darkShadow", new ColorUIResource(shadow), - "TextField.font", new FontUIResource("SansSerif", Font.PLAIN, 12), - "TextField.foreground", new ColorUIResource(Color.black), - "TextField.highlight", new ColorUIResource(highLight), - "TextField.inactiveBackground", new ColorUIResource(Color.LIGHT_GRAY), - "TextField.inactiveForeground", new ColorUIResource(Color.GRAY), - "TextField.light", new ColorUIResource(highLight), - "TextField.highlight", new ColorUIResource(light), - "TextField.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("ENTER"), "notify-field-accept", - KeyStroke.getKeyStroke("LEFT"), "caret-backward", - KeyStroke.getKeyStroke("RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("BACK_SPACE"), "delete-previous", - KeyStroke.getKeyStroke("ctrl X"), "cut-to-clipboard", - KeyStroke.getKeyStroke("ctrl C"), "copy-to-clipboard", - KeyStroke.getKeyStroke("ctrl V"), "paste-from-clipboard", - KeyStroke.getKeyStroke("shift LEFT"), "selection-backward", - KeyStroke.getKeyStroke("shift RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("HOME"), "caret-begin-line", - KeyStroke.getKeyStroke("END"), "caret-end-line", - KeyStroke.getKeyStroke("DELETE"), "delete-next", - KeyStroke.getKeyStroke("shift ctrl O"), "toggle-componentOrientation", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selection-backward", - KeyStroke.getKeyStroke("ctrl H"), "delete-previous", - KeyStroke.getKeyStroke("KP_LEFT"), "caret-backward", - KeyStroke.getKeyStroke("KP_RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("COPY"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift HOME"), "selection-begin-line", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("PASTE"), "paste-from-clipboard", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "unselect", - KeyStroke.getKeyStroke("ctrl A"), "select-all", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("CUT"), "cut-to-clipboard", - KeyStroke.getKeyStroke("ctrl LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("shift END"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl RIGHT"), "caret-next-word" - }), - "TextField.margin", new InsetsUIResource(0, 0, 0, 0), - "TextField.selectionBackground", new ColorUIResource(Color.black), - "TextField.selectionForeground", new ColorUIResource(Color.white), - "TextPane.background", new ColorUIResource(Color.white), - "TextPane.border", BasicBorders.getMarginBorder(), - "TextPane.caretBlinkRate", new Integer(500), - "TextPane.caretForeground", new ColorUIResource(Color.black), - "TextPane.font", new FontUIResource("Serif", Font.PLAIN, 12), - "TextPane.foreground", new ColorUIResource(Color.black), - "TextPane.inactiveForeground", new ColorUIResource(Color.gray), - "TextPane.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("shift UP"), "selection-up", - KeyStroke.getKeyStroke("ctrl RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("shift ctrl LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("shift KP_UP"), "selection-up", - KeyStroke.getKeyStroke("DOWN"), "caret-down", - KeyStroke.getKeyStroke("shift ctrl T"), "previous-link-action", - KeyStroke.getKeyStroke("ctrl LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("CUT"), "cut-to-clipboard", - KeyStroke.getKeyStroke("END"), "caret-end-line", - KeyStroke.getKeyStroke("shift PAGE_UP"), "selection-page-up", - KeyStroke.getKeyStroke("KP_UP"), "caret-up", - KeyStroke.getKeyStroke("DELETE"), "delete-next", - KeyStroke.getKeyStroke("ctrl HOME"), "caret-begin", - KeyStroke.getKeyStroke("shift LEFT"), "selection-backward", - KeyStroke.getKeyStroke("ctrl END"), "caret-end", - KeyStroke.getKeyStroke("BACK_SPACE"), "delete-previous", - KeyStroke.getKeyStroke("shift ctrl RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("LEFT"), "caret-backward", - KeyStroke.getKeyStroke("KP_LEFT"), "caret-backward", - KeyStroke.getKeyStroke("shift KP_RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("ctrl SPACE"), "activate-link-action", - KeyStroke.getKeyStroke("ctrl H"), "delete-previous", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "unselect", - KeyStroke.getKeyStroke("ENTER"), "insert-break", - KeyStroke.getKeyStroke("shift HOME"), "selection-begin-line", - KeyStroke.getKeyStroke("RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl PAGE_UP"), "selection-page-left", - KeyStroke.getKeyStroke("shift DOWN"), "selection-down", - KeyStroke.getKeyStroke("PAGE_DOWN"), "page-down", - KeyStroke.getKeyStroke("shift KP_LEFT"), "selection-backward", - KeyStroke.getKeyStroke("shift ctrl O"), "toggle-componentOrientation", - KeyStroke.getKeyStroke("ctrl X"), "cut-to-clipboard", - KeyStroke.getKeyStroke("shift ctrl PAGE_DOWN"), "selection-page-right", - KeyStroke.getKeyStroke("ctrl C"), "copy-to-clipboard", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "caret-next-word", - KeyStroke.getKeyStroke("shift END"), "selection-end-line", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "caret-previous-word", - KeyStroke.getKeyStroke("HOME"), "caret-begin-line", - KeyStroke.getKeyStroke("ctrl V"), "paste-from-clipboard", - KeyStroke.getKeyStroke("KP_DOWN"), "caret-down", - KeyStroke.getKeyStroke("ctrl A"), "select-all", - KeyStroke.getKeyStroke("shift RIGHT"), "selection-forward", - KeyStroke.getKeyStroke("shift ctrl END"), "selection-end", - KeyStroke.getKeyStroke("COPY"), "copy-to-clipboard", - KeyStroke.getKeyStroke("shift ctrl KP_LEFT"), "selection-previous-word", - KeyStroke.getKeyStroke("ctrl T"), "next-link-action", - KeyStroke.getKeyStroke("shift KP_DOWN"), "selection-down", - KeyStroke.getKeyStroke("TAB"), "insert-tab", - KeyStroke.getKeyStroke("UP"), "caret-up", - KeyStroke.getKeyStroke("shift ctrl HOME"), "selection-begin", - KeyStroke.getKeyStroke("shift PAGE_DOWN"), "selection-page-down", - KeyStroke.getKeyStroke("KP_RIGHT"), "caret-forward", - KeyStroke.getKeyStroke("shift ctrl KP_RIGHT"), "selection-next-word", - KeyStroke.getKeyStroke("PAGE_UP"), "page-up", - KeyStroke.getKeyStroke("PASTE"), "paste-from-clipboard" - }), - "TextPane.margin", new InsetsUIResource(3, 3, 3, 3), - "TextPane.selectionBackground", new ColorUIResource(Color.black), - "TextPane.selectionForeground", new ColorUIResource(Color.white), - "TitledBorder.border", new BorderUIResource.EtchedBorderUIResource(), - "TitledBorder.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "TitledBorder.titleColor", new ColorUIResource(darkShadow), - "ToggleButton.background", new ColorUIResource(light), - "ToggleButton.border", - new BorderUIResource.CompoundBorderUIResource(null, null), - "ToggleButton.darkShadow", new ColorUIResource(shadow), - "ToggleButton.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("SPACE"), "pressed", - KeyStroke.getKeyStroke("released SPACE"), "released" - }), - "ToggleButton.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "ToggleButton.foreground", new ColorUIResource(darkShadow), - "ToggleButton.highlight", new ColorUIResource(highLight), - "ToggleButton.light", new ColorUIResource(light), - "ToggleButton.margin", new InsetsUIResource(2, 14, 2, 14), - "ToggleButton.shadow", new ColorUIResource(shadow), - "ToggleButton.textIconGap", new Integer(4), - "ToggleButton.textShiftOffset", new Integer(0), - "ToolBar.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "UP", "navigateUp", - "KP_UP", "navigateUp", - "DOWN", "navigateDown", - "KP_DOWN", "navigateDown", - "LEFT", "navigateLeft", - "KP_LEFT", "navigateLeft", - "RIGHT", "navigateRight", - "KP_RIGHT", "navigateRight" - }), - "ToolBar.background", new ColorUIResource(light), - "ToolBar.border", new BorderUIResource.EtchedBorderUIResource(), - "ToolBar.darkShadow", new ColorUIResource(shadow), - "ToolBar.dockingBackground", new ColorUIResource(light), - "ToolBar.dockingForeground", new ColorUIResource(Color.red), - "ToolBar.floatingBackground", new ColorUIResource(light), - "ToolBar.floatingForeground", new ColorUIResource(Color.darkGray), - "ToolBar.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "ToolBar.foreground", new ColorUIResource(darkShadow), - "ToolBar.highlight", new ColorUIResource(highLight), - "ToolBar.light", new ColorUIResource(highLight), - "ToolBar.separatorSize", new DimensionUIResource(10, 10), - "ToolBar.shadow", new ColorUIResource(shadow), - "ToolTip.background", new ColorUIResource(light), - "ToolTip.border", new BorderUIResource.LineBorderUIResource(Color.lightGray), - "ToolTip.font", new FontUIResource("SansSerif", Font.PLAIN, 12), - "ToolTip.foreground", new ColorUIResource(darkShadow), - "Tree.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] { - "ESCAPE", "cancel" - }), - "Tree.background", new ColorUIResource(new Color(255, 255, 255)), - "Tree.changeSelectionWithFocus", Boolean.TRUE, - "Tree.drawsFocusBorderAroundIcon", Boolean.FALSE, - "Tree.editorBorder", new BorderUIResource.LineBorderUIResource(Color.lightGray), - "Tree.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { - KeyStroke.getKeyStroke("ctrl DOWN"), "selectNextChangeLead", - KeyStroke.getKeyStroke("shift UP"), "selectPreviousExtendSelection", - KeyStroke.getKeyStroke("ctrl RIGHT"), "scrollRight", - KeyStroke.getKeyStroke("shift KP_UP"), "selectPreviousExtendSelection", - KeyStroke.getKeyStroke("DOWN"), "selectNext", - KeyStroke.getKeyStroke("ctrl UP"), "selectPreviousChangeLead", - KeyStroke.getKeyStroke("ctrl LEFT"), "scrollLeft", - KeyStroke.getKeyStroke("CUT"), "cut", - KeyStroke.getKeyStroke("END"), "selectLast", - KeyStroke.getKeyStroke("shift PAGE_UP"), "scrollUpExtendSelection", - KeyStroke.getKeyStroke("KP_UP"), "selectPrevious", - KeyStroke.getKeyStroke("shift ctrl UP"), "selectPreviousExtendSelection", - KeyStroke.getKeyStroke("ctrl HOME"), "selectFirstChangeLead", - KeyStroke.getKeyStroke("ctrl END"), "selectLastChangeLead", - KeyStroke.getKeyStroke("ctrl PAGE_DOWN"), "scrollDownChangeLead", - KeyStroke.getKeyStroke("LEFT"), "selectParent", - KeyStroke.getKeyStroke("ctrl PAGE_UP"), "scrollUpChangeLead", - KeyStroke.getKeyStroke("KP_LEFT"), "selectParent", - KeyStroke.getKeyStroke("SPACE"), "addToSelection", - KeyStroke.getKeyStroke("ctrl SPACE"), "toggleAndAnchor", - KeyStroke.getKeyStroke("shift SPACE"), "extendTo", - KeyStroke.getKeyStroke("shift ctrl SPACE"), "moveSelectionTo", - KeyStroke.getKeyStroke("ADD"), "expand", - KeyStroke.getKeyStroke("ctrl BACK_SLASH"), "clearSelection", - KeyStroke.getKeyStroke("shift ctrl DOWN"), "selectNextExtendSelection", - KeyStroke.getKeyStroke("shift HOME"), "selectFirstExtendSelection", - KeyStroke.getKeyStroke("RIGHT"), "selectChild", - KeyStroke.getKeyStroke("shift ctrl PAGE_UP"), "scrollUpExtendSelection", - KeyStroke.getKeyStroke("shift DOWN"), "selectNextExtendSelection", - KeyStroke.getKeyStroke("PAGE_DOWN"), "scrollDownChangeSelection", - KeyStroke.getKeyStroke("shift ctrl KP_UP"), "selectPreviousExtendSelection", - KeyStroke.getKeyStroke("SUBTRACT"), "collapse", - KeyStroke.getKeyStroke("ctrl X"), "cut", - KeyStroke.getKeyStroke("shift ctrl PAGE_DOWN"), "scrollDownExtendSelection", - KeyStroke.getKeyStroke("ctrl SLASH"), "selectAll", - KeyStroke.getKeyStroke("ctrl C"), "copy", - KeyStroke.getKeyStroke("ctrl KP_RIGHT"), "scrollRight", - KeyStroke.getKeyStroke("shift END"), "selectLastExtendSelection", - KeyStroke.getKeyStroke("shift ctrl KP_DOWN"), "selectNextExtendSelection", - KeyStroke.getKeyStroke("ctrl KP_LEFT"), "scrollLeft", - KeyStroke.getKeyStroke("HOME"), "selectFirst", - KeyStroke.getKeyStroke("ctrl V"), "paste", - KeyStroke.getKeyStroke("KP_DOWN"), "selectNext", - KeyStroke.getKeyStroke("ctrl A"), "selectAll", - KeyStroke.getKeyStroke("ctrl KP_DOWN"), "selectNextChangeLead", - KeyStroke.getKeyStroke("shift ctrl END"), "selectLastExtendSelection", - KeyStroke.getKeyStroke("COPY"), "copy", - KeyStroke.getKeyStroke("ctrl KP_UP"), "selectPreviousChangeLead", - KeyStroke.getKeyStroke("shift KP_DOWN"), "selectNextExtendSelection", - KeyStroke.getKeyStroke("UP"), "selectPrevious", - KeyStroke.getKeyStroke("shift ctrl HOME"), "selectFirstExtendSelection", - KeyStroke.getKeyStroke("shift PAGE_DOWN"), "scrollDownExtendSelection", - KeyStroke.getKeyStroke("KP_RIGHT"), "selectChild", - KeyStroke.getKeyStroke("F2"), "startEditing", - KeyStroke.getKeyStroke("PAGE_UP"), "scrollUpChangeSelection", - KeyStroke.getKeyStroke("PASTE"), "paste" - }), - "Tree.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Tree.foreground", new ColorUIResource(Color.black), - "Tree.hash", new ColorUIResource(new Color(184, 207, 228)), - "Tree.leftChildIndent", new Integer(7), - "Tree.rightChildIndent", new Integer(13), - "Tree.rowHeight", new Integer(16), - "Tree.scrollsOnExpand", Boolean.TRUE, - "Tree.selectionBackground", new ColorUIResource(Color.black), - "Tree.nonSelectionBackground", new ColorUIResource(new Color(255, 255, 255)), - "Tree.selectionBorderColor", new ColorUIResource(Color.black), - "Tree.selectionBorder", new BorderUIResource.LineBorderUIResource(Color.black), - "Tree.selectionForeground", new ColorUIResource(new Color(255, 255, 255)), - "Viewport.background", new ColorUIResource(light), - "Viewport.foreground", new ColorUIResource(Color.black), - "Viewport.font", new FontUIResource("Dialog", Font.PLAIN, 12) - }; - defaults.putDefaults(uiDefaults); - } - - /** - * Returns the <code>ActionMap</code> that stores all the actions that are - * responsibly for rendering auditory cues. - * - * @return the action map that stores all the actions that are - * responsibly for rendering auditory cues - * - * @see #createAudioAction - * @see #playSound - * - * @since 1.4 - */ - protected ActionMap getAudioActionMap() - { - if (audioActionMap != null) - audioActionMap = new ActionMap(); - return audioActionMap; - } - - /** - * Creates an <code>Action</code> that can play an auditory cue specified by - * the key. The UIDefaults value for the key is normally a String that points - * to an audio file relative to the current package. - * - * @param key a UIDefaults key that specifies the sound - * - * @return an action that can play the sound - * - * @see #playSound - * - * @since 1.4 - */ - protected Action createAudioAction(Object key) - { - return new AudioAction(key); - } - - /** - * Plays the sound of the action if it is listed in - * <code>AuditoryCues.playList</code>. - * - * @param audioAction the audio action to play - * - * @since 1.4 - */ - protected void playSound(Action audioAction) - { - if (audioAction instanceof AudioAction) - { - Object[] playList = (Object[]) UIManager.get("AuditoryCues.playList"); - for (int i = 0; i < playList.length; ++i) - { - if (playList[i].equals(((AudioAction) audioAction).key)) - { - ActionEvent ev = new ActionEvent(this, - ActionEvent.ACTION_PERFORMED, - (String) playList[i]); - audioAction.actionPerformed(ev); - break; - } - } - } - } - - /** - * Initializes the Look and Feel. - */ - public void initialize() - { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - popupHelper = new PopupHelper(); - toolkit.addAWTEventListener(popupHelper, AWTEvent.MOUSE_EVENT_MASK); - } - - /** - * Uninitializes the Look and Feel. - */ - public void uninitialize() - { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - toolkit.removeAWTEventListener(popupHelper); - popupHelper = null; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java deleted file mode 100644 index b9e2912..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicMenuBarUI.java +++ /dev/null @@ -1,481 +0,0 @@ -/* BasicMenuBarUI.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.plaf.basic; - -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ContainerEvent; -import java.awt.event.ContainerListener; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.BoxLayout; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.LookAndFeel; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.MenuBarUI; - -/** - * UI Delegate for JMenuBar. - */ -public class BasicMenuBarUI extends MenuBarUI -{ - - /** - * This action is performed for the action command 'takeFocus'. - */ - private static class FocusAction - extends AbstractAction - { - - /** - * Creates a new FocusAction. - */ - FocusAction() - { - super("takeFocus"); - } - - /** - * Performs the action. - */ - public void actionPerformed(ActionEvent event) - { - // In the JDK this action seems to pop up the first menu of the - // menu bar. - JMenuBar menuBar = (JMenuBar) event.getSource(); - MenuSelectionManager defaultManager = - MenuSelectionManager.defaultManager(); - MenuElement me[]; - MenuElement subElements[]; - JMenu menu = menuBar.getMenu(0); - if (menu != null) - { - me = new MenuElement[3]; - me[0] = (MenuElement) menuBar; - me[1] = (MenuElement) menu; - me[2] = (MenuElement) menu.getPopupMenu(); - defaultManager.setSelectedPath(me); - } - } - - } - - protected ChangeListener changeListener; - - /*ContainerListener that listens to the ContainerEvents fired from menu bar*/ - protected ContainerListener containerListener; - - /*Property change listeners that listener to PropertyChangeEvent from menu bar*/ - private PropertyChangeListener propertyChangeListener; - - /* menu bar for which this UI delegate is for*/ - protected JMenuBar menuBar; - - /* MouseListener that listens to the mouseEvents fired from menu bar*/ - private MouseInputListener mouseListener; - - /** - * Creates a new BasicMenuBarUI object. - */ - public BasicMenuBarUI() - { - changeListener = createChangeListener(); - containerListener = createContainerListener(); - propertyChangeListener = new PropertyChangeHandler(); - mouseListener = new MouseInputHandler(); - } - - /** - * Creates ChangeListener - * - * @return The ChangeListener - */ - protected ChangeListener createChangeListener() - { - return new ChangeHandler(); - } - - /** - * Creates ContainerListener() to listen for ContainerEvents - * fired by JMenuBar. - * - * @return The ContainerListener - */ - protected ContainerListener createContainerListener() - { - return new ContainerHandler(); - } - - /** - * Factory method to create a BasicMenuBarUI for the given {@link - * JComponent}, which should be a {@link JMenuBar}. - * - * @param x The {@link JComponent} a UI is being created for. - * - * @return A BasicMenuBarUI for the {@link JComponent}. - */ - public static ComponentUI createUI(JComponent x) - { - return new BasicMenuBarUI(); - } - - /** - * Returns maximum size for the specified menu bar - * - * @param c component for which to get maximum size - * - * @return Maximum size for the specified menu bar - */ - public Dimension getMaximumSize(JComponent c) - { - // let layout manager calculate its size - return null; - } - - /** - * Returns maximum allowed size of JMenuBar. - * - * @param c menuBar for which to return maximum size - * - * @return Maximum size of the give menu bar. - */ - public Dimension getMinimumSize(JComponent c) - { - // let layout manager calculate its size - return null; - } - - /** - * Returns preferred size of JMenuBar. - * - * @param c menuBar for which to return preferred size - * - * @return Preferred size of the give menu bar. - */ - public Dimension getPreferredSize(JComponent c) - { - // let layout manager calculate its size - return null; - } - - /** - * Initializes any default properties that this UI has from the defaults for - * the Basic look and feel. - */ - protected void installDefaults() - { - LookAndFeel.installBorder(menuBar, "MenuBar.border"); - LookAndFeel.installColorsAndFont(menuBar, "MenuBar.background", - "MenuBar.foreground", "MenuBar.font"); - menuBar.setOpaque(true); - } - - /** - * This method installs the keyboard actions for the JMenuBar. - */ - protected void installKeyboardActions() - { - // Install InputMap. - Object[] bindings = - (Object[]) SharedUIDefaults.get("MenuBar.windowBindings"); - InputMap inputMap = LookAndFeel.makeComponentInputMap(menuBar, bindings); - SwingUtilities.replaceUIInputMap(menuBar, - JComponent.WHEN_IN_FOCUSED_WINDOW, - inputMap); - - // Install ActionMap. - SwingUtilities.replaceUIActionMap(menuBar, getActionMap()); - } - - /** - * Creates and returns the shared action map for JTrees. - * - * @return the shared action map for JTrees - */ - private ActionMap getActionMap() - { - ActionMap am = (ActionMap) UIManager.get("MenuBar.actionMap"); - if (am == null) - { - am = createDefaultActions(); - UIManager.getLookAndFeelDefaults().put("MenuBar.actionMap", am); - } - return am; - } - - /** - * Creates the default actions when there are none specified by the L&F. - * - * @return the default actions - */ - private ActionMap createDefaultActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - Action action = new FocusAction(); - am.put(action.getValue(Action.NAME), action); - return am; - } - - /** - * This method installs the listeners needed for this UI to function. - */ - protected void installListeners() - { - menuBar.addContainerListener(containerListener); - menuBar.addPropertyChangeListener(propertyChangeListener); - menuBar.addMouseListener(mouseListener); - } - - /** - * Installs and initializes all fields for this UI delegate. Any properties - * of the UI that need to be initialized and/or set to defaults will be - * done now. It will also install any listeners necessary. - * - * @param c The {@link JComponent} that is having this UI installed. - */ - public void installUI(JComponent c) - { - super.installUI(c); - menuBar = (JMenuBar) c; - menuBar.setLayout(new BoxLayout(menuBar, BoxLayout.X_AXIS)); - installDefaults(); - installListeners(); - installKeyboardActions(); - } - - /** - * This method uninstalls the defaults and nulls any objects created during - * install. - */ - protected void uninstallDefaults() - { - menuBar.setBackground(null); - menuBar.setBorder(null); - menuBar.setFont(null); - menuBar.setForeground(null); - } - - /** - * This method reverses the work done in installKeyboardActions. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(menuBar, - JComponent.WHEN_IN_FOCUSED_WINDOW, null); - SwingUtilities.replaceUIActionMap(menuBar, null); - } - - /** - * Unregisters all the listeners that this UI delegate was using. - */ - protected void uninstallListeners() - { - menuBar.removeContainerListener(containerListener); - menuBar.removePropertyChangeListener(propertyChangeListener); - menuBar.removeMouseListener(mouseListener); - } - - /** - * Performs the opposite of installUI. Any properties or resources that need - * to be cleaned up will be done now. It will also uninstall any listeners - * it has. In addition, any properties of this UI will be nulled. - * - * @param c The {@link JComponent} that is having this UI uninstalled. - */ - public void uninstallUI(JComponent c) - { - uninstallDefaults(); - uninstallListeners(); - uninstallKeyboardActions(); - menuBar = null; - } - - private class ChangeHandler implements ChangeListener - { - public void stateChanged(ChangeEvent event) - { - // TODO: What should be done here, if anything? - } - } - - /** - * This class handles ContainerEvents fired by JMenuBar. It revalidates - * and repaints menu bar whenever menu is added or removed from it. - */ - private class ContainerHandler implements ContainerListener - { - /** - * This method is called whenever menu is added to the menu bar - * - * @param e The ContainerEvent. - */ - public void componentAdded(ContainerEvent e) - { - menuBar.revalidate(); - menuBar.repaint(); - } - - /** - * This method is called whenever menu is removed from the menu bar. - * - * @param e The ContainerEvent. - */ - public void componentRemoved(ContainerEvent e) - { - menuBar.revalidate(); - menuBar.repaint(); - } - } - - /** - * This class handles PropertyChangeEvents fired from the JMenuBar - */ - private class PropertyChangeHandler implements PropertyChangeListener - { - /** - * This method is called whenever one of the properties of the MenuBar - * changes. - * - * @param e The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals("borderPainted")) - menuBar.repaint(); - if (e.getPropertyName().equals("margin")) - menuBar.repaint(); - } - } - - private class MouseInputHandler implements MouseInputListener - { - /** - * Handles mouse clicked event - * - * @param e Mouse event - */ - public void mouseClicked(MouseEvent e) - { - MenuElement[] me = menuBar.getSubElements(); - - for (int i = 0; i < me.length; i++) - { - JMenu menu = menuBar.getMenu(i); - if (menu != null) - menu.setSelected(false); - } - } - - /** - * Handles mouse pressed event - * - * @param e Mouse event - */ - public void mousePressed(MouseEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * Handles mouse released event - * - * @param e Mouse event - */ - public void mouseReleased(MouseEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * Handles mouse exited event - * - * @param e Mouse event - */ - public void mouseExited(MouseEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * Handles mouse dragged event - * - * @param e Mouse event - */ - public void mouseDragged(MouseEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * Handles mouse moved event - * - * @param e Mouse event - */ - public void mouseMoved(MouseEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * Handles mouse entered event - * - * @param e Mouse event - */ - public void mouseEntered(MouseEvent e) - { - // TODO: What should be done here, if anything? - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java deleted file mode 100644 index 40b5393..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicMenuItemUI.java +++ /dev/null @@ -1,1339 +0,0 @@ -/* BasicMenuItemUI.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.plaf.basic; - -import gnu.classpath.SystemProperties; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.awt.font.FontRenderContext; -import java.awt.font.TextLayout; -import java.awt.geom.AffineTransform; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; - -import javax.swing.AbstractAction; -import javax.swing.AbstractButton; -import javax.swing.ActionMap; -import javax.swing.ButtonModel; -import javax.swing.Icon; -import javax.swing.InputMap; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JComponent; -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.event.MenuDragMouseEvent; -import javax.swing.event.MenuDragMouseListener; -import javax.swing.event.MenuKeyEvent; -import javax.swing.event.MenuKeyListener; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentInputMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.MenuItemUI; -import javax.swing.text.View; - -/** - * UI Delegate for JMenuItem. - */ -public class BasicMenuItemUI extends MenuItemUI -{ - /** - * Font to be used when displaying menu item's accelerator. - */ - protected Font acceleratorFont; - - /** - * Color to be used when displaying menu item's accelerator. - */ - protected Color acceleratorForeground; - - /** - * Color to be used when displaying menu item's accelerator when menu item is - * selected. - */ - protected Color acceleratorSelectionForeground; - - /** - * Icon that is displayed after the text to indicated that this menu contains - * submenu. - */ - protected Icon arrowIcon; - - /** - * Icon that is displayed before the text. This icon is only used in - * JCheckBoxMenuItem or JRadioBoxMenuItem. - */ - protected Icon checkIcon; - - /** - * Number of spaces between icon and text. - */ - protected int defaultTextIconGap = 4; - - /** - * Color of the text when menu item is disabled - */ - protected Color disabledForeground; - - /** - * The menu Drag mouse listener listening to the menu item. - */ - protected MenuDragMouseListener menuDragMouseListener; - - /** - * The menu item itself - */ - protected JMenuItem menuItem; - - /** - * Menu Key listener listening to the menu item. - */ - protected MenuKeyListener menuKeyListener; - - /** - * mouse input listener listening to menu item. - */ - protected MouseInputListener mouseInputListener; - - /** - * Indicates if border should be painted - */ - protected boolean oldBorderPainted; - - /** - * Color of text that is used when menu item is selected - */ - protected Color selectionBackground; - - /** - * Color of the text that is used when menu item is selected. - */ - protected Color selectionForeground; - - /** - * String that separates description of the modifiers and the key - */ - private String acceleratorDelimiter; - - /** - * ItemListener to listen for item changes in the menu item - */ - private ItemListener itemListener; - - /** - * A PropertyChangeListener to make UI updates after property changes. - */ - private PropertyChangeHandler propertyChangeListener; - - /** - * The view rectangle used for layout of the menu item. - */ - private Rectangle viewRect; - - /** - * The rectangle that holds the area of the label. - */ - private Rectangle textRect; - - /** - * The rectangle that holds the area of the accelerator. - */ - private Rectangle accelRect; - - /** - * The rectangle that holds the area of the icon. - */ - private Rectangle iconRect; - - /** - * The rectangle that holds the area of the icon. - */ - private Rectangle arrowIconRect; - - /** - * The rectangle that holds the area of the check icon. - */ - private Rectangle checkIconRect; - - /** - * A rectangle used for temporary storage to avoid creation of new - * rectangles. - */ - private Rectangle cachedRect; - - /** - * A class to handle PropertChangeEvents for the JMenuItem - * @author Anthony Balkissoon abalkiss at redhat dot com. - */ - class PropertyChangeHandler implements PropertyChangeListener - { - /** - * This method is called when a property of the menuItem is changed. - * Currently it is only used to update the accelerator key bindings. - * - * @param e - * the PropertyChangeEvent - */ - public void propertyChange(PropertyChangeEvent e) - { - String property = e.getPropertyName(); - if (property.equals("accelerator")) - { - InputMap map = SwingUtilities.getUIInputMap(menuItem, - JComponent.WHEN_IN_FOCUSED_WINDOW); - if (map != null) - map.remove((KeyStroke) e.getOldValue()); - else - map = new ComponentInputMapUIResource(menuItem); - - KeyStroke accelerator = (KeyStroke) e.getNewValue(); - if (accelerator != null) - map.put(accelerator, "doClick"); - } - // TextLayout caching for speed-up drawing of text. - else if ((property.equals(AbstractButton.TEXT_CHANGED_PROPERTY) - || property.equals("font")) - && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") - == null) - { - AbstractButton b = (AbstractButton) e.getSource(); - String text = b.getText(); - if (text == null) - text = ""; - FontRenderContext frc = new FontRenderContext(new AffineTransform(), - false, false); - TextLayout layout = new TextLayout(text, b.getFont(), frc); - b.putClientProperty(BasicGraphicsUtils.CACHED_TEXT_LAYOUT, layout); - } - } - } - - /** - * A class to handle accelerator keys. This is the Action we will - * perform when the accelerator key for this JMenuItem is pressed. - * @author Anthony Balkissoon abalkiss at redhat dot com - * - */ - class ClickAction extends AbstractAction - { - /** - * This is what is done when the accelerator key for the JMenuItem is - * pressed. - */ - public void actionPerformed(ActionEvent event) - { - doClick(MenuSelectionManager.defaultManager()); - } - } - - /** - * Creates a new BasicMenuItemUI object. - */ - public BasicMenuItemUI() - { - mouseInputListener = createMouseInputListener(menuItem); - menuDragMouseListener = createMenuDragMouseListener(menuItem); - menuKeyListener = createMenuKeyListener(menuItem); - itemListener = new ItemHandler(); - propertyChangeListener = new PropertyChangeHandler(); - - // Initialize rectangles for layout. - viewRect = new Rectangle(); - textRect = new Rectangle(); - iconRect = new Rectangle(); - arrowIconRect = new Rectangle(); - checkIconRect = new Rectangle(); - accelRect = new Rectangle(); - cachedRect = new Rectangle(); - } - - /** - * Create MenuDragMouseListener to listen for mouse dragged events. - * - * @param c - * menu item to listen to - * @return The MenuDragMouseListener - */ - protected MenuDragMouseListener createMenuDragMouseListener(JComponent c) - { - return new MenuDragMouseHandler(); - } - - /** - * Creates MenuKeyListener to listen to key events occuring when menu item is - * visible on the screen. - * - * @param c - * menu item to listen to - * @return The MenuKeyListener - */ - protected MenuKeyListener createMenuKeyListener(JComponent c) - { - return new MenuKeyHandler(); - } - - /** - * Handles mouse input events occuring for this menu item - * - * @param c - * menu item to listen to - * @return The MouseInputListener - */ - protected MouseInputListener createMouseInputListener(JComponent c) - { - return new MouseInputHandler(); - } - - /** - * Factory method to create a BasicMenuItemUI for the given {@link - * JComponent}, which should be a {@link JMenuItem}. - * - * @param c - * The {@link JComponent} a UI is being created for. - * @return A BasicMenuItemUI for the {@link JComponent}. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicMenuItemUI(); - } - - /** - * Programatically clicks menu item. - * - * @param msm - * MenuSelectionManager for the menu hierarchy - */ - protected void doClick(MenuSelectionManager msm) - { - menuItem.doClick(0); - msm.clearSelectedPath(); - } - - /** - * Returns maximum size for the specified menu item - * - * @param c - * component for which to get maximum size - * @return Maximum size for the specified menu item. - */ - public Dimension getMaximumSize(JComponent c) - { - return null; - } - - /** - * Returns minimum size for the specified menu item - * - * @param c - * component for which to get minimum size - * @return Minimum size for the specified menu item. - */ - public Dimension getMinimumSize(JComponent c) - { - return null; - } - - /** - * Returns path to this menu item. - * - * @return $MenuElement[]$ Returns array of menu elements that constitute a - * path to this menu item. - */ - public MenuElement[] getPath() - { - ArrayList path = new ArrayList(); - - Component c = menuItem; - while (c instanceof MenuElement) - { - path.add(0, c); - - if (c instanceof JPopupMenu) - c = ((JPopupMenu) c).getInvoker(); - else - c = c.getParent(); - } - - MenuElement[] pathArray = new MenuElement[path.size()]; - path.toArray(pathArray); - return pathArray; - } - - /** - * Returns preferred size for the given menu item. - * - * @param c - * menu item for which to get preferred size - * @param checkIcon - * check icon displayed in the given menu item - * @param arrowIcon - * arrow icon displayed in the given menu item - * @param defaultTextIconGap - * space between icon and text in the given menuItem - * @return $Dimension$ preferred size for the given menu item - */ - protected Dimension getPreferredMenuItemSize(JComponent c, Icon checkIcon, - Icon arrowIcon, - int defaultTextIconGap) - { - JMenuItem m = (JMenuItem) c; - String accelText = getAcceleratorString(m); - - // Layout the menu item. The result gets stored in the rectangle - // fields of this class. - resetRectangles(null); - layoutMenuItem(m, accelText); - - // The union of the text and icon areas is the label area. - cachedRect.setBounds(textRect); - Rectangle pref = SwingUtilities.computeUnion(iconRect.x, iconRect.y, - iconRect.width, - iconRect.height, - cachedRect); - - // Find the widest menu item text and accelerator and store it in - // client properties of the parent, so that we can align the accelerators - // properly. Of course, we only need can do this, if the parent is - // a JComponent and this menu item is not a toplevel menu. - Container parent = m.getParent(); - if (parent != null && parent instanceof JComponent - && !(m instanceof JMenu && ((JMenu) m).isTopLevelMenu())) - { - JComponent p = (JComponent) parent; - - // The widest text so far. - Integer maxTextWidth = (Integer) p.getClientProperty("maxTextWidth"); - int maxTextValue = maxTextWidth == null ? 0 : maxTextWidth.intValue(); - if (pref.width < maxTextValue) - pref.width = maxTextValue; - else - p.putClientProperty("maxTextWidth", new Integer(pref.width)); - - // The widest accelerator so far. - Integer maxAccelWidth = (Integer) p.getClientProperty("maxAccelWidth"); - int maxAccelValue = maxAccelWidth == null ? 0 - : maxAccelWidth.intValue(); - if (accelRect.width > maxAccelValue) - { - maxAccelValue = accelRect.width; - p.putClientProperty("maxAccelWidth", new Integer(accelRect.width)); - } - pref.width += maxAccelValue; - pref.width += defaultTextIconGap; - } - - // Add arrow and check size if appropriate. - if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu())) - { - pref.width += checkIconRect.width; - pref.width += defaultTextIconGap; - pref.width += arrowIconRect.width; - pref.width += defaultTextIconGap; - } - - // Add a gap ~2 times as wide as the defaultTextIconGap. - pref.width += 2 * defaultTextIconGap; - - // Respect the insets of the menu item. - Insets i = m.getInsets(); - pref.width += i.left + i.right; - pref.height += i.top + i.bottom; - - // Return a copy, so that nobody messes with our textRect. - return pref.getSize(); - } - - /** - * Returns preferred size of the given component - * - * @param c - * component for which to return preferred size - * @return $Dimension$ preferred size for the given component - */ - public Dimension getPreferredSize(JComponent c) - { - return getPreferredMenuItemSize(c, checkIcon, arrowIcon, - defaultTextIconGap); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "MenuItem" - */ - protected String getPropertyPrefix() - { - return "MenuItem"; - } - - /** - * This method installs the components for this {@link JMenuItem}. - * - * @param menuItem - * The {@link JMenuItem} to install components for. - */ - protected void installComponents(JMenuItem menuItem) - { - // FIXME: Need to implement - } - - /** - * This method installs the defaults that are defined in the Basic look and - * feel for this {@link JMenuItem}. - */ - protected void installDefaults() - { - String prefix = getPropertyPrefix(); - LookAndFeel.installBorder(menuItem, prefix + ".border"); - LookAndFeel.installColorsAndFont(menuItem, prefix + ".background", - prefix + ".foreground", prefix + ".font"); - menuItem.setMargin(UIManager.getInsets(prefix + ".margin")); - acceleratorFont = UIManager.getFont(prefix + ".acceleratorFont"); - acceleratorForeground = UIManager.getColor(prefix - + ".acceleratorForeground"); - acceleratorSelectionForeground = UIManager.getColor(prefix - + ".acceleratorSelectionForeground"); - selectionBackground = UIManager.getColor(prefix + ".selectionBackground"); - selectionForeground = UIManager.getColor(prefix + ".selectionForeground"); - acceleratorDelimiter = UIManager.getString(prefix + ".acceleratorDelimiter"); - checkIcon = UIManager.getIcon(prefix + ".checkIcon"); - - menuItem.setHorizontalTextPosition(SwingConstants.TRAILING); - menuItem.setHorizontalAlignment(SwingConstants.LEADING); - } - - /** - * This method installs the keyboard actions for this {@link JMenuItem}. - */ - protected void installKeyboardActions() - { - InputMap focusedWindowMap = SwingUtilities.getUIInputMap(menuItem, - JComponent.WHEN_IN_FOCUSED_WINDOW); - if (focusedWindowMap == null) - focusedWindowMap = new ComponentInputMapUIResource(menuItem); - KeyStroke accelerator = menuItem.getAccelerator(); - if (accelerator != null) - focusedWindowMap.put(accelerator, "doClick"); - SwingUtilities.replaceUIInputMap(menuItem, - JComponent.WHEN_IN_FOCUSED_WINDOW, focusedWindowMap); - - ActionMap UIActionMap = SwingUtilities.getUIActionMap(menuItem); - if (UIActionMap == null) - UIActionMap = new ActionMapUIResource(); - UIActionMap.put("doClick", new ClickAction()); - SwingUtilities.replaceUIActionMap(menuItem, UIActionMap); - } - - /** - * This method installs the listeners for the {@link JMenuItem}. - */ - protected void installListeners() - { - menuItem.addMouseListener(mouseInputListener); - menuItem.addMouseMotionListener(mouseInputListener); - menuItem.addMenuDragMouseListener(menuDragMouseListener); - menuItem.addMenuKeyListener(menuKeyListener); - menuItem.addItemListener(itemListener); - menuItem.addPropertyChangeListener(propertyChangeListener); - // Fire synthetic property change event to let the listener update - // the TextLayout cache. - propertyChangeListener.propertyChange(new PropertyChangeEvent(menuItem, - "font", null, - menuItem.getFont())); - } - - /** - * Installs and initializes all fields for this UI delegate. Any properties of - * the UI that need to be initialized and/or set to defaults will be done now. - * It will also install any listeners necessary. - * - * @param c - * The {@link JComponent} that is having this UI installed. - */ - public void installUI(JComponent c) - { - super.installUI(c); - menuItem = (JMenuItem) c; - installDefaults(); - installComponents(menuItem); - installListeners(); - installKeyboardActions(); - } - - /** - * Paints given menu item using specified graphics context - * - * @param g - * The graphics context used to paint this menu item - * @param c - * Menu Item to paint - */ - public void paint(Graphics g, JComponent c) - { - paintMenuItem(g, c, checkIcon, arrowIcon, selectionBackground, - c.getForeground(), defaultTextIconGap); - } - - /** - * Paints background of the menu item - * - * @param g - * The graphics context used to paint this menu item - * @param menuItem - * menu item to paint - * @param bgColor - * Background color to use when painting menu item - */ - protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) - { - // Menu item is considered to be highlighted when it is selected. - // But we don't want to paint the background of JCheckBoxMenuItems - ButtonModel mod = menuItem.getModel(); - Color saved = g.getColor(); - if (mod.isArmed() || ((menuItem instanceof JMenu) && mod.isSelected())) - { - g.setColor(bgColor); - g.fillRect(0, 0, menuItem.getWidth(), menuItem.getHeight()); - } - else if (menuItem.isOpaque()) - { - g.setColor(menuItem.getBackground()); - g.fillRect(0, 0, menuItem.getWidth(), menuItem.getHeight()); - } - g.setColor(saved); - } - - /** - * Paints specified menu item - * - * @param g - * The graphics context used to paint this menu item - * @param c - * menu item to paint - * @param checkIcon - * check icon to use when painting menu item - * @param arrowIcon - * arrow icon to use when painting menu item - * @param background - * Background color of the menu item - * @param foreground - * Foreground color of the menu item - * @param defaultTextIconGap - * space to use between icon and text when painting menu item - */ - protected void paintMenuItem(Graphics g, JComponent c, Icon checkIcon, - Icon arrowIcon, Color background, - Color foreground, int defaultTextIconGap) - { - JMenuItem m = (JMenuItem) c; - - // Fetch fonts. - Font oldFont = g.getFont(); - Font font = c.getFont(); - g.setFont(font); - FontMetrics accelFm = m.getFontMetrics(acceleratorFont); - - // Create accelerator string. - String accelText = getAcceleratorString(m); - - // Layout menu item. The result gets stored in the rectangle fields - // of this class. - resetRectangles(m); - - layoutMenuItem(m, accelText); - - // Paint the background. - paintBackground(g, m, background); - - Color oldColor = g.getColor(); - - // Paint the check icon. - if (checkIcon != null) - { - checkIcon.paintIcon(m, g, checkIconRect.x, checkIconRect.y); - } - - // Paint the icon. - ButtonModel model = m.getModel(); - if (m.getIcon() != null) - { - // Determine icon depending on the menu item - // state (normal/disabled/pressed). - Icon icon; - if (! m.isEnabled()) - { - icon = m.getDisabledIcon(); - } - else if (model.isPressed() && model.isArmed()) - { - icon = m.getPressedIcon(); - if (icon == null) - { - icon = m.getIcon(); - } - } - else - { - icon = m.getIcon(); - } - - if (icon != null) - { - icon.paintIcon(m, g, iconRect.x, iconRect.y); - } - } - - // Paint the text. - String text = m.getText(); - if (text != null) - { - // Handle HTML. - View html = (View) m.getClientProperty(BasicHTML.propertyKey); - if (html != null) - { - html.paint(g, textRect); - } - else - { - paintText(g, m, textRect, text); - } - } - - // Paint accelerator text. - if (! accelText.equals("")) - { - // Align the accelerator text. In getPreferredMenuItemSize() we - // store a client property 'maxAccelWidth' in the parent which holds - // the maximum accelerator width for the children of this parent. - // We use this here to align the accelerators properly. - int accelOffset = 0; - Container parent = m.getParent(); - if (parent != null && parent instanceof JComponent) - { - JComponent p = (JComponent) parent; - Integer maxAccelWidth = - (Integer) p.getClientProperty("maxAccelWidth"); - int maxAccelValue = maxAccelWidth == null ? 0 - : maxAccelWidth.intValue(); - accelOffset = maxAccelValue - accelRect.width; - } - - g.setFont(acceleratorFont); - if (! m.isEnabled()) - { - // Paint accelerator disabled. - g.setColor(disabledForeground); - } - else - { - if (m.isArmed() || (m instanceof JMenu && m.isSelected())) - g.setColor(acceleratorSelectionForeground); - else - g.setColor(acceleratorForeground); - } - g.drawString(accelText, accelRect.x - accelOffset, - accelRect.y + accelFm.getAscent()); - } - - // Paint arrow. - if (arrowIcon != null - && ! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu())) - { - arrowIcon.paintIcon(m, g, arrowIconRect.x, arrowIconRect.y); - } - - g.setFont(oldFont); - g.setColor(oldColor); - - } - - /** - * Paints label for the given menu item - * - * @param g - * The graphics context used to paint this menu item - * @param menuItem - * menu item for which to draw its label - * @param textRect - * rectangle specifiying position of the text relative to the given - * menu item - * @param text - * label of the menu item - */ - protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, - String text) - { - Font f = menuItem.getFont(); - g.setFont(f); - FontMetrics fm = g.getFontMetrics(f); - - if (text != null && !text.equals("")) - { - if (menuItem.isEnabled()) - { - // Menu item is considered to be highlighted when it is selected. - // But not if it's a JCheckBoxMenuItem - ButtonModel mod = menuItem.getModel(); - if ((menuItem.isSelected() && checkIcon == null) - || (mod != null && mod.isArmed()) - && (menuItem.getParent() instanceof MenuElement)) - g.setColor(selectionForeground); - else - g.setColor(menuItem.getForeground()); - } - else - // FIXME: should fix this to use 'disabledForeground', but its - // default value in BasicLookAndFeel is null. - - // FIXME: should there be different foreground colours for selected - // or deselected, when disabled? - g.setColor(Color.gray); - - int mnemonicIndex = menuItem.getDisplayedMnemonicIndex(); - - if (mnemonicIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(menuItem, g, text, - mnemonicIndex, - textRect.x, - textRect.y - + fm.getAscent()); - else - BasicGraphicsUtils.drawString(menuItem, g, text, 0, textRect.x, - textRect.y + fm.getAscent()); - } - } - - /** - * This method uninstalls the components for this {@link JMenuItem}. - * - * @param menuItem - * The {@link JMenuItem} to uninstall components for. - */ - protected void uninstallComponents(JMenuItem menuItem) - { - // FIXME: need to implement - } - - /** - * This method uninstalls the defaults and sets any objects created during - * install to null - */ - protected void uninstallDefaults() - { - menuItem.setForeground(null); - menuItem.setBackground(null); - menuItem.setBorder(null); - menuItem.setMargin(null); - menuItem.setBackground(null); - menuItem.setBorder(null); - menuItem.setFont(null); - menuItem.setForeground(null); - menuItem.setMargin(null); - acceleratorFont = null; - acceleratorForeground = null; - acceleratorSelectionForeground = null; - arrowIcon = null; - selectionBackground = null; - selectionForeground = null; - acceleratorDelimiter = null; - } - - /** - * Uninstalls any keyboard actions. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(menuItem, - JComponent.WHEN_IN_FOCUSED_WINDOW, null); - } - - /** - * Unregisters all the listeners that this UI delegate was using. - */ - protected void uninstallListeners() - { - menuItem.removeMouseListener(mouseInputListener); - menuItem.removeMenuDragMouseListener(menuDragMouseListener); - menuItem.removeMenuKeyListener(menuKeyListener); - menuItem.removeItemListener(itemListener); - menuItem.removePropertyChangeListener(propertyChangeListener); - } - - /** - * Performs the opposite of installUI. Any properties or resources that need - * to be cleaned up will be done now. It will also uninstall any listeners it - * has. In addition, any properties of this UI will be nulled. - * - * @param c - * The {@link JComponent} that is having this UI uninstalled. - */ - public void uninstallUI(JComponent c) - { - uninstallListeners(); - uninstallDefaults(); - uninstallComponents(menuItem); - c.putClientProperty(BasicGraphicsUtils.CACHED_TEXT_LAYOUT, null); - menuItem = null; - } - - /** - * This method calls paint. - * - * @param g - * The graphics context used to paint this menu item - * @param c - * The menu item to paint - */ - public void update(Graphics g, JComponent c) - { - paint(g, c); - } - - /** - * This class handles mouse events occuring inside the menu item. Most of the - * events are forwarded for processing to MenuSelectionManager of the current - * menu hierarchy. - */ - protected class MouseInputHandler implements MouseInputListener - { - /** - * Creates a new MouseInputHandler object. - */ - protected MouseInputHandler() - { - // Nothing to do here. - } - - /** - * This method is called when mouse is clicked on the menu item. It forwards - * this event to MenuSelectionManager. - * - * @param e - * A {@link MouseEvent}. - */ - public void mouseClicked(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - /** - * This method is called when mouse is dragged inside the menu item. It - * forwards this event to MenuSelectionManager. - * - * @param e - * A {@link MouseEvent}. - */ - public void mouseDragged(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - /** - * This method is called when mouse enters menu item. When this happens menu - * item is considered to be selected and selection path in - * MenuSelectionManager is set. This event is also forwarded to - * MenuSelection Manager for further processing. - * - * @param e - * A {@link MouseEvent}. - */ - public void mouseEntered(MouseEvent e) - { - Component source = (Component) e.getSource(); - if (source.getParent() instanceof MenuElement) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.setSelectedPath(getPath()); - manager.processMouseEvent(e); - } - } - - /** - * This method is called when mouse exits menu item. The event is forwarded - * to MenuSelectionManager for processing. - * - * @param e - * A {@link MouseEvent}. - */ - public void mouseExited(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - /** - * This method is called when mouse is inside the menu item. This event is - * forwarder to MenuSelectionManager for further processing. - * - * @param e - * A {@link MouseEvent}. - */ - public void mouseMoved(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - /** - * This method is called when mouse is pressed. This event is forwarded to - * MenuSelectionManager for further processing. - * - * @param e - * A {@link MouseEvent}. - */ - public void mousePressed(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - /** - * This method is called when mouse is released. If the mouse is released - * inside this menuItem, then this menu item is considered to be chosen and - * the menu hierarchy should be closed. - * - * @param e - * A {@link MouseEvent}. - */ - public void mouseReleased(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - int x = e.getX(); - int y = e.getY(); - if (x > 0 && x < menuItem.getWidth() && y > 0 - && y < menuItem.getHeight()) - { - doClick(manager); - } - else - manager.processMouseEvent(e); - } - } - - /** - * This class handles mouse dragged events. - */ - private class MenuDragMouseHandler implements MenuDragMouseListener - { - /** - * Tbis method is invoked when mouse is dragged over the menu item. - * - * @param e - * The MenuDragMouseEvent - */ - public void menuDragMouseDragged(MenuDragMouseEvent e) - { - MenuSelectionManager manager = e.getMenuSelectionManager(); - manager.setSelectedPath(e.getPath()); - } - - /** - * Tbis method is invoked when mouse enters the menu item while it is being - * dragged. - * - * @param e - * The MenuDragMouseEvent - */ - public void menuDragMouseEntered(MenuDragMouseEvent e) - { - MenuSelectionManager manager = e.getMenuSelectionManager(); - manager.setSelectedPath(e.getPath()); - } - - /** - * Tbis method is invoked when mouse exits the menu item while it is being - * dragged - * - * @param e the MenuDragMouseEvent - */ - public void menuDragMouseExited(MenuDragMouseEvent e) - { - // Nothing to do here yet. - } - - /** - * Tbis method is invoked when mouse was dragged and released inside the - * menu item. - * - * @param e - * The MenuDragMouseEvent - */ - public void menuDragMouseReleased(MenuDragMouseEvent e) - { - MenuSelectionManager manager = e.getMenuSelectionManager(); - int x = e.getX(); - int y = e.getY(); - if (x >= 0 && x < menuItem.getWidth() && y >= 0 - && y < menuItem.getHeight()) - doClick(manager); - else - manager.clearSelectedPath(); - } - } - - /** - * This class handles key events occuring when menu item is visible on the - * screen. - */ - private class MenuKeyHandler implements MenuKeyListener - { - /** - * This method is invoked when key has been pressed - * - * @param e - * A {@link MenuKeyEvent}. - */ - public void menuKeyPressed(MenuKeyEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * This method is invoked when key has been pressed - * - * @param e - * A {@link MenuKeyEvent}. - */ - public void menuKeyReleased(MenuKeyEvent e) - { - // TODO: What should be done here, if anything? - } - - /** - * This method is invoked when key has been typed It handles the mnemonic - * key for the menu item. - * - * @param e - * A {@link MenuKeyEvent}. - */ - public void menuKeyTyped(MenuKeyEvent e) - { - // TODO: What should be done here, if anything? - } - } - - /** - * Helper class that listens for item changes to the properties of the {@link - * JMenuItem}. - */ - private class ItemHandler implements ItemListener - { - /** - * This method is called when one of the menu item changes. - * - * @param evt A {@link ItemEvent}. - */ - public void itemStateChanged(ItemEvent evt) - { - boolean state = false; - if (menuItem instanceof JCheckBoxMenuItem) - { - if (evt.getStateChange() == ItemEvent.SELECTED) - state = true; - ((JCheckBoxMenuItem) menuItem).setState(state); - } - menuItem.revalidate(); - menuItem.repaint(); - } - } - - /** - * A helper method to create the accelerator string from the menu item's - * accelerator property. The returned string is empty if there is - * no accelerator defined. - * - * @param m the menu item - * - * @return the accelerator string, not null - */ - private String getAcceleratorString(JMenuItem m) - { - // Create accelerator string. - KeyStroke accel = m.getAccelerator(); - String accelText = ""; - if (accel != null) - { - int mods = accel.getModifiers(); - if (mods > 0) - { - accelText = KeyEvent.getKeyModifiersText(mods); - accelText += acceleratorDelimiter; - } - int keycode = accel.getKeyCode(); - if (keycode != 0) - accelText += KeyEvent.getKeyText(keycode); - else - accelText += accel.getKeyChar(); - } - return accelText; - } - - /** - * Resets the cached layout rectangles. If <code>i</code> is not null, then - * the view rectangle is set to the inner area of the component, otherwise - * it is set to (0, 0, Short.MAX_VALUE, Short.MAX_VALUE), this is needed - * for layouting. - * - * @param i the component for which to initialize the rectangles - */ - private void resetRectangles(JMenuItem i) - { - // Reset rectangles. - iconRect.setBounds(0, 0, 0, 0); - textRect.setBounds(0, 0, 0, 0); - accelRect.setBounds(0, 0, 0, 0); - checkIconRect.setBounds(0, 0, 0, 0); - arrowIconRect.setBounds(0, 0, 0, 0); - if (i == null) - viewRect.setBounds(0, 0, Short.MAX_VALUE, Short.MAX_VALUE); - else - { - Insets insets = i.getInsets(); - viewRect.setBounds(insets.left, insets.top, - i.getWidth() - insets.left - insets.right, - i.getHeight() - insets.top - insets.bottom); - } - } - - /** - * A helper method that lays out the menu item. The layout is stored - * in the fields of this class. - * - * @param m the menu item to layout - * @param accelText the accelerator text - */ - private void layoutMenuItem(JMenuItem m, String accelText) - { - // Fetch the fonts. - Font font = m.getFont(); - FontMetrics fm = m.getFontMetrics(font); - FontMetrics accelFm = m.getFontMetrics(acceleratorFont); - - String text = m.getText(); - SwingUtilities.layoutCompoundLabel(m, fm, text, m.getIcon(), - m.getVerticalAlignment(), - m.getHorizontalAlignment(), - m.getVerticalTextPosition(), - m.getHorizontalTextPosition(), - viewRect, iconRect, textRect, - defaultTextIconGap); - - // Initialize accelerator width and height. - if (! accelText.equals("")) - { - accelRect.width = accelFm.stringWidth(accelText); - accelRect.height = accelFm.getHeight(); - } - - // Initialize check and arrow icon width and height. - if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu())) - { - if (checkIcon != null) - { - checkIconRect.width = checkIcon.getIconWidth(); - checkIconRect.height = checkIcon.getIconHeight(); - } - if (arrowIcon != null) - { - arrowIconRect.width = arrowIcon.getIconWidth(); - arrowIconRect.height = arrowIcon.getIconHeight(); - } - } - - // The union of the icon and text of the menu item is the 'label area'. - cachedRect.setBounds(textRect); - Rectangle labelRect = SwingUtilities.computeUnion(iconRect.x, - iconRect.y, - iconRect.width, - iconRect.height, - cachedRect); - textRect.x += defaultTextIconGap; - iconRect.x += defaultTextIconGap; - - // Layout accelerator rect. - accelRect.x = viewRect.x + viewRect.width - arrowIconRect.width - - defaultTextIconGap - accelRect.width; - // Layout check and arrow icons only when not in toplevel menu. - if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu())) - { - checkIconRect.x = viewRect.x + defaultTextIconGap; - textRect.x += defaultTextIconGap + checkIconRect.width; - iconRect.x += defaultTextIconGap + checkIconRect.width; - arrowIconRect.x = viewRect.x + viewRect.width - defaultTextIconGap - - arrowIconRect.width; - } - - // Align the accelerator text and all the icons vertically centered to - // the menu text. - accelRect.y = labelRect.y + (labelRect.height / 2) - - (accelRect.height / 2); - if (! (m instanceof JMenu && ((JMenu) m).isTopLevelMenu())) - { - arrowIconRect.y = labelRect.y + (labelRect.height / 2) - - (arrowIconRect.height / 2); - checkIconRect.y = labelRect.y + (labelRect.height / 2) - - (checkIconRect.height / 2); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java deleted file mode 100644 index 4897ee4..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicMenuUI.java +++ /dev/null @@ -1,678 +0,0 @@ -/* BasicMenuUI.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.plaf.basic; - -import gnu.classpath.NotImplementedException; - -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Point; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.JComponent; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JPopupMenu; -import javax.swing.LookAndFeel; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; -import javax.swing.Timer; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.MenuDragMouseEvent; -import javax.swing.event.MenuDragMouseListener; -import javax.swing.event.MenuEvent; -import javax.swing.event.MenuKeyEvent; -import javax.swing.event.MenuKeyListener; -import javax.swing.event.MenuListener; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ComponentUI; - -/** - * UI Delegate for JMenu - */ -public class BasicMenuUI extends BasicMenuItemUI -{ - /** - * Selects a menu. This is used to delay menu selection. - */ - class SelectMenuAction - extends AbstractAction - { - /** - * Performs the action. - */ - public void actionPerformed(ActionEvent event) - { - JMenu menu = (JMenu) menuItem; - MenuSelectionManager defaultManager = - MenuSelectionManager.defaultManager(); - MenuElement path[] = defaultManager.getSelectedPath(); - if(path.length > 0 && path[path.length - 1] == menu) - { - MenuElement newPath[] = new MenuElement[path.length + 1]; - System.arraycopy(path, 0, newPath, 0, path.length); - newPath[path.length] = menu.getPopupMenu(); - defaultManager.setSelectedPath(newPath); - } - } - - } - - protected ChangeListener changeListener; - - /* MenuListener listens to MenuEvents fired by JMenu */ - protected MenuListener menuListener; - - /* PropertyChangeListner that listens to propertyChangeEvents occuring in JMenu*/ - protected PropertyChangeListener propertyChangeListener; - - /** - * Creates a new BasicMenuUI object. - */ - public BasicMenuUI() - { - mouseInputListener = createMouseInputListener((JMenu) menuItem); - menuListener = createMenuListener((JMenu) menuItem); - propertyChangeListener = createPropertyChangeListener((JMenu) menuItem); - } - - /** - * This method creates a new ChangeListener. - * - * @return A new ChangeListener. - */ - protected ChangeListener createChangeListener(JComponent c) - { - return new ChangeHandler((JMenu) c, this); - } - - /** - * This method creates new MenuDragMouseListener to listen to mouse dragged events - * occuring in the Menu - * - * @param c the menu to listen to - * - * @return The MenuDrageMouseListener - */ - protected MenuDragMouseListener createMenuDragMouseListener(JComponent c) - { - return new MenuDragMouseHandler(); - } - - /** - * This method creates new MenuDragKeyListener to listen to key events - * - * @param c the menu to listen to - * - * @return The MenuKeyListener - */ - protected MenuKeyListener createMenuKeyListener(JComponent c) - { - return new MenuKeyHandler(); - } - - /** - * This method creates new MenuListener to listen to menu events - * occuring in the Menu - * - * @param c the menu to listen to - * - * @return The MenuListener - */ - protected MenuListener createMenuListener(JComponent c) - { - return new MenuHandler(); - } - - /** - * This method creates new MouseInputListener to listen to mouse input events - * occuring in the Menu - * - * @param c the menu to listen to - * - * @return The MouseInputListener - */ - protected MouseInputListener createMouseInputListener(JComponent c) - { - return new MouseInputHandler(); - } - - /** - * This method creates newPropertyChangeListener to listen to property changes - * occuring in the Menu - * - * @param c the menu to listen to - * - * @return The PropertyChangeListener - */ - protected PropertyChangeListener createPropertyChangeListener(JComponent c) - { - return new PropertyChangeHandler(); - } - - /** - * This method creates a new BasicMenuUI. - * - * @param c The JComponent to create a UI for. - * - * @return A new BasicMenuUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicMenuUI(); - } - - /** - * Get the component's maximum size. - * - * @param c The JComponent for which to get maximum size - * - * @return The maximum size of the component - */ - public Dimension getMaximumSize(JComponent c) - { - return c.getPreferredSize(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "Menu" - */ - protected String getPropertyPrefix() - { - return "Menu"; - } - - /** - * Initializes any default properties that this UI has from the defaults for - * the Basic look and feel. - */ - protected void installDefaults() - { - - LookAndFeel.installBorder(menuItem, "Menu.border"); - LookAndFeel.installColorsAndFont(menuItem, "Menu.background", - "Menu.foreground", "Menu.font"); - menuItem.setMargin(UIManager.getInsets("Menu.margin")); - acceleratorFont = UIManager.getFont("Menu.acceleratorFont"); - acceleratorForeground = UIManager.getColor("Menu.acceleratorForeground"); - acceleratorSelectionForeground = UIManager.getColor("Menu.acceleratorSelectionForeground"); - selectionBackground = UIManager.getColor("Menu.selectionBackground"); - selectionForeground = UIManager.getColor("Menu.selectionForeground"); - arrowIcon = UIManager.getIcon("Menu.arrowIcon"); - oldBorderPainted = UIManager.getBoolean("Menu.borderPainted"); - ((JMenu) menuItem).setDelay(200); - } - - /** - * Installs any keyboard actions. The list of keys that need to be bound are - * listed in Basic look and feel's defaults. - * - */ - protected void installKeyboardActions() - { - super.installKeyboardActions(); - } - - /** - * Creates and registers all the listeners for this UI delegate. - */ - protected void installListeners() - { - super.installListeners(); - ((JMenu) menuItem).addMenuListener(menuListener); - } - - protected void setupPostTimer(JMenu menu) - { - Timer timer = new Timer(menu.getDelay(), new SelectMenuAction()); - timer.setRepeats(false); - timer.start(); - } - - /** - * This method uninstalls the defaults and sets any objects created during - * install to null - */ - protected void uninstallDefaults() - { - menuItem.setBackground(null); - menuItem.setBorder(null); - menuItem.setFont(null); - menuItem.setForeground(null); - menuItem.setMargin(null); - acceleratorFont = null; - acceleratorForeground = null; - acceleratorSelectionForeground = null; - selectionBackground = null; - selectionForeground = null; - arrowIcon = null; - } - - /** - * Uninstalls any keyboard actions. The list of keys used are listed in - * Basic look and feel's defaults. - */ - protected void uninstallKeyboardActions() - { - super.installKeyboardActions(); - } - - /** - * Unregisters all the listeners that this UI delegate was using. In - * addition, it will also null any listeners that it was using. - */ - protected void uninstallListeners() - { - super.uninstallListeners(); - ((JMenu) menuItem).removeMenuListener(menuListener); - } - - /** - * This class is used by menus to handle mouse events occuring in the - * menu. - */ - protected class MouseInputHandler implements MouseInputListener - { - public void mouseClicked(MouseEvent e) - { - // Nothing to do here. - } - - public void mouseDragged(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - private boolean popupVisible() - { - JMenuBar mb = (JMenuBar) ((JMenu) menuItem).getParent(); - // check if mb.isSelected because if no menus are selected - // we don't have to look through the list for popup menus - if (!mb.isSelected()) - return false; - for (int i = 0; i < mb.getMenuCount(); i++) - { - JMenu m = mb.getMenu(i); - if (m != null && m.isPopupMenuVisible()) - return true; - } - return false; - } - - public void mouseEntered(MouseEvent e) - { - JMenu menu = (JMenu) menuItem; - if (menu.isEnabled()) - { - MenuSelectionManager manager = - MenuSelectionManager.defaultManager(); - MenuElement[] selectedPath = manager.getSelectedPath(); - if (! menu.isTopLevelMenu()) - { - // Open the menu immediately or delayed, depending on the - // delay value. - if(! (selectedPath.length > 0 - && selectedPath[selectedPath.length - 1] == menu.getPopupMenu())) - { - if(menu.getDelay() == 0) - { - MenuElement[] path = getPath(); - MenuElement[] newPath = new MenuElement[path.length + 1]; - System.arraycopy(path, 0, newPath, 0, path.length); - newPath[path.length] = menu.getPopupMenu(); - manager.setSelectedPath(newPath); - } - else - { - manager.setSelectedPath(getPath()); - setupPostTimer(menu); - } - } - } - else - { - if(selectedPath.length > 0 - && selectedPath[0] == menu.getParent()) - { - MenuElement[] newPath = new MenuElement[3]; - newPath[0] = (MenuElement) menu.getParent(); - newPath[1] = menu; - newPath[2] = menu.getPopupMenu(); - manager.setSelectedPath(newPath); - } - } - } - } - - public void mouseExited(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - - public void mouseMoved(MouseEvent e) - { - // Nothing to do here. - } - - public void mousePressed(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - JMenu menu = (JMenu) menuItem; - if (menu.isEnabled()) - { - // Open up the menu immediately if it's a toplevel menu. - // But not yet the popup, which might be opened delayed, see below. - if (menu.isTopLevelMenu()) - { - if (menu.isSelected()) - manager.clearSelectedPath(); - else - { - Container cnt = menu.getParent(); - if (cnt != null && cnt instanceof JMenuBar) - { - MenuElement[] me = new MenuElement[2]; - me[0] = (MenuElement) cnt; - me[1] = menu; - manager.setSelectedPath(me); - } - } - } - - // Open the menu's popup. Either do that immediately if delay == 0, - // or delayed when delay > 0. - MenuElement[] selectedPath = manager.getSelectedPath(); - if (selectedPath.length > 0 - && selectedPath[selectedPath.length - 1] != menu.getPopupMenu()) - { - if(menu.isTopLevelMenu() || menu.getDelay() == 0) - { - MenuElement[] newPath = - new MenuElement[selectedPath.length + 1]; - System.arraycopy(selectedPath, 0, newPath, 0, - selectedPath.length); - newPath[selectedPath.length] = menu.getPopupMenu(); - manager.setSelectedPath(newPath); - } - else - { - setupPostTimer(menu); - } - } - - } - } - - public void mouseReleased(MouseEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.processMouseEvent(e); - } - } - - /** - * This class handles MenuEvents fired by the JMenu - */ - private class MenuHandler implements MenuListener - { - /** - * This method is called when menu is cancelled. The menu is cancelled - * when its popup menu is closed without selection. It clears selected index - * in the selectionModel of the menu parent. - * - * @param e The MenuEvent. - */ - public void menuCanceled(MenuEvent e) - { - menuDeselected(e); - } - - /** - * This method is called when menu is deselected. It clears selected index - * in the selectionModel of the menu parent. - * - * @param e The MenuEvent. - */ - public void menuDeselected(MenuEvent e) - { - JMenu menu = (JMenu) menuItem; - if (menu.getParent() != null) - { - if (menu.isTopLevelMenu()) - ((JMenuBar) menu.getParent()).getSelectionModel().clearSelection(); - else - ((JPopupMenu) menu.getParent()).getSelectionModel().clearSelection(); - } - } - - /** - * This method is called when menu is selected. It sets selected index - * in the selectionModel of the menu parent. - * - * @param e The MenuEvent. - */ - public void menuSelected(MenuEvent e) - { - JMenu menu = (JMenu) menuItem; - if (menu.isTopLevelMenu()) - ((JMenuBar) menu.getParent()).setSelected(menu); - else - ((JPopupMenu) menu.getParent()).setSelected(menu); - } - } - - /** - * Obsolete as of JDK1.4. - */ - public class ChangeHandler implements ChangeListener - { - /** - * Not used. - */ - public boolean isSelected; - - /** - * Not used. - */ - public JMenu menu; - - /** - * Not used. - */ - public BasicMenuUI ui; - - /** - * Not used. - */ - public Component wasFocused; - - /** - * Not used. - */ - public ChangeHandler(JMenu m, BasicMenuUI ui) - { - menu = m; - this.ui = ui; - } - - /** - * Not used. - */ - public void stateChanged(ChangeEvent e) - { - // Not used. - } - } - - /** - * This class handles mouse dragged events occuring in the menu. - */ - private class MenuDragMouseHandler implements MenuDragMouseListener - { - /** - * This method is invoked when mouse is dragged over the menu item. - * - * @param e The MenuDragMouseEvent - */ - public void menuDragMouseDragged(MenuDragMouseEvent e) - { - if (menuItem.isEnabled()) - { - MenuSelectionManager manager = e.getMenuSelectionManager(); - MenuElement path[] = e.getPath(); - - Point p = e.getPoint(); - if(p.x >= 0 && p.x < menuItem.getWidth() - && p.y >= 0 && p.y < menuItem.getHeight()) - { - JMenu menu = (JMenu) menuItem; - MenuElement[] selectedPath = manager.getSelectedPath(); - if(! (selectedPath.length > 0 - && selectedPath[selectedPath.length-1] - == menu.getPopupMenu())) - { - if(menu.isTopLevelMenu() || menu.getDelay() == 0 - || e.getID() == MouseEvent.MOUSE_DRAGGED) - { - MenuElement[] newPath = new MenuElement[path.length + 1]; - System.arraycopy(path, 0, newPath, 0, path.length); - newPath[path.length] = menu.getPopupMenu(); - manager.setSelectedPath(newPath); - } - else - { - manager.setSelectedPath(path); - setupPostTimer(menu); - } - } - } - else if (e.getID() == MouseEvent.MOUSE_RELEASED) - { - Component comp = manager.componentForPoint(e.getComponent(), - e.getPoint()); - if (comp == null) - manager.clearSelectedPath(); - } - } - } - - /** - * This method is invoked when mouse enters the menu item while it is - * being dragged. - * - * @param e The MenuDragMouseEvent - */ - public void menuDragMouseEntered(MenuDragMouseEvent e) - { - // Nothing to do here. - } - - /** - * This method is invoked when mouse exits the menu item while - * it is being dragged - * - * @param e The MenuDragMouseEvent - */ - public void menuDragMouseExited(MenuDragMouseEvent e) - { - // Nothing to do here. - } - - /** - * This method is invoked when mouse was dragged and released - * inside the menu item. - * - * @param e The MenuDragMouseEvent - */ - public void menuDragMouseReleased(MenuDragMouseEvent e) - { - // Nothing to do here. - } - } - - /** - * This class handles key events occuring when menu item is visible on the - * screen. - */ - private class MenuKeyHandler implements MenuKeyListener - { - /** - * This method is invoked when key has been pressed - * - * @param e A {@link MenuKeyEvent}. - */ - public void menuKeyPressed(MenuKeyEvent e) - { - // Nothing to do here. - } - - /** - * This method is invoked when key has been pressed - * - * @param e A {@link MenuKeyEvent}. - */ - public void menuKeyReleased(MenuKeyEvent e) - { - // Nothing to do here. - } - - /** - * This method is invoked when key has been typed - * It handles the mnemonic key for the menu item. - * - * @param e A {@link MenuKeyEvent}. - */ - public void menuKeyTyped(MenuKeyEvent e) - throws NotImplementedException - { - // TODO: What should be done here, if anything? - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java deleted file mode 100644 index a03d224..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicOptionPaneUI.java +++ /dev/null @@ -1,1404 +0,0 @@ -/* BasicOptionPaneUI.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Polygon; -import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyVetoException; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.Icon; -import javax.swing.InputMap; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JInternalFrame; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.OptionPaneUI; - -/** - * This class is the UI delegate for JOptionPane in the Basic Look and Feel. - */ -public class BasicOptionPaneUI extends OptionPaneUI -{ - /** - * Implements the "close" keyboard action. - */ - static class OptionPaneCloseAction - extends AbstractAction - { - - public void actionPerformed(ActionEvent event) - { - JOptionPane op = (JOptionPane) event.getSource(); - op.setValue(new Integer(JOptionPane.CLOSED_OPTION)); - } - - } - - /** - * This is a helper class that listens to the buttons located at the bottom - * of the JOptionPane. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class ButtonActionListener implements ActionListener - { - /** The index of the option this button represents. */ - protected int buttonIndex; - - /** - * Creates a new ButtonActionListener object with the given buttonIndex. - * - * @param buttonIndex The index of the option this button represents. - */ - public ButtonActionListener(int buttonIndex) - { - this.buttonIndex = buttonIndex; - } - - /** - * This method is called when one of the option buttons are pressed. - * - * @param e The ActionEvent. - */ - public void actionPerformed(ActionEvent e) - { - Object value = new Integer(JOptionPane.CLOSED_OPTION); - Object[] options = optionPane.getOptions(); - if (options != null) - value = new Integer(buttonIndex); - else - { - String text = ((JButton) e.getSource()).getText(); - if (text.equals(OK_STRING)) - value = new Integer(JOptionPane.OK_OPTION); - if (text.equals(CANCEL_STRING)) - value = new Integer(JOptionPane.CANCEL_OPTION); - if (text.equals(YES_STRING)) - value = new Integer(JOptionPane.YES_OPTION); - if (text.equals(NO_STRING)) - value = new Integer(JOptionPane.NO_OPTION); - } - optionPane.setValue(value); - resetInputValue(); - - Window owner = SwingUtilities.windowForComponent(optionPane); - - if (owner instanceof JDialog) - ((JDialog) owner).dispose(); - - //else we probably have some kind of internal frame. - JInternalFrame inf = (JInternalFrame) SwingUtilities.getAncestorOfClass( - JInternalFrame.class, optionPane); - if (inf != null) - { - try - { - inf.setClosed(true); - } - catch (PropertyVetoException pve) - { - // We do nothing if attempt has been vetoed. - } - } - } - } - - /** - * This helper layout manager is responsible for the layout of the button - * area. The button area is the panel that holds the buttons which - * represent the options. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public static class ButtonAreaLayout implements LayoutManager - { - /** Whether this layout will center the buttons. */ - protected boolean centersChildren = true; - - /** The space between the buttons. */ - protected int padding; - - /** Whether the buttons will share the same widths. */ - protected boolean syncAllWidths; - - /** The width of the widest button. */ - private transient int widthOfWidestButton; - - /** The height of the tallest button. */ - private transient int tallestButton; - - /** - * Creates a new ButtonAreaLayout object with the given sync widths - * property and padding. - * - * @param syncAllWidths Whether the buttons will share the same widths. - * @param padding The padding between the buttons. - */ - public ButtonAreaLayout(boolean syncAllWidths, int padding) - { - this.syncAllWidths = syncAllWidths; - this.padding = padding; - } - - /** - * This method is called when a component is added to the container. - * - * @param string The constraints string. - * @param comp The component added. - */ - public void addLayoutComponent(String string, Component comp) - { - // Do nothing. - } - - /** - * This method returns whether the children will be centered. - * - * @return Whether the children will be centered. - */ - public boolean getCentersChildren() - { - return centersChildren; - } - - /** - * This method returns the amount of space between components. - * - * @return The amount of space between components. - */ - public int getPadding() - { - return padding; - } - - /** - * This method returns whether all components will share widths (set to - * largest width). - * - * @return Whether all components will share widths. - */ - public boolean getSyncAllWidths() - { - return syncAllWidths; - } - - /** - * This method lays out the given container. - * - * @param container The container to lay out. - */ - public void layoutContainer(Container container) - { - Component[] buttonList = container.getComponents(); - int x = container.getInsets().left; - if (getCentersChildren()) - x += (int) ((double) (container.getSize().width) / 2 - - (double) (buttonRowLength(container)) / 2); - for (int i = 0; i < buttonList.length; i++) - { - Dimension dims = buttonList[i].getPreferredSize(); - if (syncAllWidths) - { - buttonList[i].setBounds(x, 0, widthOfWidestButton, dims.height); - x += widthOfWidestButton + getPadding(); - } - else - { - buttonList[i].setBounds(x, 0, dims.width, dims.height); - x += dims.width + getPadding(); - } - } - } - - /** - * This method returns the width of the given container taking into - * consideration the padding and syncAllWidths. - * - * @param c The container to calculate width for. - * - * @return The width of the given container. - */ - private int buttonRowLength(Container c) - { - Component[] buttonList = c.getComponents(); - - int buttonLength = 0; - int widest = 0; - int tallest = 0; - - for (int i = 0; i < buttonList.length; i++) - { - Dimension dims = buttonList[i].getPreferredSize(); - buttonLength += dims.width + getPadding(); - widest = Math.max(widest, dims.width); - tallest = Math.max(tallest, dims.height); - } - - widthOfWidestButton = widest; - tallestButton = tallest; - - int width; - if (getSyncAllWidths()) - width = widest * buttonList.length - + getPadding() * (buttonList.length - 1); - else - width = buttonLength; - - Insets insets = c.getInsets(); - width += insets.left + insets.right; - - return width; - } - - /** - * This method returns the minimum layout size for the given container. - * - * @param c The container to measure. - * - * @return The minimum layout size. - */ - public Dimension minimumLayoutSize(Container c) - { - return preferredLayoutSize(c); - } - - /** - * This method returns the preferred size of the given container. - * - * @param c The container to measure. - * - * @return The preferred size. - */ - public Dimension preferredLayoutSize(Container c) - { - int w = buttonRowLength(c); - - return new Dimension(w, tallestButton); - } - - /** - * This method removes the given component from the layout manager's - * knowledge. - * - * @param c The component to remove. - */ - public void removeLayoutComponent(Component c) - { - // Do nothing. - } - - /** - * This method sets whether the children will be centered. - * - * @param newValue Whether the children will be centered. - */ - public void setCentersChildren(boolean newValue) - { - centersChildren = newValue; - } - - /** - * This method sets the amount of space between each component. - * - * @param newPadding The padding between components. - */ - public void setPadding(int newPadding) - { - padding = newPadding; - } - - /** - * This method sets whether the widths will be synced. - * - * @param newValue Whether the widths will be synced. - */ - public void setSyncAllWidths(boolean newValue) - { - syncAllWidths = newValue; - } - } - - /** - * This helper class handles property change events from the JOptionPane. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - /** - * This method is called when one of the properties of the JOptionPane - * changes. - * - * @param e The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - String property = e.getPropertyName(); - if (property.equals(JOptionPane.ICON_PROPERTY) - || property.equals(JOptionPane.INITIAL_SELECTION_VALUE_PROPERTY) - || property.equals(JOptionPane.INITIAL_VALUE_PROPERTY) - || property.equals(JOptionPane.MESSAGE_PROPERTY) - || property.equals(JOptionPane.MESSAGE_TYPE_PROPERTY) - || property.equals(JOptionPane.OPTION_TYPE_PROPERTY) - || property.equals(JOptionPane.OPTIONS_PROPERTY) - || property.equals(JOptionPane.WANTS_INPUT_PROPERTY)) - { - uninstallComponents(); - installComponents(); - optionPane.validate(); - } - } - } - - /** - * The minimum width for JOptionPanes. - */ - public static final int MinimumWidth = 262; - - /** - * The minimum height for JOptionPanes. - */ - public static final int MinimumHeight = 90; - - /** Whether the JOptionPane contains custom components. */ - protected boolean hasCustomComponents; - - // The initialFocusComponent seems to always be set to a button (even if - // I try to set initialSelectionValue). This is different from what the - // javadocs state (which should switch this reference to the input component - // if one is present since that is what's going to get focus). - - /** - * The button that will receive focus based on initialValue when no input - * component is present. If an input component is present, then the input - * component will receive focus instead. - */ - protected Component initialFocusComponent; - - /** The component that receives input when the JOptionPane needs it. */ - protected JComponent inputComponent; - - /** The minimum dimensions of the JOptionPane. */ - protected Dimension minimumSize; - - /** The propertyChangeListener for the JOptionPane. */ - protected PropertyChangeListener propertyChangeListener; - - /** The JOptionPane this UI delegate is used for. */ - protected JOptionPane optionPane; - - /** The size of the icons. */ - private static final int ICON_SIZE = 36; - - /** The string used to describe OK buttons. */ - private static final String OK_STRING = "OK"; - - /** The string used to describe Yes buttons. */ - private static final String YES_STRING = "Yes"; - - /** The string used to describe No buttons. */ - private static final String NO_STRING = "No"; - - /** The string used to describe Cancel buttons. */ - private static final String CANCEL_STRING = "Cancel"; - - /** The container for the message area. - * This is package-private to avoid an accessor method. */ - transient Container messageAreaContainer; - - /** The container for the buttons. - * This is package-private to avoid an accessor method. */ - transient Container buttonContainer; - - /** - * A helper class that implements Icon. This is used temporarily until - * ImageIcons are fixed. - */ - private static class MessageIcon implements Icon - { - /** - * This method returns the width of the icon. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return ICON_SIZE; - } - - /** - * This method returns the height of the icon. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return ICON_SIZE; - } - - /** - * This method paints the icon as a part of the given component using the - * given graphics and the given x and y position. - * - * @param c The component that owns this icon. - * @param g The Graphics object to paint with. - * @param x The x coordinate. - * @param y The y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - // Nothing to do here. - } - } - - /** The icon displayed for ERROR_MESSAGE. */ - private static MessageIcon errorIcon = new MessageIcon() - { - public void paintIcon(Component c, Graphics g, int x, int y) - { - Polygon oct = new Polygon(new int[] { 0, 0, 9, 27, 36, 36, 27, 9 }, - new int[] { 9, 27, 36, 36, 27, 9, 0, 0 }, 8); - g.translate(x, y); - - Color saved = g.getColor(); - g.setColor(Color.RED); - - g.fillPolygon(oct); - - g.setColor(Color.BLACK); - g.drawRect(13, 16, 10, 4); - - g.setColor(saved); - g.translate(-x, -y); - } - }; - - /** The icon displayed for INFORMATION_MESSAGE. */ - private static MessageIcon infoIcon = new MessageIcon() - { - public void paintIcon(Component c, Graphics g, int x, int y) - { - g.translate(x, y); - Color saved = g.getColor(); - - // Should be purple. - g.setColor(Color.RED); - - g.fillOval(0, 0, ICON_SIZE, ICON_SIZE); - - g.setColor(Color.BLACK); - g.drawOval(16, 6, 4, 4); - - Polygon bottomI = new Polygon(new int[] { 15, 15, 13, 13, 23, 23, 21, 21 }, - new int[] { 12, 28, 28, 30, 30, 28, 28, 12 }, - 8); - g.drawPolygon(bottomI); - - g.setColor(saved); - g.translate(-x, -y); - } - }; - - /** The icon displayed for WARNING_MESSAGE. */ - private static MessageIcon warningIcon = new MessageIcon() - { - public void paintIcon(Component c, Graphics g, int x, int y) - { - g.translate(x, y); - Color saved = g.getColor(); - g.setColor(Color.YELLOW); - - Polygon triangle = new Polygon(new int[] { 0, 18, 36 }, - new int[] { 36, 0, 36 }, 3); - g.fillPolygon(triangle); - - g.setColor(Color.BLACK); - - Polygon excl = new Polygon(new int[] { 15, 16, 20, 21 }, - new int[] { 8, 26, 26, 8 }, 4); - g.drawPolygon(excl); - g.drawOval(16, 30, 4, 4); - - g.setColor(saved); - g.translate(-x, -y); - } - }; - - /** The icon displayed for MESSAGE_ICON. */ - private static MessageIcon questionIcon = new MessageIcon() - { - public void paintIcon(Component c, Graphics g, int x, int y) - { - g.translate(x, y); - Color saved = g.getColor(); - g.setColor(Color.GREEN); - - g.fillRect(0, 0, ICON_SIZE, ICON_SIZE); - - g.setColor(Color.BLACK); - - g.drawOval(11, 2, 16, 16); - g.drawOval(14, 5, 10, 10); - - g.setColor(Color.GREEN); - g.fillRect(0, 10, ICON_SIZE, ICON_SIZE - 10); - - g.setColor(Color.BLACK); - - g.drawLine(11, 10, 14, 10); - - g.drawLine(24, 10, 17, 22); - g.drawLine(27, 10, 20, 22); - g.drawLine(17, 22, 20, 22); - - g.drawOval(17, 25, 3, 3); - - g.setColor(saved); - g.translate(-x, -y); - } - }; - - /** - * Creates a new BasicOptionPaneUI object. - */ - public BasicOptionPaneUI() - { - // Nothing to do here. - } - - /** - * This method is messaged to add the buttons to the given container. - * - * @param container The container to add components to. - * @param buttons The buttons to add. (If it is an instance of component, - * the Object is added directly. If it is an instance of Icon, it is - * packed into a label and added. For all other cases, the string - * representation of the Object is retreived and packed into a - * label.) - * @param initialIndex The index of the component that is the initialValue. - */ - protected void addButtonComponents(Container container, Object[] buttons, - int initialIndex) - { - if (buttons == null) - return; - for (int i = 0; i < buttons.length; i++) - { - if (buttons[i] != null) - { - Component toAdd; - if (buttons[i] instanceof Component) - toAdd = (Component) buttons[i]; - else - { - if (buttons[i] instanceof Icon) - toAdd = new JButton((Icon) buttons[i]); - else - toAdd = new JButton(buttons[i].toString()); - hasCustomComponents = true; - } - if (toAdd instanceof JButton) - ((JButton) toAdd).addActionListener(createButtonActionListener(i)); - if (i == initialIndex) - initialFocusComponent = toAdd; - container.add(toAdd); - } - } - selectInitialValue(optionPane); - } - - /** - * This method adds the appropriate icon the given container. - * - * @param top The container to add an icon to. - */ - protected void addIcon(Container top) - { - JLabel iconLabel = null; - Icon icon = getIcon(); - if (icon != null) - { - iconLabel = new JLabel(icon); - configureLabel(iconLabel); - top.add(iconLabel, BorderLayout.WEST); - } - } - - /** - * A helper method that returns an instance of GridBagConstraints to be used - * for creating the message area. - * - * @return An instance of GridBagConstraints. - */ - private static GridBagConstraints createConstraints() - { - GridBagConstraints constraints = new GridBagConstraints(); - constraints.gridx = GridBagConstraints.REMAINDER; - constraints.gridy = GridBagConstraints.REMAINDER; - constraints.gridwidth = 0; - constraints.anchor = GridBagConstraints.LINE_START; - constraints.fill = GridBagConstraints.NONE; - constraints.insets = new Insets(0, 0, 3, 0); - - return constraints; - } - - /** - * This method creates the proper object (if necessary) to represent msg. - * (If msg is an instance of Component, it will add it directly. If it is - * an icon, then it will pack it in a label and add it. Otherwise, it gets - * treated as a string. If the string is longer than maxll, a box is - * created and the burstStringInto is called with the box as the container. - * The box is then added to the given container. Otherwise, the string is - * packed in a label and placed in the given container.) This method is - * also used for adding the inputComponent to the container. - * - * @param container The container to add to. - * @param cons The constraints when adding. - * @param msg The message to add. - * @param maxll The max line length. - * @param internallyCreated Whether the msg is internally created. - */ - protected void addMessageComponents(Container container, - GridBagConstraints cons, Object msg, - int maxll, boolean internallyCreated) - { - if (msg == null) - return; - hasCustomComponents = internallyCreated; - if (msg instanceof Object[]) - { - Object[] arr = (Object[]) msg; - for (int i = 0; i < arr.length; i++) - addMessageComponents(container, cons, arr[i], maxll, - internallyCreated); - return; - } - else if (msg instanceof Component) - { - container.add((Component) msg, cons); - cons.gridy++; - } - else if (msg instanceof Icon) - { - JLabel label = new JLabel((Icon) msg); - configureLabel(label); - container.add(label, cons); - cons.gridy++; - } - else - { - // Undocumented behaviour. - // if msg.toString().length greater than maxll - // it will create a box and burst the string. - // otherwise, it will just create a label and re-call - // this method with the label o.O - if (msg.toString().length() > maxll || msg.toString().contains("\n")) - { - Box tmp = new Box(BoxLayout.Y_AXIS); - burstStringInto(tmp, msg.toString(), maxll); - addMessageComponents(container, cons, tmp, maxll, true); - } - else - { - JLabel label = new JLabel(msg.toString()); - configureLabel(label); - addMessageComponents(container, cons, label, maxll, true); - } - } - } - - /** - * This method creates instances of d (recursively if necessary based on - * maxll) and adds to c. - * - * @param c The container to add to. - * @param d The string to burst. - * @param maxll The max line length. - */ - protected void burstStringInto(Container c, String d, int maxll) - { - if (d == null || c == null) - return; - - int newlineIndex = d.indexOf('\n'); - String line; - String remainder; - if (newlineIndex >= 0 && newlineIndex < maxll) - { - line = d.substring(0, newlineIndex); - remainder = d.substring(newlineIndex + 1); - } - else - { - line = d.substring(0, maxll); - remainder = d.substring(maxll); - } - JLabel label = new JLabel(line); - configureLabel(label); - c.add(label); - - // If there is nothing left to burst, then we can stop. - if (remainder.length() == 0) - return; - - // Recursively call ourselves to burst the remainder of the string, - if (remainder.length() > maxll || remainder.contains("\n")) - burstStringInto(c, remainder, maxll); - else - { - // Add the remainder to the container and be done. - JLabel l = new JLabel(remainder); - configureLabel(l); - c.add(l); - } - } - - /** - * This method returns true if the given JOptionPane contains custom - * components. - * - * @param op The JOptionPane to check. - * - * @return True if the JOptionPane contains custom components. - */ - public boolean containsCustomComponents(JOptionPane op) - { - return hasCustomComponents; - } - - /** - * This method creates a button action listener for the given button index. - * - * @param buttonIndex The index of the button in components. - * - * @return A new ButtonActionListener. - */ - protected ActionListener createButtonActionListener(int buttonIndex) - { - return new ButtonActionListener(buttonIndex); - } - - /** - * This method creates the button area. - * - * @return A new Button Area. - */ - protected Container createButtonArea() - { - JPanel buttonPanel = new JPanel(); - Border b = UIManager.getBorder("OptionPane.buttonAreaBorder"); - if (b != null) - buttonPanel.setBorder(b); - - buttonPanel.setLayout(createLayoutManager()); - addButtonComponents(buttonPanel, getButtons(), getInitialValueIndex()); - - return buttonPanel; - } - - /** - * This method creates a new LayoutManager for the button area. - * - * @return A new LayoutManager for the button area. - */ - protected LayoutManager createLayoutManager() - { - return new ButtonAreaLayout(getSizeButtonsToSameWidth(), 6); - } - - /** - * This method creates the message area. - * - * @return A new message area. - */ - protected Container createMessageArea() - { - JPanel messageArea = new JPanel(); - Border messageBorder = UIManager.getBorder("OptionPane.messageAreaBorder"); - if (messageBorder != null) - messageArea.setBorder(messageBorder); - - messageArea.setLayout(new BorderLayout()); - addIcon(messageArea); - - JPanel rightSide = new JPanel(); - rightSide.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - rightSide.setLayout(new GridBagLayout()); - GridBagConstraints con = createConstraints(); - - addMessageComponents(rightSide, con, getMessage(), - getMaxCharactersPerLineCount(), false); - - if (optionPane.getWantsInput()) - { - Object[] selection = optionPane.getSelectionValues(); - - if (selection == null) - inputComponent = new JTextField(15); - else if (selection.length < 20) - inputComponent = new JComboBox(selection); - else - inputComponent = new JList(selection); - if (inputComponent != null) - { - addMessageComponents(rightSide, con, inputComponent, - getMaxCharactersPerLineCount(), false); - resetSelectedValue(); - selectInitialValue(optionPane); - } - } - - messageArea.add(rightSide, BorderLayout.CENTER); - - return messageArea; - } - - /** - * This method creates a new PropertyChangeListener for listening to the - * JOptionPane. - * - * @return A new PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * This method creates a Container that will separate the message and button - * areas. - * - * @return A Container that will separate the message and button areas. - */ - protected Container createSeparator() - { - // The reference implementation returns null here. When overriding - // to return something non-null, the component gets added between - // the message area and the button area. See installComponents(). - return null; - } - - /** - * This method creates a new BasicOptionPaneUI for the given component. - * - * @param x The component to create a UI for. - * - * @return A new BasicOptionPaneUI. - */ - public static ComponentUI createUI(JComponent x) - { - return new BasicOptionPaneUI(); - } - - /** - * This method returns the buttons for the JOptionPane. If no options are - * set, a set of options will be created based upon the optionType. - * - * @return The buttons that will be added. - */ - protected Object[] getButtons() - { - if (optionPane.getOptions() != null) - return optionPane.getOptions(); - switch (optionPane.getOptionType()) - { - case JOptionPane.YES_NO_OPTION: - return new Object[] { YES_STRING, NO_STRING }; - case JOptionPane.YES_NO_CANCEL_OPTION: - return new Object[] { YES_STRING, NO_STRING, CANCEL_STRING }; - case JOptionPane.OK_CANCEL_OPTION: - return new Object[] { OK_STRING, CANCEL_STRING }; - case JOptionPane.DEFAULT_OPTION: - return (optionPane.getWantsInput()) ? - new Object[] { OK_STRING, CANCEL_STRING } : - (optionPane.getMessageType() == JOptionPane.QUESTION_MESSAGE) ? - new Object[] { YES_STRING, NO_STRING, CANCEL_STRING } : - // ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, PLAIN_MESSAGE - new Object[] { OK_STRING }; - } - return null; - } - - /** - * This method will return the icon the user has set or the icon that will - * be used based on message type. - * - * @return The icon to use in the JOptionPane. - */ - protected Icon getIcon() - { - if (optionPane.getIcon() != null) - return optionPane.getIcon(); - else - return getIconForType(optionPane.getMessageType()); - } - - /** - * This method returns the icon for the given messageType. - * - * @param messageType The type of message. - * - * @return The icon for the given messageType. - */ - protected Icon getIconForType(int messageType) - { - Icon tmp = null; - switch (messageType) - { - case JOptionPane.ERROR_MESSAGE: - tmp = errorIcon; - break; - case JOptionPane.INFORMATION_MESSAGE: - tmp = infoIcon; - break; - case JOptionPane.WARNING_MESSAGE: - tmp = warningIcon; - break; - case JOptionPane.QUESTION_MESSAGE: - tmp = questionIcon; - break; - } - return tmp; - // FIXME: Don't cast till the default icons are in. - // return new IconUIResource(tmp); - } - - /** - * This method returns the index of the initialValue in the options array. - * - * @return The index of the initalValue. - */ - protected int getInitialValueIndex() - { - Object[] buttons = getButtons(); - - if (buttons == null) - return -1; - - Object select = optionPane.getInitialValue(); - - for (int i = 0; i < buttons.length; i++) - { - if (select == buttons[i]) - return i; - } - return 0; - } - - /** - * This method returns the maximum number of characters that should be - * placed on a line. - * - * @return The maximum number of characteres that should be placed on a - * line. - */ - protected int getMaxCharactersPerLineCount() - { - return optionPane.getMaxCharactersPerLineCount(); - } - - /** - * This method returns the maximum size. - * - * @param c The JComponent to measure. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the message of the JOptionPane. - * - * @return The message. - */ - protected Object getMessage() - { - return optionPane.getMessage(); - } - - /** - * This method returns the minimum size of the JOptionPane. - * - * @return The minimum size. - */ - public Dimension getMinimumOptionPaneSize() - { - return minimumSize; - } - - /** - * This method returns the minimum size. - * - * @param c The JComponent to measure. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the preferred size of the JOptionPane. The preferred - * size is the maximum of the size desired by the layout and the minimum - * size. - * - * @param c The JComponent to measure. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension d = optionPane.getLayout().preferredLayoutSize(optionPane); - Dimension d2 = getMinimumOptionPaneSize(); - - int w = Math.max(d.width, d2.width); - int h = Math.max(d.height, d2.height); - return new Dimension(w, h); - } - - /** - * This method returns whether all buttons should have the same width. - * - * @return Whether all buttons should have the same width. - */ - protected boolean getSizeButtonsToSameWidth() - { - return true; - } - - /** - * This method installs components for the JOptionPane. - */ - protected void installComponents() - { - // First thing is the message area. - optionPane.add(createMessageArea()); - - // Add separator when createSeparator() is overridden to return - // something other than null. - Container sep = createSeparator(); - if (sep != null) - optionPane.add(sep); - - // Last thing is the button area. - optionPane.add(createButtonArea()); - } - - /** - * This method installs defaults for the JOptionPane. - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(optionPane, "OptionPane.background", - "OptionPane.foreground", - "OptionPane.font"); - LookAndFeel.installBorder(optionPane, "OptionPane.border"); - optionPane.setOpaque(true); - - minimumSize = UIManager.getDimension("OptionPane.minimumSize"); - - // FIXME: Image icons don't seem to work properly right now. - // Once they do, replace the synthetic icons with these ones. - - /* - warningIcon = (IconUIResource) defaults.getIcon("OptionPane.warningIcon"); - infoIcon = (IconUIResource) defaults.getIcon("OptionPane.informationIcon"); - errorIcon = (IconUIResource) defaults.getIcon("OptionPane.errorIcon"); - questionIcon = (IconUIResource) defaults.getIcon("OptionPane.questionIcon"); - */ - } - - /** - * This method installs keyboard actions for the JOptionpane. - */ - protected void installKeyboardActions() - { - // Install the input map. - Object[] bindings = - (Object[]) SharedUIDefaults.get("OptionPane.windowBindings"); - InputMap inputMap = LookAndFeel.makeComponentInputMap(optionPane, - bindings); - SwingUtilities.replaceUIInputMap(optionPane, - JComponent.WHEN_IN_FOCUSED_WINDOW, - inputMap); - - // FIXME: The JDK uses a LazyActionMap for parentActionMap - SwingUtilities.replaceUIActionMap(optionPane, getActionMap()); - } - - /** - * Fetches the action map from the UI defaults, or create a new one - * if the action map hasn't been initialized. - * - * @return the action map - */ - private ActionMap getActionMap() - { - ActionMap am = (ActionMap) UIManager.get("OptionPane.actionMap"); - if (am == null) - { - am = createDefaultActions(); - UIManager.getLookAndFeelDefaults().put("OptionPane.actionMap", am); - } - return am; - } - - private ActionMap createDefaultActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - Action action = new OptionPaneCloseAction(); - - am.put("close", action); - return am; - } - - /** - * This method installs listeners for the JOptionPane. - */ - protected void installListeners() - { - propertyChangeListener = createPropertyChangeListener(); - - optionPane.addPropertyChangeListener(propertyChangeListener); - } - - /** - * This method installs the UI for the JOptionPane. - * - * @param c The JComponent to install the UI for. - */ - public void installUI(JComponent c) - { - if (c instanceof JOptionPane) - { - optionPane = (JOptionPane) c; - - installDefaults(); - installComponents(); - installListeners(); - installKeyboardActions(); - } - } - - /** - * Changes the inputValue property in the JOptionPane based on the current - * value of the inputComponent. - */ - protected void resetInputValue() - { - if (optionPane.getWantsInput() && inputComponent != null) - { - Object output = null; - if (inputComponent instanceof JTextField) - output = ((JTextField) inputComponent).getText(); - else if (inputComponent instanceof JComboBox) - output = ((JComboBox) inputComponent).getSelectedItem(); - else if (inputComponent instanceof JList) - output = ((JList) inputComponent).getSelectedValue(); - - if (output != null) - optionPane.setInputValue(output); - } - } - - /** - * This method requests focus to the inputComponent (if one is present) and - * the initialFocusComponent otherwise. - * - * @param op The JOptionPane. - */ - public void selectInitialValue(JOptionPane op) - { - if (inputComponent != null) - { - inputComponent.requestFocus(); - return; - } - if (initialFocusComponent != null) - initialFocusComponent.requestFocus(); - } - - /** - * This method resets the value in the inputComponent to the - * initialSelectionValue property. - * This is package-private to avoid an accessor method. - */ - void resetSelectedValue() - { - if (inputComponent != null) - { - Object init = optionPane.getInitialSelectionValue(); - if (init == null) - return; - if (inputComponent instanceof JTextField) - ((JTextField) inputComponent).setText((String) init); - else if (inputComponent instanceof JComboBox) - ((JComboBox) inputComponent).setSelectedItem(init); - else if (inputComponent instanceof JList) - { - // ((JList) inputComponent).setSelectedValue(init, true); - } - } - } - - /** - * This method uninstalls all the components in the JOptionPane. - */ - protected void uninstallComponents() - { - optionPane.removeAll(); - buttonContainer = null; - messageAreaContainer = null; - } - - /** - * This method uninstalls the defaults for the JOptionPane. - */ - protected void uninstallDefaults() - { - optionPane.setFont(null); - optionPane.setForeground(null); - optionPane.setBackground(null); - - minimumSize = null; - - // FIXME: ImageIcons don't seem to work properly - - /* - warningIcon = null; - errorIcon = null; - questionIcon = null; - infoIcon = null; - */ - } - - /** - * This method uninstalls keyboard actions for the JOptionPane. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(optionPane, JComponent. - WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - SwingUtilities.replaceUIActionMap(optionPane, null); - } - - /** - * This method uninstalls listeners for the JOptionPane. - */ - protected void uninstallListeners() - { - optionPane.removePropertyChangeListener(propertyChangeListener); - propertyChangeListener = null; - } - - /** - * This method uninstalls the UI for the given JComponent. - * - * @param c The JComponent to uninstall for. - */ - public void uninstallUI(JComponent c) - { - uninstallKeyboardActions(); - uninstallListeners(); - uninstallComponents(); - uninstallDefaults(); - - optionPane = null; - } - - /** - * Applies the proper UI configuration to labels that are added to - * the OptionPane. - * - * @param l the label to configure - */ - private void configureLabel(JLabel l) - { - Color c = UIManager.getColor("OptionPane.messageForeground"); - if (c != null) - l.setForeground(c); - Font f = UIManager.getFont("OptionPane.messageFont"); - if (f != null) - l.setFont(f); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java deleted file mode 100644 index 959462a..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicPanelUI.java +++ /dev/null @@ -1,132 +0,0 @@ -/* BasicPanelUI.java - Copyright (C) 2002, 2004, 2006, 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.plaf.basic; - -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.LookAndFeel; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.PanelUI; - -/** - * A UI delegate for the {@link JPanel} component. - */ -public class BasicPanelUI extends PanelUI -{ - /** - * A UI delegate that can be shared by all panels (because the delegate is - * stateless). - */ - static BasicPanelUI sharedUI; - - /** - * Returns a UI delegate for the specified component. - * - * @param panel the panel. - */ - public static ComponentUI createUI(JComponent panel) - { - if (sharedUI == null) - sharedUI = new BasicPanelUI(); - return sharedUI; - } - - /** - * Installs this UI delegate in the specified component. - * - * @param c the component (should be a {@link JPanel}, <code>null</code> not - * permitted). - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JPanel) - { - JPanel p = (JPanel) c; - installDefaults(p); - } - } - - /** - * Installs the defaults for this UI delegate in the specified panel. - * - * @param p the panel (<code>null</code> not permitted). - */ - protected void installDefaults(JPanel p) - { - LookAndFeel.installColorsAndFont(p, "Panel.background", "Panel.foreground", - "Panel.font"); - - // A test against the reference implementation shows that this method will - // install a border if one is defined in the UIDefaults table (even though - // the BasicLookAndFeel doesn't actually define a "Panel.border"). This - // test was written after discovering that a null argument to - // uninstallDefaults throws a NullPointerException in - // LookAndFeel.uninstallBorder()... - LookAndFeel.installBorder(p, "Panel.border"); - } - - /** - * Uninstalls this UI delegate from the specified component. - * - * @param c the component (<code>null</code> not permitted). - */ - public void uninstallUI(JComponent c) - { - uninstallDefaults((JPanel) c); - } - - /** - * Uninstalls the UI defaults for the specified panel. - * - * @param p the panel (<code>null</code> not permitted). - */ - protected void uninstallDefaults(JPanel p) - { - // Tests on the reference implementation showed this method: - // (1) doesn't actually remove the installed colors and font installed - // by installDefaults(), it isn't necessary; - // (2) throws a NullPointerException in LookAndFeel.uninstallBorder() if - // p is null. Strangely, no border is installed by the - // BasicLookAndFeel - perhaps this is needed by another LAF? - - LookAndFeel.uninstallBorder(p); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicPasswordFieldUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicPasswordFieldUI.java deleted file mode 100644 index cc83917..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicPasswordFieldUI.java +++ /dev/null @@ -1,74 +0,0 @@ -/* BasicPasswordFieldUI.java - Copyright (C) 2004 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.plaf.basic; - -import javax.swing.JComponent; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.Element; -import javax.swing.text.PasswordView; -import javax.swing.text.View; - -public class BasicPasswordFieldUI extends BasicTextFieldUI -{ - public BasicPasswordFieldUI() - { - // Nothing to do here. - } - - public View create(Element elem) - { - return new PasswordView(elem); - } - - public static ComponentUI createUI(JComponent c) - { - return new BasicPasswordFieldUI(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "PasswordField" - */ - protected String getPropertyPrefix() - { - return "PasswordField"; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java deleted file mode 100644 index b629477..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.java +++ /dev/null @@ -1,114 +0,0 @@ -/* BasicPopupMenuSeparatorUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.JComponent; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; -import javax.swing.plaf.ComponentUI; - -/** - * The Basic Look and Feel UI delegate for JPopupMenu.Separator. - */ -public class BasicPopupMenuSeparatorUI extends BasicSeparatorUI -{ - /** - * Creates a new BasicPopupMenuSeparatorUI object. - */ - public BasicPopupMenuSeparatorUI() - { - super(); - } - - /** - * Creates a new UI delegate for the given JComponent. - * - * @param c The JComponent to create a delegate for. - * - * @return A new BasicPopupMenuSeparatorUI - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicPopupMenuSeparatorUI(); - } - - /** - * The Popup Menu Separator has two lines. The top line will be - * painted using highlight color and the bottom using shadow color. - * - * @param g The Graphics object to paint with - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - if (! (c instanceof JPopupMenu.Separator)) - return; - - Rectangle r = new Rectangle(); - SwingUtilities.calculateInnerArea(c, r); - Color saved = g.getColor(); - - int midAB = r.width / 2 + r.x; - int midAD = r.height / 2 + r.y; - - g.setColor(highlight); - g.drawLine(r.x, midAD, r.x + r.width, midAD); - - g.setColor(shadow); - g.drawLine(r.x, midAD + 1, r.x + r.width, midAD + 1); - } - - /** - * This method returns the preferred size of the - * JComponent. - * - * @param c The JComponent to measure. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - return super.getPreferredSize(c); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java deleted file mode 100644 index 6cd433b..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java +++ /dev/null @@ -1,1019 +0,0 @@ -/* BasicPopupMenuUI.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.plaf.basic; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.KeyboardFocusManager; -import java.awt.event.ActionEvent; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.MouseEvent; -import java.util.EventListener; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.BoxLayout; -import javax.swing.InputMap; -import javax.swing.JApplet; -import javax.swing.JComponent; -import javax.swing.JFrame; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.JRootPane; -import javax.swing.LookAndFeel; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.PopupMenuEvent; -import javax.swing.event.PopupMenuListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.PopupMenuUI; - -/** - * UI Delegate for JPopupMenu - */ -public class BasicPopupMenuUI extends PopupMenuUI -{ - /** - * Handles keyboard navigation through menus. - */ - private static class NavigateAction - extends AbstractAction - { - - /** - * Creates a new NavigateAction instance. - * - * @param name the name of the action - */ - NavigateAction(String name) - { - super(name); - } - - /** - * Actually performs the action. - */ - public void actionPerformed(ActionEvent event) - { - String name = (String) getValue(Action.NAME); - if (name.equals("selectNext")) - navigateNextPrevious(true); - else if (name.equals("selectPrevious")) - navigateNextPrevious(false); - else if (name.equals("selectChild")) - navigateParentChild(true); - else if (name.equals("selectParent")) - navigateParentChild(false); - else if (name.equals("cancel")) - cancel(); - else if (name.equals("return")) - doReturn(); - else - assert false : "Must not reach here"; - } - - /** - * Navigates to the next or previous menu item. - * - * @param dir <code>true</code>: navigate to next, <code>false</code>: - * navigate to previous - */ - private void navigateNextPrevious(boolean dir) - { - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - MenuElement path[] = msm.getSelectedPath(); - int len = path.length; - if (len >= 2) - { - - if (path[0] instanceof JMenuBar && - path[1] instanceof JMenu && len == 2) - { - - // A toplevel menu is selected, but its popup not yet shown. - // Show the popup and select the first item - JPopupMenu popup = ((JMenu)path[1]).getPopupMenu(); - MenuElement next = - findEnabledChild(popup.getSubElements(), -1, true); - MenuElement[] newPath; - - if (next != null) - { - newPath = new MenuElement[4]; - newPath[3] = next; - } - else - { - // Menu has no enabled items, show the popup anyway. - newPath = new MenuElement[3]; - } - System.arraycopy(path, 0, newPath, 0, 2); - newPath[2] = popup; - msm.setSelectedPath(newPath); - } - else if (path[len - 1] instanceof JPopupMenu && - path[len - 2] instanceof JMenu) - { - // Select next item in already shown popup menu. - JMenu menu = (JMenu) path[len - 2]; - JPopupMenu popup = menu.getPopupMenu(); - MenuElement next = - findEnabledChild(popup.getSubElements(), -1, dir); - - if (next != null) - { - MenuElement[] newPath = new MenuElement[len + 1]; - System.arraycopy(path, 0, newPath, 0, len); - newPath[len] = next; - msm.setSelectedPath(newPath); - } - else - { - // All items in the popup are disabled. - // Find the parent popup menu and select - // its next item. If there's no parent popup menu , do nothing. - if (len > 2 && path[len - 3] instanceof JPopupMenu) - { - popup = ((JPopupMenu) path[len - 3]); - next = findEnabledChild(popup.getSubElements(), - menu, dir); - if (next != null && next != menu) - { - MenuElement[] newPath = new MenuElement[len - 1]; - System.arraycopy(path, 0, newPath, 0, len - 2); - newPath[len - 2] = next; - msm.setSelectedPath(newPath); - } - } - } - } - else - { - // Only select the next item. - MenuElement subs[] = path[len - 2].getSubElements(); - MenuElement nextChild = - findEnabledChild(subs, path[len - 1], dir); - if (nextChild == null) - { - nextChild = findEnabledChild(subs, -1, dir); - } - if (nextChild != null) - { - path[len-1] = nextChild; - msm.setSelectedPath(path); - } - } - } - } - - private MenuElement findEnabledChild(MenuElement[] children, - MenuElement start, boolean dir) - { - MenuElement found = null; - for (int i = 0; i < children.length && found == null; i++) - { - if (children[i] == start) - { - found = findEnabledChild(children, i, dir); - } - } - return found; - } - - /** - * Searches the next or previous enabled child menu element. - * - * @param children the children to search through - * @param start the index at which to start - * @param dir the direction (true == forward, false == backward) - * - * @return the found element or null - */ - private MenuElement findEnabledChild(MenuElement[] children, - int start, boolean dir) - { - MenuElement result = null; - if (dir) - { - result = findNextEnabledChild(children, start + 1, children.length-1); - if (result == null) - result = findNextEnabledChild(children, 0, start - 1); - } - else - { - result = findPreviousEnabledChild(children, start - 1, 0); - if (result == null) - result = findPreviousEnabledChild(children, children.length-1, - start + 1); - } - return result; - } - - /** - * Finds the next child element that is enabled and visible. - * - * @param children the children to search through - * @param start the start index - * @param end the end index - * - * @return the found child, or null - */ - private MenuElement findNextEnabledChild(MenuElement[] children, int start, - int end) - { - MenuElement found = null; - for (int i = start; i <= end && found == null; i++) - { - if (children[i] != null) - { - Component comp = children[i].getComponent(); - if (comp != null && comp.isEnabled() && comp.isVisible()) - { - found = children[i]; - } - } - } - return found; - } - - /** - * Finds the previous child element that is enabled and visible. - * - * @param children the children to search through - * @param start the start index - * @param end the end index - * - * @return the found child, or null - */ - private MenuElement findPreviousEnabledChild(MenuElement[] children, - int start, int end) - { - MenuElement found = null; - for (int i = start; i >= end && found == null; i--) - { - if (children[i] != null) - { - Component comp = children[i].getComponent(); - if (comp != null && comp.isEnabled() && comp.isVisible()) - { - found = children[i]; - } - } - } - return found; - } - - /** - * Navigates to the parent or child menu item. - * - * @param selectChild <code>true</code>: navigate to child, - * <code>false</code>: navigate to parent - */ - private void navigateParentChild(boolean selectChild) - { - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - MenuElement path[] = msm.getSelectedPath(); - int len = path.length; - - if (selectChild) - { - if (len > 0 && path[len - 1] instanceof JMenu - && ! ((JMenu) path[len-1]).isTopLevelMenu()) - { - // We have a submenu, open it. - JMenu menu = (JMenu) path[len - 1]; - JPopupMenu popup = menu.getPopupMenu(); - MenuElement[] subs = popup.getSubElements(); - MenuElement item = findEnabledChild(subs, -1, true); - MenuElement[] newPath; - - if (item == null) - { - newPath = new MenuElement[len + 1]; - } - else - { - newPath = new MenuElement[len + 2]; - newPath[len + 1] = item; - } - System.arraycopy(path, 0, newPath, 0, len); - newPath[len] = popup; - msm.setSelectedPath(newPath); - return; - } - } - else - { - int popupIndex = len-1; - if (len > 2 - && (path[popupIndex] instanceof JPopupMenu - || path[--popupIndex] instanceof JPopupMenu) - && ! ((JMenu) path[popupIndex - 1]).isTopLevelMenu()) - { - // We have a submenu, close it. - MenuElement newPath[] = new MenuElement[popupIndex]; - System.arraycopy(path, 0, newPath, 0, popupIndex); - msm.setSelectedPath(newPath); - return; - } - } - - // If we got here, we have not selected a child or parent. - // Check if we have a toplevel menu selected. If so, then select - // another one. - if (len > 1 && path[0] instanceof JMenuBar) - { - MenuElement currentMenu = path[1]; - MenuElement nextMenu = findEnabledChild(path[0].getSubElements(), - currentMenu, selectChild); - - if (nextMenu != null && nextMenu != currentMenu) - { - MenuElement newSelection[]; - if (len == 2) - { - // Menu is selected but its popup not shown. - newSelection = new MenuElement[2]; - newSelection[0] = path[0]; - newSelection[1] = nextMenu; - } - else - { - // Menu is selected and its popup is shown. - newSelection = new MenuElement[3]; - newSelection[0] = path[0]; - newSelection[1] = nextMenu; - newSelection[2] = ((JMenu) nextMenu).getPopupMenu(); - } - msm.setSelectedPath(newSelection); - } - } - } - - /** - * Handles cancel requests (ESC key). - */ - private void cancel() - { - // Fire popup menu cancelled event. Unfortunately the - // firePopupMenuCancelled() is protected in JPopupMenu so we work - // around this limitation by fetching the listeners and notifying them - // directly. - JPopupMenu lastPopup = (JPopupMenu) getLastPopup(); - EventListener[] ll = lastPopup.getListeners(PopupMenuListener.class); - for (int i = 0; i < ll.length; i++) - { - PopupMenuEvent ev = new PopupMenuEvent(lastPopup); - ((PopupMenuListener) ll[i]).popupMenuCanceled(ev); - } - - // Close the last popup or the whole selection if there's only one - // popup left. - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - MenuElement path[] = msm.getSelectedPath(); - if(path.length > 4) - { - MenuElement newPath[] = new MenuElement[path.length - 2]; - System.arraycopy(path,0,newPath,0,path.length-2); - MenuSelectionManager.defaultManager().setSelectedPath(newPath); - } - else - msm.clearSelectedPath(); - } - - /** - * Returns the last popup menu in the current selection or null. - * - * @return the last popup menu in the current selection or null - */ - private JPopupMenu getLastPopup() - { - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - MenuElement[] p = msm.getSelectedPath(); - JPopupMenu popup = null; - for(int i = p.length - 1; popup == null && i >= 0; i--) - { - if (p[i] instanceof JPopupMenu) - popup = (JPopupMenu) p[i]; - } - return popup; - } - - /** - * Handles ENTER key requests. This normally opens submenus on JMenu - * items, or activates the menu item as if it's been clicked on it. - */ - private void doReturn() - { - KeyboardFocusManager fmgr = - KeyboardFocusManager.getCurrentKeyboardFocusManager(); - Component focusOwner = fmgr.getFocusOwner(); - if((focusOwner == null || (focusOwner instanceof JRootPane))) - { - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - MenuElement path[] = msm.getSelectedPath(); - MenuElement lastElement; - if(path.length > 0) - { - lastElement = path[path.length - 1]; - if(lastElement instanceof JMenu) - { - MenuElement newPath[] = new MenuElement[path.length + 1]; - System.arraycopy(path,0,newPath,0,path.length); - newPath[path.length] = ((JMenu) lastElement).getPopupMenu(); - msm.setSelectedPath(newPath); - } - else if(lastElement instanceof JMenuItem) - { - JMenuItem mi = (JMenuItem)lastElement; - if (mi.getUI() instanceof BasicMenuItemUI) - { - ((BasicMenuItemUI)mi.getUI()).doClick(msm); - } - else - { - msm.clearSelectedPath(); - mi.doClick(0); - } - } - } - } - } - } - - /** - * Installs keyboard actions when a popup is opened, and uninstalls the - * keyboard actions when closed. This listens on the default - * MenuSelectionManager. - */ - private class KeyboardHelper - implements ChangeListener - { - private MenuElement[] lastSelectedPath = new MenuElement[0]; - private Component lastFocused; - private JRootPane invokerRootPane; - - public void stateChanged(ChangeEvent event) - { - MenuSelectionManager msm = (MenuSelectionManager) event.getSource(); - MenuElement[] p = msm.getSelectedPath(); - JPopupMenu popup = getActivePopup(p); - if (popup == null || popup.isFocusable()) - { - if (lastSelectedPath.length != 0 && p.length != 0 ) - { - if (! invokerEquals(p[0], lastSelectedPath[0])) - { - uninstallKeyboardActionsImpl(); - lastSelectedPath = new MenuElement[0]; - } - } - - if (lastSelectedPath.length == 0 && p.length > 0) - { - JComponent invoker; - if (popup == null) - { - if (p.length == 2 && p[0] instanceof JMenuBar - && p[1] instanceof JMenu) - { - // A menu has been selected but not opened. - invoker = (JComponent)p[1]; - popup = ((JMenu)invoker).getPopupMenu(); - } - else - { - return; - } - } - else - { - Component c = popup.getInvoker(); - if(c instanceof JFrame) - { - invoker = ((JFrame) c).getRootPane(); - } - else if(c instanceof JApplet) - { - invoker = ((JApplet) c).getRootPane(); - } - else - { - while (!(c instanceof JComponent)) - { - if (c == null) - { - return; - } - c = c.getParent(); - } - invoker = (JComponent)c; - } - } - - // Remember current focus owner. - lastFocused = KeyboardFocusManager. - getCurrentKeyboardFocusManager().getFocusOwner(); - - // Install keybindings used for menu navigation. - invokerRootPane = SwingUtilities.getRootPane(invoker); - if (invokerRootPane != null) - { - invokerRootPane.requestFocus(true); - installKeyboardActionsImpl(); - } - } - else if (lastSelectedPath.length != 0 && p.length == 0) - { - // menu hidden -- return focus to where it had been before - // and uninstall menu keybindings - uninstallKeyboardActionsImpl(); - } - } - - // Remember the last path selected - lastSelectedPath = p; - } - - private JPopupMenu getActivePopup(MenuElement[] path) - { - JPopupMenu active = null; - for (int i = path.length - 1; i >= 0 && active == null; i--) - { - MenuElement elem = path[i]; - if (elem instanceof JPopupMenu) - { - active = (JPopupMenu) elem; - } - } - return active; - } - - private boolean invokerEquals(MenuElement el1, MenuElement el2) - { - Component invoker1 = el1.getComponent(); - Component invoker2 = el2.getComponent(); - if (invoker1 instanceof JPopupMenu) - invoker1 = ((JPopupMenu) invoker1).getInvoker(); - if (invoker2 instanceof JPopupMenu) - invoker2 = ((JPopupMenu) invoker2).getInvoker(); - return invoker1 == invoker2; - } - } - - /* popupMenu for which this UI delegate is for*/ - protected JPopupMenu popupMenu; - - /* PopupMenuListener listens to popup menu events fired by JPopupMenu*/ - private transient PopupMenuListener popupMenuListener; - - /* ComponentListener listening to popupMenu's invoker. - * This is package-private to avoid an accessor method. */ - TopWindowListener topWindowListener; - - /** - * Counts how many popup menus are handled by this UI or a subclass. - * This is used to install a KeyboardHelper on the MenuSelectionManager - * for the first popup, and uninstall this same KeyboardHelper when the - * last popup is uninstalled. - */ - private static int numPopups; - - /** - * This is the KeyboardHelper that listens on the MenuSelectionManager. - */ - private static KeyboardHelper keyboardHelper; - - /** - * Creates a new BasicPopupMenuUI object. - */ - public BasicPopupMenuUI() - { - popupMenuListener = new PopupMenuHandler(); - topWindowListener = new TopWindowListener(); - } - - /** - * Factory method to create a BasicPopupMenuUI for the given {@link - * JComponent}, which should be a {@link JMenuItem}. - * - * @param x The {@link JComponent} a UI is being created for. - * - * @return A BasicPopupMenuUI for the {@link JComponent}. - */ - public static ComponentUI createUI(JComponent x) - { - return new BasicPopupMenuUI(); - } - - /** - * Installs and initializes all fields for this UI delegate. Any properties - * of the UI that need to be initialized and/or set to defaults will be - * done now. It will also install any listeners necessary. - * - * @param c The {@link JComponent} that is having this UI installed. - */ - public void installUI(JComponent c) - { - super.installUI(c); - - // Install KeyboardHelper when the first popup is initialized. - if (numPopups == 0) - { - keyboardHelper = new KeyboardHelper(); - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - msm.addChangeListener(keyboardHelper); - } - numPopups++; - - popupMenu = (JPopupMenu) c; - popupMenu.setLayout(new DefaultMenuLayout(popupMenu, BoxLayout.Y_AXIS)); - popupMenu.setBorderPainted(true); - JPopupMenu.setDefaultLightWeightPopupEnabled(true); - - installDefaults(); - installListeners(); - installKeyboardActions(); - } - - /** - * This method installs the defaults that are defined in the Basic look - * and feel for this {@link JPopupMenu}. - */ - public void installDefaults() - { - LookAndFeel.installColorsAndFont(popupMenu, "PopupMenu.background", - "PopupMenu.foreground", "PopupMenu.font"); - LookAndFeel.installBorder(popupMenu, "PopupMenu.border"); - popupMenu.setOpaque(true); - } - - /** - * This method installs the listeners for the {@link JMenuItem}. - */ - protected void installListeners() - { - popupMenu.addPopupMenuListener(popupMenuListener); - } - - /** - * This method installs the keyboard actions for this {@link JPopupMenu}. - */ - protected void installKeyboardActions() - { - // We can't install the keyboard actions here, because then all - // popup menus would have their actions registered in the KeyboardManager. - // So we install it when the popup menu is opened, and uninstall it - // when it's closed. This is done in the KeyboardHelper class. - // Install InputMap. - } - - /** - * Called by the KeyboardHandler when a popup is made visible. - */ - void installKeyboardActionsImpl() - { - Object[] bindings; - if (popupMenu.getComponentOrientation().isLeftToRight()) - { - bindings = (Object[]) - SharedUIDefaults.get("PopupMenu.selectedWindowInputMapBindings"); - } - else - { - bindings = (Object[]) SharedUIDefaults.get - ("PopupMenu.selectedWindowInputMapBindings.RightToLeft"); - } - InputMap inputMap = LookAndFeel.makeComponentInputMap(popupMenu, bindings); - SwingUtilities.replaceUIInputMap(popupMenu, - JComponent.WHEN_IN_FOCUSED_WINDOW, - inputMap); - - // Install ActionMap. - SwingUtilities.replaceUIActionMap(popupMenu, getActionMap()); - } - - /** - * Creates and returns the shared action map for JTrees. - * - * @return the shared action map for JTrees - */ - private ActionMap getActionMap() - { - ActionMap am = (ActionMap) UIManager.get("PopupMenu.actionMap"); - if (am == null) - { - am = createDefaultActions(); - UIManager.getLookAndFeelDefaults().put("PopupMenu.actionMap", am); - } - return am; - } - - /** - * Creates the default actions when there are none specified by the L&F. - * - * @return the default actions - */ - private ActionMap createDefaultActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - Action action = new NavigateAction("selectNext"); - am.put(action.getValue(Action.NAME), action); - action = new NavigateAction("selectPrevious"); - am.put(action.getValue(Action.NAME), action); - action = new NavigateAction("selectParent"); - am.put(action.getValue(Action.NAME), action); - action = new NavigateAction("selectChild"); - am.put(action.getValue(Action.NAME), action); - action = new NavigateAction("return"); - am.put(action.getValue(Action.NAME), action); - action = new NavigateAction("cancel"); - am.put(action.getValue(Action.NAME), action); - - return am; - } - - /** - * Performs the opposite of installUI. Any properties or resources that need - * to be cleaned up will be done now. It will also uninstall any listeners - * it has. In addition, any properties of this UI will be nulled. - * - * @param c The {@link JComponent} that is having this UI uninstalled. - */ - public void uninstallUI(JComponent c) - { - uninstallListeners(); - uninstallDefaults(); - uninstallKeyboardActions(); - popupMenu = null; - - // Install KeyboardHelper when the first popup is initialized. - numPopups--; - if (numPopups == 0) - { - MenuSelectionManager msm = MenuSelectionManager.defaultManager(); - msm.removeChangeListener(keyboardHelper); - } - - } - - /** - * This method uninstalls the defaults and sets any objects created during - * install to null - */ - protected void uninstallDefaults() - { - popupMenu.setBackground(null); - popupMenu.setBorder(null); - popupMenu.setFont(null); - popupMenu.setForeground(null); - } - - /** - * Unregisters all the listeners that this UI delegate was using. - */ - protected void uninstallListeners() - { - popupMenu.removePopupMenuListener(popupMenuListener); - } - - /** - * Uninstalls any keyboard actions. - */ - protected void uninstallKeyboardActions() - { - // We can't install the keyboard actions here, because then all - // popup menus would have their actions registered in the KeyboardManager. - // So we install it when the popup menu is opened, and uninstall it - // when it's closed. This is done in the KeyboardHelper class. - // Install InputMap. - } - - /** - * Called by the KeyboardHandler when a popup is made invisible. - */ - void uninstallKeyboardActionsImpl() - { - SwingUtilities.replaceUIInputMap(popupMenu, - JComponent.WHEN_IN_FOCUSED_WINDOW, null); - SwingUtilities.replaceUIActionMap(popupMenu, null); - } - - /** - * This method returns the minimum size of the JPopupMenu. - * - * @param c The JComponent to find a size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return null; - } - - /** - * This method returns the preferred size of the JPopupMenu. - * - * @param c The JComponent to find a size for. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - return null; - } - - /** - * This method returns the minimum size of the JPopupMenu. - * - * @param c The JComponent to find a size for. - * - * @return The minimum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return null; - } - - /** - * Return true if given mouse event is a platform popup trigger, and false - * otherwise - * - * @param e MouseEvent that is to be checked for popup trigger event - * - * @return true if given mouse event is a platform popup trigger, and false - * otherwise - */ - public boolean isPopupTrigger(MouseEvent e) - { - return false; - } - - /** - * This listener handles PopupMenuEvents fired by JPopupMenu - */ - private class PopupMenuHandler implements PopupMenuListener - { - /** - * This method is invoked when JPopupMenu is cancelled. - * - * @param event the PopupMenuEvent - */ - public void popupMenuCanceled(PopupMenuEvent event) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.clearSelectedPath(); - } - - /** - * This method is invoked when JPopupMenu becomes invisible - * - * @param event the PopupMenuEvent - */ - public void popupMenuWillBecomeInvisible(PopupMenuEvent event) - { - // remove listener that listens to component events fired - // by the top - level window that this popup belongs to. - Component invoker = popupMenu.getInvoker(); - Component rootContainer = SwingUtilities.getRoot(invoker); - if (rootContainer != null) - rootContainer.removeComponentListener(topWindowListener); - } - - /** - * This method is invoked when JPopupMenu becomes visible - * - * @param event the PopupMenuEvent - */ - public void popupMenuWillBecomeVisible(PopupMenuEvent event) - { - // Adds topWindowListener to top-level window to listener to - // ComponentEvents fired by it. We need to cancel this popup menu - // if topWindow to which this popup belongs was resized or moved. - Component invoker = popupMenu.getInvoker(); - Component rootContainer = SwingUtilities.getRoot(invoker); - if (rootContainer != null) - rootContainer.addComponentListener(topWindowListener); - - // if this popup menu is a free floating popup menu, - // then by default its first element should be always selected when - // this popup menu becomes visible. - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - - if (manager.getSelectedPath().length == 0) - { - // Set selected path to point to the first item in the popup menu - MenuElement[] path = new MenuElement[2]; - path[0] = popupMenu; - Component[] comps = popupMenu.getComponents(); - if (comps.length != 0 && comps[0] instanceof MenuElement) - { - path[1] = (MenuElement) comps[0]; - manager.setSelectedPath(path); - } - } - } - } - - /** - * ComponentListener that listens to Component Events fired by the top - - * level window to which popup menu belongs. If top-level window was - * resized, moved or hidded then popup menu will be hidded and selected - * path of current menu hierarchy will be set to null. - */ - private class TopWindowListener implements ComponentListener - { - /** - * This method is invoked when top-level window is resized. This method - * closes current menu hierarchy. - * - * @param e The ComponentEvent - */ - public void componentResized(ComponentEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.clearSelectedPath(); - } - - /** - * This method is invoked when top-level window is moved. This method - * closes current menu hierarchy. - * - * @param e The ComponentEvent - */ - public void componentMoved(ComponentEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.clearSelectedPath(); - } - - /** - * This method is invoked when top-level window is shown This method - * does nothing by default. - * - * @param e The ComponentEvent - */ - public void componentShown(ComponentEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.clearSelectedPath(); - } - - /** - * This method is invoked when top-level window is hidden This method - * closes current menu hierarchy. - * - * @param e The ComponentEvent - */ - public void componentHidden(ComponentEvent e) - { - MenuSelectionManager manager = MenuSelectionManager.defaultManager(); - manager.clearSelectedPath(); - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicProgressBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicProgressBarUI.java deleted file mode 100644 index bff6385..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicProgressBarUI.java +++ /dev/null @@ -1,962 +0,0 @@ -/* BasicProgressBarUI.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.geom.AffineTransform; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JComponent; -import javax.swing.JProgressBar; -import javax.swing.LookAndFeel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.event.AncestorEvent; -import javax.swing.event.AncestorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ProgressBarUI; - -/** - * The Basic Look and Feel UI delegate for the - * JProgressBar. - */ -public class BasicProgressBarUI extends ProgressBarUI -{ - /** - * A helper class that listens for ChangeEvents - * from the progressBar's model. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class ChangeHandler implements ChangeListener - { - /** - * Called every time the state of the model changes. - * - * @param e The ChangeEvent given by the model. - */ - public void stateChanged(ChangeEvent e) - { - // Nothing to do but repaint. - progressBar.repaint(); - } - } - - /** - * This helper class is used to listen for - * PropertyChangeEvents from the progressBar. - */ - private class PropertyChangeHandler implements PropertyChangeListener - { - /** - * Called every time the properties of the - * progressBar change. - * - * @param e The PropertyChangeEvent given by the progressBar. - */ - public void propertyChange(PropertyChangeEvent e) - { - // Only need to listen for indeterminate changes. - // All other things are done on a repaint. - if (e.getPropertyName().equals("indeterminate")) - if (((Boolean) e.getNewValue()).booleanValue() - && progressBar.isShowing()) - startAnimationTimer(); - else - stopAnimationTimer(); - } - } - - /** - * Receives notification when the progressbar is becoming visible or - * invisible and starts/stops the animation timer accordingly. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class AncestorHandler implements AncestorListener - { - - /** - * Receives notification when the progressbar is becoming visible. This - * starts the animation timer if the progressbar is indeterminate. - * - * @param event the ancestor event - */ - public void ancestorAdded(AncestorEvent event) - { - if (progressBar.isIndeterminate()) - startAnimationTimer(); - } - - /** - * Receives notification when the progressbar is becoming invisible. This - * stops the animation timer if the progressbar is indeterminate. - * - * @param event the ancestor event - */ - public void ancestorRemoved(AncestorEvent event) - { - stopAnimationTimer(); - } - - /** - * Receives notification when an ancestor has been moved. We don't need to - * do anything here. - */ - public void ancestorMoved(AncestorEvent event) - { - // Nothing to do here. - } - - } - - /** - * This helper class is used to listen for - * the animationTimer's intervals. On every interval, - * the bouncing box should move. - */ - private class Animator implements ActionListener - { - /** - * Called every time the animationTimer reaches - * its interval. - * - * @param e The ActionEvent given by the timer. - */ - public void actionPerformed(ActionEvent e) - { - // Incrementing the animation index will cause - // a repaint. - incrementAnimationIndex(); - } - } - - /** - * Receives notification when the size of the progress bar changes and - * invalidates the layout information for the box calculation in - * {@link BasicProgressBarUI#getBox(Rectangle)}. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class ComponentHandler extends ComponentAdapter - { - /** - * Receives notification when the size of the progress bar changes and - * invalidates the layout information for the box calculation in - * {@link BasicProgressBarUI#getBox}. - * - * @param e the component event - */ - public void componentResized(ComponentEvent e) - { - boxDependent = -1; - boxIndependent = -1; - incr = -1; - } - } - - /** - * Holds the value of the bouncing box that is returned by {@link #getBox}. - * - * @since 1.5 - */ - protected Rectangle boxRect; - - /** The timer used to move the bouncing box. */ - private transient Timer animationTimer; - - // The total number of frames must be an even number. - // The total number of frames is calculated from - // the cycleTime and repaintInterval given by - // the basic Look and Feel defaults. - // - // +-----------------------------------------------+ - // | frame0 | frame1 | frame2 | frame 3 | frame 4 | - // | | frame7 | frame6 | frame 5 | | - // +-----------------------------------------------+ - - /** The current animation index. */ - private transient int animationIndex; - - /** The total number of frames.*/ - private transient int numFrames; - - /** The helper that moves the bouncing box. */ - private transient Animator animation; - - /** The helper that listens for property change events. */ - private transient PropertyChangeHandler propertyListener; - - /** The Listener for the model. */ - protected ChangeListener changeListener; - - /** The progressBar for this UI. */ - protected JProgressBar progressBar; - - - /** - * The size of the box returned by {@link #getBox} in the orientation - * direction of the progress bar. This is package private to avoid accessor - * method. - */ - transient double boxDependent = - 1; - - /** - * The size of the box returned by {@link #getBox} against the orientation - * direction of the progress bar. This is package private to avoid accessor - * method. - */ - transient int boxIndependent = - 1; - - /** - * The increment for box animation. This is package private to avoid accessor - * method. - */ - transient double incr = -1; - - /** The length of the cell. The cell is the painted part. */ - private transient int cellLength; - - /** The gap between cells. */ - private transient int cellSpacing; - - /** The color of the text when the bar is not over it.*/ - private transient Color selectionBackground; - - /** The color of the text when the bar is over it. */ - private transient Color selectionForeground; - - /** - * Listens for notification when the component becomes showing and - * starts/stops the animation timer. - */ - private AncestorListener ancestorListener; - - /** - * Listens for resize events on the progress bar and invalidates some - * layout info. - */ - private ComponentListener componentListener; - - /** - * Creates a new BasicProgressBarUI object. - */ - public BasicProgressBarUI() - { - super(); - } - - /** - * Creates a new BasicProgressBarUI for the component. - * - * @param x The JComponent to create the UI for. - * - * @return A new BasicProgressBarUI. - */ - public static ComponentUI createUI(JComponent x) - { - return new BasicProgressBarUI(); - } - - /** - * This method returns the length of the bar (from the minimum) - * in pixels (or units that the Graphics object draws in) based - * on the progressBar's getPercentComplete() value. - * - * @param b The insets of the progressBar. - * @param width The width of the progressBar. - * @param height The height of the progressBar. - * - * @return The length of the bar that should be painted in pixels. - */ - protected int getAmountFull(Insets b, int width, int height) - { - double percentDone = progressBar.getPercentComplete(); - if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) - return (int) (percentDone * (width - b.left - b.right)); - else - return (int) (percentDone * (height - b.top - b.bottom)); - } - - /** - * The current animation index. - * - * @return The current animation index. - */ - protected int getAnimationIndex() - { - return animationIndex; - } - - /** - * This method returns the size and position of the bouncing box - * for the current animation index. It stores the values in the - * given rectangle and returns it. It returns null if no box should - * be drawn. - * - * @param r The bouncing box rectangle. - * - * @return The bouncing box rectangle. - */ - protected Rectangle getBox(Rectangle r) - { - if (!progressBar.isIndeterminate()) - return null; - if (r == null) - r = new Rectangle(); - - Rectangle vr = new Rectangle(); - SwingUtilities.calculateInnerArea(progressBar, vr); - - // Recalculate the metrics only when size of the progressbar has changed. - if (incr == -1 || boxDependent == -1 || boxIndependent == -1) - { - //numFrames has to be an even number as defined by spec. - int iterations = numFrames / 2; - if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) - { - boxDependent = vr.width / 6.; - incr = ((double) (vr.width - boxDependent)) / (double) iterations; - boxIndependent = vr.height; - } - else - { - boxDependent = vr.height / 6.; - incr = ((double) (vr.height - boxDependent)) / (double) iterations; - boxIndependent = vr.width; - } - } - - int index = getAnimationIndex(); - if (animationIndex > numFrames / 2) - index = numFrames - getAnimationIndex(); - - if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) - { - r.x = vr.x + (int) (incr * index); - r.y = vr.y; - r.width = (int) boxDependent; - r.height = (int) boxIndependent; - } - else - { - r.x = vr.x; - r.y = vr.height - (int) (incr * index) + vr.y - (int) boxDependent; - r.width = (int) boxIndependent; - r.height = (int) boxDependent; - } - return r; - } - - /** - * This method returns the length of the cells. - * - * @return The cell length. - */ - protected int getCellLength() - { - return cellLength; - } - - /** - * This method returns the spacing between cells. - * - * @return The cell gap. - */ - protected int getCellSpacing() - { - return cellSpacing; - } - - /** - * This method returns the maximum size of the JComponent. - * If it returns null, it is up to the LayoutManager - * to give it a size. - * - * @param c The component to find a maximum size for. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - Insets insets = c.getInsets(); - Dimension ret; - int orientation = progressBar.getOrientation(); - if (orientation == JProgressBar.VERTICAL) - { - ret = getPreferredInnerVertical(); - ret.height = Short.MAX_VALUE; - ret.width += insets.left + insets.right; - } - else - { - ret = getPreferredInnerHorizontal(); - ret.width = Short.MAX_VALUE; - ret.height += insets.top + insets.bottom; - } - return ret; - } - - /** - * This method returns the minimum size of the JComponent. - * If it returns null, it is up to the LayoutManager to - * give it a size. - * - * @param c The component to find a minimum size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - Insets insets = c.getInsets(); - Dimension ret; - int orientation = progressBar.getOrientation(); - if (orientation == JProgressBar.VERTICAL) - { - ret = getPreferredInnerVertical(); - ret.height = 10; - ret.width += insets.left + insets.right; - } - else - { - ret = getPreferredInnerHorizontal(); - ret.width = 10; - ret.height += insets.top + insets.bottom; - } - return ret; - } - - /** - * This method returns the preferred size of the inner - * rectangle (the bounds without the insets) if the - * progressBar is horizontal. - * - * @return The preferred size of the progressBar minus - * insets if it's horizontal. - */ - protected Dimension getPreferredInnerHorizontal() - { - Font font = progressBar.getFont(); - FontMetrics fm = progressBar.getFontMetrics(font); - - int stringWidth = 0; - String str = progressBar.getString(); - if (str != null) - stringWidth = fm.stringWidth(progressBar.getString()); - Insets i = progressBar.getInsets(); - int prefWidth = Math.max(200 - i.left - i.right, stringWidth); - - int stringHeight = 0; - if (str != null) - stringHeight = fm.getHeight(); - int prefHeight = Math.max(16 - i.top - i.bottom, stringHeight); - - return new Dimension(prefWidth, prefHeight); - } - - /** - * This method returns the preferred size of the inner - * rectangle (the bounds without insets) if the - * progressBar is vertical. - * - * @return The preferred size of the progressBar minus - * insets if it's vertical. - */ - protected Dimension getPreferredInnerVertical() - { - Font font = progressBar.getFont(); - FontMetrics fm = progressBar.getFontMetrics(font); - - int stringWidth = 0; - String str = progressBar.getString(); - if (str != null) - stringWidth = fm.stringWidth(progressBar.getString()); - Insets i = progressBar.getInsets(); - int prefHeight = Math.max(200 - i.left - i.right, stringWidth); - - int stringHeight = 0; - if (str != null) - stringHeight = fm.getHeight(); - int prefWidth = Math.max(16 - i.top - i.bottom, stringHeight); - - return new Dimension(prefWidth, prefHeight); - } - - /** - * This method returns the preferred size of the - * given JComponent. If it returns null, then it - * is up to the LayoutManager to give it a size. - * - * @param c The component to find the preferred size for. - * - * @return The preferred size of the component. - */ - public Dimension getPreferredSize(JComponent c) - { - Insets insets = c.getInsets(); - Dimension ret; - int orientation = progressBar.getOrientation(); - if (orientation == JProgressBar.VERTICAL) - ret = getPreferredInnerVertical(); - else - ret = getPreferredInnerHorizontal(); - ret.width += insets.left + insets.right; - ret.height += insets.top + insets.bottom; - return ret; - } - - /** - * This method returns the Color that the text is shown in when the bar is - * not over the text. - * - * @return The color of the text when the bar is not over it. - */ - protected Color getSelectionBackground() - { - return selectionBackground; - } - - /** - * This method returns the Color that the text is shown in when the bar is - * over the text. - * - * @return The color of the text when the bar is over it. - */ - protected Color getSelectionForeground() - { - return selectionForeground; - } - - /** - * This method returns the point (the top left of the bounding box) - * where the text should be painted. - * - * @param g The Graphics object to measure FontMetrics with. - * @param progressString The string to paint. - * @param x The x coordinate of the overall bounds box. - * @param y The y coordinate of the overall bounds box. - * @param width The width of the overall bounds box. - * @param height The height of the overall bounds box. - * - * @return The top left of the bounding box where text should be painted. - */ - protected Point getStringPlacement(Graphics g, String progressString, int x, - int y, int width, int height) - { - Rectangle tr = new Rectangle(); - Rectangle vr = new Rectangle(); - Rectangle ir = new Rectangle(); - - if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) - vr.setBounds(x, y, width, height); - else - vr.setBounds(y, x, height, width); - - Font f = g.getFont(); - FontMetrics fm = g.getFontMetrics(f); - - SwingUtilities.layoutCompoundLabel(progressBar, fm, progressString, null, - SwingConstants.CENTER, - SwingConstants.CENTER, - SwingConstants.CENTER, - SwingConstants.CENTER, vr, ir, tr, 0); - - if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) - return new Point(tr.x, tr.y); - else - return new Point(tr.y, tr.x); - } - - /** - * This method increments the animation index. - */ - protected void incrementAnimationIndex() - { - animationIndex++; - //numFrames is like string length, it should be named numFrames or something - if (animationIndex >= numFrames) - animationIndex = 0; - progressBar.repaint(); - } - - /** - * This method paints the progressBar. It delegates its responsibilities - * to paintDeterminate and paintIndeterminate. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - if (! progressBar.isIndeterminate()) - paintDeterminate(g, c); - else - paintIndeterminate(g, c); - } - - /** - * This method is called if the painting to be done is - * for a determinate progressBar. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - protected void paintDeterminate(Graphics g, JComponent c) - { - Color saved = g.getColor(); - int space = getCellSpacing(); - int len = getCellLength(); - int max = progressBar.getMaximum(); - int min = progressBar.getMinimum(); - int value = progressBar.getValue(); - - Rectangle vr = SwingUtilities.calculateInnerArea(c, new Rectangle()); - Rectangle or = progressBar.getBounds(); - Insets insets = c.getInsets(); - - int amountFull = getAmountFull(insets, or.width, or.height); - - if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) - { - g.setColor(c.getForeground()); - g.fillRect(vr.x, vr.y, amountFull, vr.height); - } - else - { - g.setColor(c.getForeground()); - g.fillRect(vr.x, vr.y + vr.height - amountFull, vr.width, - amountFull); - } - - if (progressBar.isStringPainted() && !progressBar.getString().equals("")) - paintString(g, 0, 0, or.width, or.height, amountFull, insets); - g.setColor(saved); - } - - /** - * This method is called if the painting to be done is for - * an indeterminate progressBar. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - protected void paintIndeterminate(Graphics g, JComponent c) - { - //need to paint the box at it's current position. no text is painted since - //all we're doing is bouncing back and forth - Color saved = g.getColor(); - Insets insets = c.getInsets(); - - Rectangle or = c.getBounds(); - Rectangle vr = new Rectangle(); - SwingUtilities.calculateInnerArea(c, vr); - - g.setColor(c.getBackground()); - g.fillRect(vr.x, vr.y, vr.width, vr.height); - - boxRect = getBox(boxRect); - - g.setColor(c.getForeground()); - g.fillRect(boxRect.x, boxRect.y, boxRect.width, boxRect.height); - - if (progressBar.isStringPainted() && !progressBar.getString().equals("")) - paintString(g, 0, 0, or.width, or.height, - getAmountFull(insets, or.width, or.height), insets); - - g.setColor(saved); - } - - /** - * This method paints the string for the progressBar. - * - * @param g The Graphics object to paint with. - * @param x The x coordinate of the progressBar. - * @param y The y coordinate of the progressBar. - * @param width The width of the progressBar. - * @param height The height of the progressBar. - * @param amountFull The amount of the progressBar that has its bar filled. - * @param b The insets of the progressBar. - */ - protected void paintString(Graphics g, int x, int y, int width, int height, - int amountFull, Insets b) - { - String str = progressBar.getString(); - int full = getAmountFull(b, width, height); - Point placement = getStringPlacement(g, progressBar.getString(), - x + b.left, y + b.top, - width - b.left - b.right, - height - b.top - b.bottom); - Color savedColor = g.getColor(); - Shape savedClip = g.getClip(); - FontMetrics fm = g.getFontMetrics(progressBar.getFont()); - - if (progressBar.getOrientation() == JProgressBar.VERTICAL) - { - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2); - g.setFont(progressBar.getFont().deriveFont(rotate)); - placement.x = width - placement.x - fm.getAscent(); - } - else - { - placement.y += fm.getAscent(); - } - - g.setColor(getSelectionForeground()); - g.setClip(0, 0, full + b.left, height); - g.drawString(str, placement.x, placement.y); - g.setColor(getSelectionBackground()); - g.setClip(full + b.left, 0, width - full, height); - g.drawString(str, placement.x, placement.y); - g.setClip(savedClip); - g.setColor(savedColor); - } - - /** - * This method sets the current animation index. If the index is greater than - * the number of frames, it resets to 0. - * - * @param newValue The new animation index. - */ - protected void setAnimationIndex(int newValue) - { - animationIndex = (newValue <= numFrames) ? newValue : 0; - progressBar.repaint(); - } - - /** - * This method sets the cell length. - * - * @param cellLen The cell length. - */ - protected void setCellLength(int cellLen) - { - cellLength = cellLen; - } - - /** - * This method sets the cell spacing. - * - * @param cellSpace The cell spacing. - */ - protected void setCellSpacing(int cellSpace) - { - cellSpacing = cellSpace; - } - - /** - * This method starts the animation timer. It is called - * when the propertyChangeListener detects that the progressBar - * has changed to indeterminate mode. - * - * @since 1.4 - */ - protected void startAnimationTimer() - { - if (animationTimer != null) - animationTimer.start(); - } - - /** - * This method stops the animation timer. It is called when - * the propertyChangeListener detects that the progressBar - * has changed to determinate mode. - * - * @since 1.4 - */ - protected void stopAnimationTimer() - { - if (animationTimer != null) - animationTimer.stop(); - setAnimationIndex(0); - } - - /** - * This method changes the settings for the progressBar to - * the defaults provided by the current Look and Feel. - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(progressBar, "ProgressBar.background", - "ProgressBar.foreground", - "ProgressBar.font"); - LookAndFeel.installBorder(progressBar, "ProgressBar.border"); - progressBar.setOpaque(true); - - selectionForeground = UIManager.getColor("ProgressBar.selectionForeground"); - selectionBackground = UIManager.getColor("ProgressBar.selectionBackground"); - cellLength = UIManager.getInt("ProgressBar.cellLength"); - cellSpacing = UIManager.getInt("ProgressBar.cellSpacing"); - - int repaintInterval = UIManager.getInt("ProgressBar.repaintInterval"); - int cycleTime = UIManager.getInt("ProgressBar.cycleTime"); - - if (cycleTime % repaintInterval != 0 - && (cycleTime / repaintInterval) % 2 != 0) - { - int div = (cycleTime / repaintInterval) + 2; - div /= 2; - div *= 2; - cycleTime = div * repaintInterval; - } - setAnimationIndex(0); - numFrames = cycleTime / repaintInterval; - animationTimer.setDelay(repaintInterval); - } - - /** - * The method uninstalls any defaults that were - * set by the current Look and Feel. - */ - protected void uninstallDefaults() - { - progressBar.setFont(null); - progressBar.setForeground(null); - progressBar.setBackground(null); - - selectionForeground = null; - selectionBackground = null; - } - - /** - * This method registers listeners to all the - * components that this UI delegate needs to listen to. - */ - protected void installListeners() - { - changeListener = new ChangeHandler(); - propertyListener = new PropertyChangeHandler(); - animation = new Animator(); - - progressBar.addChangeListener(changeListener); - progressBar.addPropertyChangeListener(propertyListener); - animationTimer.addActionListener(animation); - - ancestorListener = new AncestorHandler(); - progressBar.addAncestorListener(ancestorListener); - - componentListener = new ComponentHandler(); - progressBar.addComponentListener(componentListener); - } - - /** - * This method unregisters listeners to all the - * components that were listened to. - */ - protected void uninstallListeners() - { - progressBar.removeChangeListener(changeListener); - progressBar.removePropertyChangeListener(propertyListener); - animationTimer.removeActionListener(animation); - - changeListener = null; - propertyListener = null; - animation = null; - - if (ancestorListener != null) - progressBar.removeAncestorListener(ancestorListener); - ancestorListener = null; - - if (componentListener != null) - progressBar.removeComponentListener(componentListener); - componentListener = null; - } - - /** - * This method installs the UI for the given JComponent. - * This includes setting up defaults and listeners as - * well as initializing any values or objects that - * the UI may need. - * - * @param c The JComponent that is having this UI installed. - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JProgressBar) - { - progressBar = (JProgressBar) c; - - animationTimer = new Timer(200, null); - animationTimer.setRepeats(true); - - installDefaults(); - installListeners(); - } - if (progressBar.isIndeterminate()) - startAnimationTimer(); - } - - /** - * This method removes the UI for the given JComponent. - * This includes removing any listeners or defaults - * that the installUI may have set up. - * - * @param c The JComponent that is having this UI uninstalled. - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - uninstallListeners(); - uninstallDefaults(); - - animationTimer = null; - progressBar = null; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java deleted file mode 100644 index f8f62e1..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java +++ /dev/null @@ -1,101 +0,0 @@ -/* BasicRadioButtonMenuItemUI.java -- - Copyright (C) 2002, 2004 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.plaf.basic; - -import java.awt.event.MouseEvent; - -import javax.swing.JComponent; -import javax.swing.JMenuItem; -import javax.swing.MenuElement; -import javax.swing.MenuSelectionManager; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; - -/** - * UI Delegator for JRadioButtonMenuItem - */ -public class BasicRadioButtonMenuItemUI extends BasicMenuItemUI -{ - /** - * Creates a new BasicRadioButtonMenuItemUI object. - */ - public BasicRadioButtonMenuItemUI() - { - super(); - } - - /** - * Factory method to create a BasicRadioButtonMenuItemUI for the given {@link - * JComponent}, which should be a JRadioButtonMenuItem. - * - * @param b The {@link JComponent} a UI is being created for. - * - * @return A BasicRadioButtonMenuItemUI for the {@link JComponent}. - */ - public static ComponentUI createUI(JComponent b) - { - return new BasicRadioButtonMenuItemUI(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "RadioButtonMenuItem" - */ - protected String getPropertyPrefix() - { - return "RadioButtonMenuItem"; - } - - /** - * DOCUMENT ME! - * - * @param item DOCUMENT ME! - * @param e DOCUMENT ME! - * @param path DOCUMENT ME! - * @param manager DOCUMENT ME! - */ - public void processMouseEvent(JMenuItem item, MouseEvent e, - MenuElement[] path, - MenuSelectionManager manager) - { - // TODO: May not be implemented properly. - item.processMouseEvent(e, path, manager); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java deleted file mode 100644 index ff374d1..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicRadioButtonUI.java +++ /dev/null @@ -1,301 +0,0 @@ -/* BasicRadioButtonUI.java - Copyright (C) 2002, 2004, 2006, 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; - -import javax.swing.AbstractButton; -import javax.swing.ButtonModel; -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.View; - -/** - * The BasicLookAndFeel UI implementation for - * {@link javax.swing.JRadioButton}s. - */ -public class BasicRadioButtonUI extends BasicToggleButtonUI -{ - /** - * The default icon for JRadioButtons. The default icon displays the usual - * RadioButton and is sensible to the selection state of the button, - * and can be used both as normal icon as well as selectedIcon. - */ - protected Icon icon; - - /** - * Creates and returns a new instance of <code>BasicRadioButtonUI</code>. - * - * @return a new instance of <code>BasicRadioButtonUI</code> - */ - public static ComponentUI createUI(final JComponent c) - { - return new BasicRadioButtonUI(); - } - - /** - * Creates a new instance of <code>BasicButtonUI</code>. - */ - public BasicRadioButtonUI() - { - // nothing to do - } - - /** - * Installs defaults from the Look & Feel table on the specified - * button. - * - * @param b the button on which to install the defaults - */ - protected void installDefaults(AbstractButton b) - { - super.installDefaults(b); - icon = UIManager.getIcon(getPropertyPrefix() + "icon"); - } - - /** - * Returns the prefix used for UIDefaults properties. This is - * <code>RadioButton</code> in this case. - * - * @return the prefix used for UIDefaults properties - */ - protected String getPropertyPrefix() - { - return "RadioButton."; - } - - /** - * Returns the default icon for JRadioButtons. - * The default icon displays the usual - * RadioButton and is sensible to the selection state of the button, - * and can be used both as normal icon as well as selectedIcon. - * - * @return the default icon for JRadioButtons - */ - public Icon getDefaultIcon() - { - return icon; - } - - /** - * Paints the RadioButton. - * - * @param g the Graphics context to paint with - * @param c the button to paint - */ - public void paint(Graphics g, JComponent c) - { - AbstractButton b = (AbstractButton) c; - Dimension size = c.getSize(); - Insets i = b.getInsets(); - textR.x = 0; - textR.y = 0; - textR.width = 0; - textR.height = 0; - iconR.x = 0; - iconR.y = 0; - iconR.width = 0; - iconR.height = 0; - viewR.x = i.left; - viewR.y = i.right; - viewR.width = size.width - i.left - i.right; - viewR.height = size.height - i.top - i.bottom; - - Font f = c.getFont(); - - g.setFont(f); - - // This is the icon that we use for layout. - Icon icon = b.getIcon(); - if (icon == null) - icon = getDefaultIcon(); - - // Figure out the correct icon. - Icon currentIcon = getCurrentIcon(b); - - // Do the layout. - String text = SwingUtilities.layoutCompoundLabel(c, g.getFontMetrics(f), - b.getText(), currentIcon == null ? getDefaultIcon() : currentIcon, - b.getVerticalAlignment(), b.getHorizontalAlignment(), - b.getVerticalTextPosition(), b.getHorizontalTextPosition(), - viewR, iconR, textR, b.getIconTextGap()); - - // .. and paint it. - if (currentIcon != null) - currentIcon.paintIcon(c, g, iconR.x, iconR.y); - - // Paint text and focus indicator. - if (text != null) - { - // Maybe render HTML in the radio button. - View v = (View) c.getClientProperty(BasicHTML.propertyKey); - if (v != null) - v.paint(g, textR); - else - paintText(g, b, textR, text); - - // Paint focus indicator if necessary. - if (b.hasFocus() && b.isFocusPainted() - && textR.width > 0 && textR.height > 0) - paintFocus(g, textR, size); - } - } - - /** - * Determines the icon to be displayed for the specified radio button. - * - * @param b the radio button - * - * @return the icon - */ - private Icon getCurrentIcon(AbstractButton b) - { - ButtonModel m = b.getModel(); - Icon currentIcon = b.getIcon(); - - if (currentIcon == null) - { - currentIcon = getDefaultIcon(); - } - else - { - if (! m.isEnabled()) - { - if (m.isSelected()) - currentIcon = b.getDisabledSelectedIcon(); - else - currentIcon = b.getDisabledIcon(); - } - else if (m.isPressed() && m.isArmed()) - { - currentIcon = b.getPressedIcon(); - if (currentIcon == null) - currentIcon = b.getSelectedIcon(); - } - else if (m.isSelected()) - { - if (b.isRolloverEnabled() && m.isRollover()) - { - currentIcon = b.getRolloverSelectedIcon(); - if (currentIcon == null) - currentIcon = b.getSelectedIcon(); - } - else - currentIcon = b.getSelectedIcon(); - } - else if (b.isRolloverEnabled() && m.isRollover()) - { - currentIcon = b.getRolloverIcon(); - } - if (currentIcon == null) - currentIcon = b.getIcon(); - } - return currentIcon; - } - - public Dimension getPreferredSize(JComponent c) - { - // This is basically the same code as in - // BasicGraphicsUtils.getPreferredButtonSize() but takes the default icon - // property into account. JRadioButton and subclasses always have an icon: - // the check box. If the user explicitly changes it with setIcon() that - // one will be used for layout calculations and painting instead. - // The other icon properties are ignored. - AbstractButton b = (AbstractButton) c; - - Insets insets = b.getInsets(); - - String text = b.getText(); - Icon i = b.getIcon(); - if (i == null) - i = getDefaultIcon(); - - textR.x = 0; - textR.y = 0; - textR.width = 0; - textR.height = 0; - iconR.x = 0; - iconR.y = 0; - iconR.width = 0; - iconR.height = 0; - viewR.x = 0; - viewR.y = 0; - viewR.width = Short.MAX_VALUE; - viewR.height = Short.MAX_VALUE; - - SwingUtilities.layoutCompoundLabel(b, // for the component orientation - b.getFontMetrics(b.getFont()), - text, i, b.getVerticalAlignment(), - b.getHorizontalAlignment(), - b.getVerticalTextPosition(), - b.getHorizontalTextPosition(), - viewR, iconR, textR, - text == null ? 0 : b.getIconTextGap()); - - Rectangle r = SwingUtilities.computeUnion(textR.x, textR.y, textR.width, - textR.height, iconR); - - return new Dimension(insets.left + r.width + insets.right, - insets.top + r.height + insets.bottom); - } - - /** - * Paints the focus indicator for JRadioButtons. - * - * @param g the graphics context - * @param tr the rectangle for the text label - * @param size the size of the <code>JRadioButton</code> component. - */ - protected void paintFocus(Graphics g, Rectangle tr, Dimension size) - { - Color focusColor = UIManager.getColor(getPropertyPrefix() + ".focus"); - Color saved = g.getColor(); - g.setColor(focusColor); - g.drawRect(tr.x, tr.y, tr.width, tr.height); - g.setColor(saved); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java deleted file mode 100644 index 26c7a53..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicRootPaneUI.java +++ /dev/null @@ -1,292 +0,0 @@ -/* BasicRootPaneUI.java -- - Copyright (C) 2002, 2004 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.plaf.basic; - -import java.awt.event.ActionEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ButtonModel; -import javax.swing.InputMap; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JRootPane; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentInputMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.RootPaneUI; - -public class BasicRootPaneUI extends RootPaneUI - implements PropertyChangeListener -{ - - /** - * Performed when the user activates the default button inside the JRootPane, - * usually by pressing 'ENTER'. - */ - private class DefaultPressAction - extends AbstractAction - { - /** - * The JRootPane for which this action should be installed. - */ - private JRootPane rootPane; - - /** - * Creates a new DefaultPressAction for the specified JRootPane. - */ - DefaultPressAction(JRootPane rp) - { - rootPane = rp; - } - - /** - * Performes the action. - */ - public void actionPerformed(ActionEvent ev) - { - JButton b = rootPane.getDefaultButton(); - if (b != null) - { - ButtonModel m = b.getModel(); - m.setArmed(true); - m.setPressed(true); - } - } - } - - /** - * Performed when the user activates the default button inside the JRootPane, - * usually by releasing 'ENTER'. - */ - private class DefaultReleaseAction - extends AbstractAction - { - /** - * The JRootPane for which this action should be installed. - */ - private JRootPane rootPane; - - /** - * Creates a new DefaultReleaseAction for the specified JRootPane. - */ - DefaultReleaseAction(JRootPane rp) - { - rootPane = rp; - } - - /** - * Performes the action. - */ - public void actionPerformed(ActionEvent ev) - { - JButton b = rootPane.getDefaultButton(); - if (b != null) - { - ButtonModel m = b.getModel(); - m.setPressed(false); - m.setArmed(false); - } - } - } - - public static ComponentUI createUI(JComponent x) - { - return new BasicRootPaneUI(); - } - - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JRootPane) - { - JRootPane rp = (JRootPane) c; - installDefaults(rp); - installComponents(rp); - installListeners(rp); - installKeyboardActions(rp); - } - } - - /** - * Installs the look and feel defaults for JRootPane. - * - * @param rp the root pane to install the defaults to - */ - protected void installDefaults(JRootPane rp) - { - // TODO: What to do here, if anything? (might be a hook method) - } - - /** - * Installs additional look and feel components to the root pane. - * - * @param rp the root pane to install the components to - */ - protected void installComponents(JRootPane rp) - { - // All components are initialized in the JRootPane constructor, and since - // the createXXXPane methods are protected, I see no reasonable way, - // and no need to initialize them here. This method is here anyway - // for compatibility and to provide the necessary hooks to subclasses. - } - - /** - * Installs any look and feel specific listeners on the root pane. - * - * @param rp the root pane to install the listeners to - */ - protected void installListeners(JRootPane rp) - { - rp.addPropertyChangeListener(this); - } - - /** - * Installs look and feel keyboard actions on the root pane. - * - * @param rp the root pane to install the keyboard actions to - */ - protected void installKeyboardActions(JRootPane rp) - { - // Install the keyboard actions. - ActionMapUIResource am = new ActionMapUIResource(); - am.put("press", new DefaultPressAction(rp)); - am.put("release", new DefaultReleaseAction(rp)); - SwingUtilities.replaceUIActionMap(rp, am); - - // Install the input map from the UIManager. It seems like the actual - // bindings are installed in the JRootPane only when the defaultButton - // property receives a value. So we also only install an empty - // input map here, and fill it in propertyChange. - ComponentInputMapUIResource im = new ComponentInputMapUIResource(rp); - SwingUtilities.replaceUIInputMap(rp, JComponent.WHEN_IN_FOCUSED_WINDOW, - im); - } - - public void propertyChange(PropertyChangeEvent event) - { - JRootPane source = (JRootPane) event.getSource(); - String propertyName = event.getPropertyName(); - if (propertyName.equals("defaultButton")) - { - Object newValue = event.getNewValue(); - InputMap im = - SwingUtilities.getUIInputMap(source, - JComponent.WHEN_IN_FOCUSED_WINDOW); - if (newValue != null) - { - Object[] keybindings = (Object[]) UIManager.get( - "RootPane.defaultButtonWindowKeyBindings"); - LookAndFeel.loadKeyBindings(im, keybindings); - } - else - { - im.clear(); - } - } - } - - /** - * Uninstalls this UI from the root pane. This calls - * {@link #uninstallDefaults}, {@link #uninstallComponents}, - * {@link #uninstallListeners}, {@link #uninstallKeyboardActions} - * in this order. - * - * @param c the root pane to uninstall the UI from - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - if (c instanceof JRootPane) - { - JRootPane rp = (JRootPane) c; - uninstallDefaults(rp); - uninstallComponents(rp); - uninstallListeners(rp); - uninstallKeyboardActions(rp); - } - } - - /** - * Uninstalls the look and feel defaults that have been installed in - * {@link #installDefaults}. - * - * @param rp the root pane to uninstall the defaults from - */ - protected void uninstallDefaults(JRootPane rp) - { - // We do nothing here. - } - - /** - * Uninstalls look and feel components from the root pane. - * - * @param rp the root pane to uninstall the components from - */ - protected void uninstallComponents(JRootPane rp) - { - // We do nothing here. - } - - /** - * Uninstalls any look and feel specific listeners from the root pane. - * - * @param rp the root pane to uninstall the listeners from - */ - protected void uninstallListeners(JRootPane rp) - { - rp.removePropertyChangeListener(this); - } - - /** - * Uninstalls look and feel keyboard actions from the root pane. - * - * @param rp the root pane to uninstall the keyboard actions from - */ - protected void uninstallKeyboardActions(JRootPane rp) - { - SwingUtilities.replaceUIActionMap(rp, null); - SwingUtilities.replaceUIInputMap(rp, JComponent.WHEN_IN_FOCUSED_WINDOW, - null); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java deleted file mode 100644 index 9f24f8a..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicScrollBarUI.java +++ /dev/null @@ -1,1513 +0,0 @@ -/* BasicScrollBarUI.java -- - Copyright (C) 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.BoundedRangeModel; -import javax.swing.InputMap; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JScrollBar; -import javax.swing.JSlider; -import javax.swing.LookAndFeel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ScrollBarUI; - -/** - * The Basic Look and Feel UI delegate for JScrollBar. - */ -public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager, - SwingConstants -{ - /** - * A helper class that listens to the two JButtons on each end of the - * JScrollBar. - */ - protected class ArrowButtonListener extends MouseAdapter - { - - /** - * Move the thumb in the direction specified by the button's arrow. If - * this button is held down, then it should keep moving the thumb. - * - * @param e The MouseEvent fired by the JButton. - */ - public void mousePressed(MouseEvent e) - { - scrollTimer.stop(); - scrollListener.setScrollByBlock(false); - if (e.getSource() == incrButton) - scrollListener.setDirection(POSITIVE_SCROLL); - else if (e.getSource() == decrButton) - scrollListener.setDirection(NEGATIVE_SCROLL); - scrollTimer.setDelay(100); - scrollTimer.start(); - } - - /** - * Stops the thumb when the JButton is released. - * - * @param e The MouseEvent fired by the JButton. - */ - public void mouseReleased(MouseEvent e) - { - scrollTimer.stop(); - scrollTimer.setDelay(300); - if (e.getSource() == incrButton) - scrollByUnit(POSITIVE_SCROLL); - else if (e.getSource() == decrButton) - scrollByUnit(NEGATIVE_SCROLL); - } - } - - /** - * A helper class that listens to the ScrollBar's model for ChangeEvents. - */ - protected class ModelListener implements ChangeListener - { - /** - * Called when the model changes. - * - * @param e The ChangeEvent fired by the model. - */ - public void stateChanged(ChangeEvent e) - { - calculatePreferredSize(); - updateThumbRect(); - scrollbar.repaint(); - } - } - - /** - * A helper class that listens to the ScrollBar's properties. - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - /** - * Called when one of the ScrollBar's properties change. - * - * @param e The PropertyChangeEvent fired by the ScrollBar. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals("model")) - { - ((BoundedRangeModel) e.getOldValue()).removeChangeListener(modelListener); - scrollbar.getModel().addChangeListener(modelListener); - updateThumbRect(); - } - else if (e.getPropertyName().equals("orientation")) - { - uninstallListeners(); - uninstallComponents(); - uninstallDefaults(); - installDefaults(); - installComponents(); - installListeners(); - } - else if (e.getPropertyName().equals("enabled")) - { - Boolean b = (Boolean) e.getNewValue(); - if (incrButton != null) - incrButton.setEnabled(b.booleanValue()); - if (decrButton != null) - decrButton.setEnabled(b.booleanValue()); - } - } - } - - /** - * A helper class that listens for events from the timer that is used to - * move the thumb. - */ - protected class ScrollListener implements ActionListener - { - /** The direction the thumb moves in. */ - private transient int direction; - - /** Whether movement will be in blocks. */ - private transient boolean block; - - /** - * Creates a new ScrollListener object. The default is scrolling - * positively with block movement. - */ - public ScrollListener() - { - direction = POSITIVE_SCROLL; - block = true; - } - - /** - * Creates a new ScrollListener object using the given direction and - * block. - * - * @param dir The direction to move in. - * @param block Whether movement will be in blocks. - */ - public ScrollListener(int dir, boolean block) - { - direction = dir; - this.block = block; - } - - /** - * Sets the direction to scroll in. - * - * @param direction The direction to scroll in. - */ - public void setDirection(int direction) - { - this.direction = direction; - } - - /** - * Sets whether scrolling will be done in blocks. - * - * @param block Whether scrolling will be in blocks. - */ - public void setScrollByBlock(boolean block) - { - this.block = block; - } - - /** - * Called every time the timer reaches its interval. - * - * @param e The ActionEvent fired by the timer. - */ - public void actionPerformed(ActionEvent e) - { - if (block) - { - // Only need to check it if it's block scrolling - // We only block scroll if the click occurs - // in the track. - if (!trackListener.shouldScroll(direction)) - { - trackHighlight = NO_HIGHLIGHT; - scrollbar.repaint(); - return; - } - scrollByBlock(direction); - } - else - scrollByUnit(direction); - } - } - - /** - * Helper class that listens for movement on the track. - */ - protected class TrackListener extends MouseAdapter - implements MouseMotionListener - { - /** The current X coordinate of the mouse. */ - protected int currentMouseX; - - /** The current Y coordinate of the mouse. */ - protected int currentMouseY; - - /** - * The offset between the current mouse cursor and the current value of - * the scrollbar. - */ - protected int offset; - - /** - * This method is called when the mouse is being dragged. - * - * @param e The MouseEvent given. - */ - public void mouseDragged(MouseEvent e) - { - currentMouseX = e.getX(); - currentMouseY = e.getY(); - if (scrollbar.getValueIsAdjusting()) - { - int value; - if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL) - value = valueForXPosition(currentMouseX) - offset; - else - value = valueForYPosition(currentMouseY) - offset; - - scrollbar.setValue(value); - } - } - - /** - * This method is called when the mouse is moved. - * - * @param e The MouseEvent given. - */ - public void mouseMoved(MouseEvent e) - { - if (thumbRect.contains(e.getPoint())) - thumbRollover = true; - else - thumbRollover = false; - } - - /** - * This method is called when the mouse is pressed. When it is pressed, - * the thumb should move in blocks towards the cursor. - * - * @param e The MouseEvent given. - */ - public void mousePressed(MouseEvent e) - { - currentMouseX = e.getX(); - currentMouseY = e.getY(); - - int value; - if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL) - value = valueForXPosition(currentMouseX); - else - value = valueForYPosition(currentMouseY); - - if (! thumbRect.contains(e.getPoint())) - { - scrollTimer.stop(); - scrollListener.setScrollByBlock(true); - if (value > scrollbar.getValue()) - { - trackHighlight = INCREASE_HIGHLIGHT; - scrollListener.setDirection(POSITIVE_SCROLL); - } - else - { - trackHighlight = DECREASE_HIGHLIGHT; - scrollListener.setDirection(NEGATIVE_SCROLL); - } - scrollTimer.setDelay(100); - scrollTimer.start(); - } - else - { - // We'd like to keep track of where the cursor - // is inside the thumb. - // This works because the scrollbar's value represents - // "lower" edge of the thumb. The value at which - // the cursor is at must be greater or equal - // to that value. - - scrollListener.setScrollByBlock(false); - scrollbar.setValueIsAdjusting(true); - offset = value - scrollbar.getValue(); - } - scrollbar.repaint(); - } - - /** - * This method is called when the mouse is released. It should stop - * movement on the thumb - * - * @param e The MouseEvent given. - */ - public void mouseReleased(MouseEvent e) - { - scrollTimer.stop(); - scrollTimer.setDelay(300); - currentMouseX = e.getX(); - currentMouseY = e.getY(); - - if (shouldScroll(POSITIVE_SCROLL)) - scrollByBlock(POSITIVE_SCROLL); - else if (shouldScroll(NEGATIVE_SCROLL)) - scrollByBlock(NEGATIVE_SCROLL); - - trackHighlight = NO_HIGHLIGHT; - scrollListener.setScrollByBlock(false); - scrollbar.setValueIsAdjusting(true); - scrollbar.repaint(); - } - - /** - * A helper method that decides whether we should keep scrolling in the - * given direction. - * - * @param direction The direction to check for. - * - * @return Whether the thumb should keep scrolling. - */ - boolean shouldScroll(int direction) - { - int value; - if (scrollbar.getOrientation() == HORIZONTAL) - value = valueForXPosition(currentMouseX); - else - value = valueForYPosition(currentMouseY); - - if (thumbRect.contains(currentMouseX, currentMouseY)) - return false; - - if (direction == POSITIVE_SCROLL) - return value > scrollbar.getValue(); - else - return value < scrollbar.getValue(); - } - } - - /** The listener that listens to the JButtons. */ - protected ArrowButtonListener buttonListener; - - /** The listener that listens to the model. */ - protected ModelListener modelListener; - - /** The listener that listens to the scrollbar for property changes. */ - protected PropertyChangeListener propertyChangeListener; - - /** The listener that listens to the timer. */ - protected ScrollListener scrollListener; - - /** The listener that listens for MouseEvents on the track. */ - protected TrackListener trackListener; - - /** The JButton that decrements the scrollbar's value. */ - protected JButton decrButton; - - /** The JButton that increments the scrollbar's value. */ - protected JButton incrButton; - - /** The dimensions of the maximum thumb size. */ - protected Dimension maximumThumbSize; - - /** The dimensions of the minimum thumb size. */ - protected Dimension minimumThumbSize; - - /** The color of the thumb. */ - protected Color thumbColor; - - /** The outer shadow of the thumb. */ - protected Color thumbDarkShadowColor; - - /** The top and left edge color for the thumb. */ - protected Color thumbHighlightColor; - - /** The outer light shadow for the thumb. */ - protected Color thumbLightShadowColor; - - /** The color that is used when the mouse press occurs in the track. */ - protected Color trackHighlightColor; - - /** The color of the track. */ - protected Color trackColor; - - /** The size and position of the track. */ - protected Rectangle trackRect; - - /** The size and position of the thumb. */ - protected Rectangle thumbRect; - - /** Indicates that the decrease highlight should be painted. */ - protected static final int DECREASE_HIGHLIGHT = 1; - - /** Indicates that the increase highlight should be painted. */ - protected static final int INCREASE_HIGHLIGHT = 2; - - /** Indicates that no highlight should be painted. */ - protected static final int NO_HIGHLIGHT = 0; - - /** Indicates that the scrolling direction is positive. */ - private static final int POSITIVE_SCROLL = 1; - - /** Indicates that the scrolling direction is negative. */ - private static final int NEGATIVE_SCROLL = -1; - - /** The cached preferred size for the scrollbar. */ - private transient Dimension preferredSize; - - /** The current highlight status. */ - protected int trackHighlight; - - /** FIXME: Use this for something (presumably mouseDragged) */ - protected boolean isDragging; - - /** The timer used to move the thumb when the mouse is held. */ - protected Timer scrollTimer; - - /** The scrollbar this UI is acting for. */ - protected JScrollBar scrollbar; - - /** True if the mouse is over the thumb. */ - boolean thumbRollover; - - /** - * This method adds a component to the layout. - * - * @param name The name to associate with the component that is added. - * @param child The Component to add. - */ - public void addLayoutComponent(String name, Component child) - { - // You should not be adding stuff to this component. - // The contents are fixed. - } - - /** - * This method configures the scrollbar's colors. This can be done by - * looking up the standard colors from the Look and Feel defaults. - */ - protected void configureScrollBarColors() - { - trackColor = UIManager.getColor("ScrollBar.track"); - trackHighlightColor = UIManager.getColor("ScrollBar.trackHighlight"); - thumbColor = UIManager.getColor("ScrollBar.thumb"); - thumbHighlightColor = UIManager.getColor("ScrollBar.thumbHighlight"); - thumbDarkShadowColor = UIManager.getColor("ScrollBar.thumbDarkShadow"); - thumbLightShadowColor = UIManager.getColor("ScrollBar.thumbShadow"); - } - - /** - * This method creates an ArrowButtonListener. - * - * @return A new ArrowButtonListener. - */ - protected ArrowButtonListener createArrowButtonListener() - { - return new ArrowButtonListener(); - } - - /** - * This method creates a new JButton with the appropriate icon for the - * orientation. - * - * @param orientation The orientation this JButton uses. - * - * @return The increase JButton. - */ - protected JButton createIncreaseButton(int orientation) - { - return new BasicArrowButton(orientation); - } - - /** - * This method creates a new JButton with the appropriate icon for the - * orientation. - * - * @param orientation The orientation this JButton uses. - * - * @return The decrease JButton. - */ - protected JButton createDecreaseButton(int orientation) - { - return new BasicArrowButton(orientation); - } - - /** - * This method creates a new ModelListener. - * - * @return A new ModelListener. - */ - protected ModelListener createModelListener() - { - return new ModelListener(); - } - - /** - * This method creates a new PropertyChangeListener. - * - * @return A new PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * This method creates a new ScrollListener. - * - * @return A new ScrollListener. - */ - protected ScrollListener createScrollListener() - { - return new ScrollListener(); - } - - /** - * This method creates a new TrackListener. - * - * @return A new TrackListener. - */ - protected TrackListener createTrackListener() - { - return new TrackListener(); - } - - /** - * This method returns a new BasicScrollBarUI. - * - * @param c The JComponent to create a UI for. - * - * @return A new BasicScrollBarUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicScrollBarUI(); - } - - /** - * This method returns the maximum size for this JComponent. - * - * @param c The JComponent to measure the maximum size for. - * - * @return The maximum size for the component. - */ - public Dimension getMaximumSize(JComponent c) - { - return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - - /** - * This method returns the maximum thumb size. - * - * @return The maximum thumb size. - */ - protected Dimension getMaximumThumbSize() - { - return maximumThumbSize; - } - - /** - * This method returns the minimum size for this JComponent. - * - * @param c The JComponent to measure the minimum size for. - * - * @return The minimum size for the component. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the minimum thumb size. - * - * @return The minimum thumb size. - */ - protected Dimension getMinimumThumbSize() - { - return minimumThumbSize; - } - - /** - * This method calculates the preferred size since calling - * getPreferredSize() returns a cached value. - * This is package-private to avoid an accessor method. - */ - void calculatePreferredSize() - { - int height; - int width; - height = width = 0; - - if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL) - { - width += incrButton.getPreferredSize().getWidth(); - width += decrButton.getPreferredSize().getWidth(); - width += 16; - height = UIManager.getInt("ScrollBar.width"); - } - else - { - height += incrButton.getPreferredSize().getHeight(); - height += decrButton.getPreferredSize().getHeight(); - height += 16; - width = UIManager.getInt("ScrollBar.width"); - } - - Insets insets = scrollbar.getInsets(); - - height += insets.top + insets.bottom; - width += insets.left + insets.right; - - preferredSize = new Dimension(width, height); - } - - /** - * This method returns a cached value of the preferredSize. The only - * restrictions are: If the scrollbar is horizontal, the height should be - * the maximum of the height of the JButtons and the minimum width of the - * thumb. For vertical scrollbars, the calculation is similar (swap width - * for height and vice versa). - * - * @param c The JComponent to measure. - * - * @return The preferredSize. - */ - public Dimension getPreferredSize(JComponent c) - { - calculatePreferredSize(); - return preferredSize; - } - - /** - * This method returns the thumb's bounds based on the current value of the - * scrollbar. This method updates the cached value and returns that. - * - * @return The thumb bounds. - */ - protected Rectangle getThumbBounds() - { - return thumbRect; - } - - /** - * This method calculates the bounds of the track. This method updates the - * cached value and returns it. - * - * @return The track's bounds. - */ - protected Rectangle getTrackBounds() - { - return trackRect; - } - - /** - * This method installs any addition Components that are a part of or - * related to this scrollbar. - */ - protected void installComponents() - { - int orientation = scrollbar.getOrientation(); - switch (orientation) - { - case JScrollBar.HORIZONTAL: - incrButton = createIncreaseButton(EAST); - decrButton = createDecreaseButton(WEST); - break; - default: - incrButton = createIncreaseButton(SOUTH); - decrButton = createDecreaseButton(NORTH); - break; - } - - if (incrButton != null) - scrollbar.add(incrButton); - if (decrButton != null) - scrollbar.add(decrButton); - } - - /** - * This method installs the defaults for the scrollbar specified by the - * Basic Look and Feel. - */ - protected void installDefaults() - { - LookAndFeel.installColors(scrollbar, "ScrollBar.background", - "ScrollBar.foreground"); - LookAndFeel.installBorder(scrollbar, "ScrollBar.border"); - scrollbar.setOpaque(true); - scrollbar.setLayout(this); - - configureScrollBarColors(); - - maximumThumbSize = UIManager.getDimension("ScrollBar.maximumThumbSize"); - minimumThumbSize = UIManager.getDimension("ScrollBar.minimumThumbSize"); - } - - /** - * Installs the input map from the look and feel defaults, and a - * corresponding action map. Note the the keyboard bindings will only - * work when the {@link JScrollBar} component has the focus, which is rare. - */ - protected void installKeyboardActions() - { - InputMap keyMap = getInputMap( - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); - SwingUtilities.replaceUIInputMap(scrollbar, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, keyMap); - ActionMap map = getActionMap(); - SwingUtilities.replaceUIActionMap(scrollbar, map); - } - - /** - * Uninstalls the input map and action map installed by - * {@link #installKeyboardActions()}. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIActionMap(scrollbar, null); - SwingUtilities.replaceUIInputMap(scrollbar, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - } - - InputMap getInputMap(int condition) - { - if (condition == JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) - return (InputMap) UIManager.get("ScrollBar.focusInputMap"); - return null; - } - - /** - * Returns the action map for the {@link JScrollBar}. All scroll bars - * share a single action map which is created the first time this method is - * called, then stored in the UIDefaults table for subsequent access. - * - * @return The shared action map. - */ - ActionMap getActionMap() - { - ActionMap map = (ActionMap) UIManager.get("ScrollBar.actionMap"); - - if (map == null) // first time here - { - map = createActionMap(); - if (map != null) - UIManager.put("ScrollBar.actionMap", map); - } - return map; - } - - /** - * Creates the action map shared by all {@link JSlider} instances. - * This method is called once by {@link #getActionMap()} when it - * finds no action map in the UIDefaults table...after the map is - * created, it gets added to the defaults table so that subsequent - * calls to {@link #getActionMap()} will return the same shared - * instance. - * - * @return The action map. - */ - ActionMap createActionMap() - { - ActionMap map = new ActionMapUIResource(); - map.put("positiveUnitIncrement", - new AbstractAction("positiveUnitIncrement") { - public void actionPerformed(ActionEvent event) - { - JScrollBar sb = (JScrollBar) event.getSource(); - if (sb.isVisible()) - { - int delta = sb.getUnitIncrement(1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("positiveBlockIncrement", - new AbstractAction("positiveBlockIncrement") { - public void actionPerformed(ActionEvent event) - { - JScrollBar sb = (JScrollBar) event.getSource(); - if (sb.isVisible()) - { - int delta = sb.getBlockIncrement(1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("negativeUnitIncrement", - new AbstractAction("negativeUnitIncrement") { - public void actionPerformed(ActionEvent event) - { - JScrollBar sb = (JScrollBar) event.getSource(); - if (sb.isVisible()) - { - int delta = sb.getUnitIncrement(-1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("negativeBlockIncrement", - new AbstractAction("negativeBlockIncrement") { - public void actionPerformed(ActionEvent event) - { - JScrollBar sb = (JScrollBar) event.getSource(); - if (sb.isVisible()) - { - int delta = sb.getBlockIncrement(-1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("minScroll", - new AbstractAction("minScroll") { - public void actionPerformed(ActionEvent event) - { - JScrollBar sb = (JScrollBar) event.getSource(); - if (sb.isVisible()) - { - sb.setValue(sb.getMinimum()); - } - } - } - ); - map.put("maxScroll", - new AbstractAction("maxScroll") { - public void actionPerformed(ActionEvent event) - { - JScrollBar sb = (JScrollBar) event.getSource(); - if (sb.isVisible()) - { - sb.setValue(sb.getMaximum()); - } - } - } - ); - return map; - } - - /** - * This method installs any listeners for the scrollbar. This method also - * installs listeners for things such as the JButtons and the timer. - */ - protected void installListeners() - { - scrollListener = createScrollListener(); - trackListener = createTrackListener(); - buttonListener = createArrowButtonListener(); - modelListener = createModelListener(); - propertyChangeListener = createPropertyChangeListener(); - - scrollbar.addMouseMotionListener(trackListener); - scrollbar.addMouseListener(trackListener); - - incrButton.addMouseListener(buttonListener); - decrButton.addMouseListener(buttonListener); - - scrollbar.addPropertyChangeListener(propertyChangeListener); - scrollbar.getModel().addChangeListener(modelListener); - - scrollTimer.addActionListener(scrollListener); - } - - /** - * This method installs the UI for the component. This can include setting - * up listeners, defaults, and components. This also includes initializing - * any data objects. - * - * @param c The JComponent to install. - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JScrollBar) - { - scrollbar = (JScrollBar) c; - - trackRect = new Rectangle(); - thumbRect = new Rectangle(); - - scrollTimer = new Timer(300, null); - - installDefaults(); - installComponents(); - configureScrollBarColors(); - installListeners(); - installKeyboardActions(); - - calculatePreferredSize(); - } - } - - /** - * This method lays out the scrollbar. - * - * @param scrollbarContainer The Container to layout. - */ - public void layoutContainer(Container scrollbarContainer) - { - if (scrollbarContainer instanceof JScrollBar) - { - if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL) - layoutHScrollbar((JScrollBar) scrollbarContainer); - else - layoutVScrollbar((JScrollBar) scrollbarContainer); - } - } - - /** - * This method lays out the scrollbar horizontally. - * - * @param sb The JScrollBar to layout. - */ - protected void layoutHScrollbar(JScrollBar sb) - { - Rectangle vr = new Rectangle(); - SwingUtilities.calculateInnerArea(scrollbar, vr); - - Dimension incrDims = incrButton.getPreferredSize(); - Dimension decrDims = decrButton.getPreferredSize(); - - // calculate and update the track bounds - SwingUtilities.calculateInnerArea(scrollbar, trackRect); - trackRect.width -= incrDims.getWidth(); - trackRect.width -= decrDims.getWidth(); - trackRect.x += decrDims.getWidth(); - - updateThumbRect(); - - decrButton.setBounds(vr.x, vr.y, decrDims.width, trackRect.height); - incrButton.setBounds(trackRect.x + trackRect.width, vr.y, incrDims.width, - trackRect.height); - } - - /** - * This method lays out the scrollbar vertically. - * - * @param sb The JScrollBar to layout. - */ - protected void layoutVScrollbar(JScrollBar sb) - { - Rectangle vr = new Rectangle(); - SwingUtilities.calculateInnerArea(scrollbar, vr); - - Dimension incrDims = incrButton.getPreferredSize(); - Dimension decrDims = decrButton.getPreferredSize(); - - // Update rectangles - SwingUtilities.calculateInnerArea(scrollbar, trackRect); - trackRect.height -= incrDims.getHeight(); - trackRect.height -= decrDims.getHeight(); - trackRect.y += decrDims.getHeight(); - - updateThumbRect(); - - decrButton.setBounds(vr.x, vr.y, trackRect.width, decrDims.height); - incrButton.setBounds(vr.x, trackRect.y + trackRect.height, - trackRect.width, incrDims.height); - } - - /** - * Updates the thumb rect. - */ - void updateThumbRect() - { - int max = scrollbar.getMaximum(); - int min = scrollbar.getMinimum(); - int value = scrollbar.getValue(); - int extent = scrollbar.getVisibleAmount(); - if (max - extent <= min) - { - if (scrollbar.getOrientation() == JScrollBar.HORIZONTAL) - { - thumbRect.x = trackRect.x; - thumbRect.y = trackRect.y; - thumbRect.width = getMinimumThumbSize().width; - thumbRect.height = trackRect.height; - } - else - { - thumbRect.x = trackRect.x; - thumbRect.y = trackRect.y; - thumbRect.width = trackRect.width; - thumbRect.height = getMinimumThumbSize().height; - } - } - else - { - if (scrollbar.getOrientation() == JScrollBar.HORIZONTAL) - { - thumbRect.x = trackRect.x; - thumbRect.width = Math.max(extent * trackRect.width / (max - min), - getMinimumThumbSize().width); - int availableWidth = trackRect.width - thumbRect.width; - thumbRect.x += (value - min) * availableWidth / (max - min - extent); - thumbRect.y = trackRect.y; - thumbRect.height = trackRect.height; - } - else - { - thumbRect.x = trackRect.x; - thumbRect.height = Math.max(extent * trackRect.height / (max - min), - getMinimumThumbSize().height); - int availableHeight = trackRect.height - thumbRect.height; - thumbRect.y = trackRect.y - + (value - min) * availableHeight / (max - min - extent); - thumbRect.width = trackRect.width; - } - } - - } - - /** - * This method returns the minimum size required for the layout. - * - * @param scrollbarContainer The Container that is laid out. - * - * @return The minimum size. - */ - public Dimension minimumLayoutSize(Container scrollbarContainer) - { - return preferredLayoutSize(scrollbarContainer); - } - - /** - * This method is called when the component is painted. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - paintTrack(g, c, getTrackBounds()); - paintThumb(g, c, getThumbBounds()); - - if (trackHighlight == INCREASE_HIGHLIGHT) - paintIncreaseHighlight(g); - else if (trackHighlight == DECREASE_HIGHLIGHT) - paintDecreaseHighlight(g); - } - - /** - * This method is called when repainting and the mouse is pressed in the - * track. It paints the track below the thumb with the trackHighlight - * color. - * - * @param g The Graphics object to paint with. - */ - protected void paintDecreaseHighlight(Graphics g) - { - Color saved = g.getColor(); - - g.setColor(trackHighlightColor); - if (scrollbar.getOrientation() == HORIZONTAL) - g.fillRect(trackRect.x, trackRect.y, thumbRect.x - trackRect.x, - trackRect.height); - else - g.fillRect(trackRect.x, trackRect.y, trackRect.width, - thumbRect.y - trackRect.y); - g.setColor(saved); - } - - /** - * This method is called when repainting and the mouse is pressed in the - * track. It paints the track above the thumb with the trackHighlight - * color. - * - * @param g The Graphics objet to paint with. - */ - protected void paintIncreaseHighlight(Graphics g) - { - Color saved = g.getColor(); - - g.setColor(trackHighlightColor); - if (scrollbar.getOrientation() == HORIZONTAL) - g.fillRect(thumbRect.x + thumbRect.width, trackRect.y, - trackRect.x + trackRect.width - thumbRect.x - thumbRect.width, - trackRect.height); - else - g.fillRect(trackRect.x, thumbRect.y + thumbRect.height, trackRect.width, - trackRect.y + trackRect.height - thumbRect.y - - thumbRect.height); - g.setColor(saved); - } - - /** - * This method paints the thumb. - * - * @param g The Graphics object to paint with. - * @param c The Component that is being painted. - * @param thumbBounds The thumb bounds. - */ - protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) - { - g.setColor(thumbColor); - g.fillRect(thumbBounds.x, thumbBounds.y, thumbBounds.width, - thumbBounds.height); - - BasicGraphicsUtils.drawBezel(g, thumbBounds.x, thumbBounds.y, - thumbBounds.width, thumbBounds.height, - false, false, thumbDarkShadowColor, - thumbDarkShadowColor, thumbHighlightColor, - thumbHighlightColor); - } - - /** - * This method paints the track. - * - * @param g The Graphics object to paint with. - * @param c The JComponent being painted. - * @param trackBounds The track's bounds. - */ - protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) - { - Color saved = g.getColor(); - g.setColor(trackColor); - g.fill3DRect(trackBounds.x, trackBounds.y, trackBounds.width, - trackBounds.height, false); - g.setColor(saved); - } - - /** - * This method returns the preferred size for the layout. - * - * @param scrollbarContainer The Container to find a size for. - * - * @return The preferred size for the layout. - */ - public Dimension preferredLayoutSize(Container scrollbarContainer) - { - if (scrollbarContainer instanceof JComponent) - return getPreferredSize((JComponent) scrollbarContainer); - else - return null; - } - - /** - * This method removes a child component from the layout. - * - * @param child The child to remove. - */ - public void removeLayoutComponent(Component child) - { - // You should not be removing stuff from this component. - } - - /** - * The method scrolls the thumb by a block in the direction specified. - * - * @param direction The direction to scroll. - */ - protected void scrollByBlock(int direction) - { - scrollByBlock(scrollbar, direction); - } - - /** - * Scrolls the specified <code>scrollBar</code> by one block (according - * to the scrollable protocol) in the specified <code>direction</code>. - * - * This method is here statically to support wheel scrolling from the - * BasicScrollPaneUI without code duplication. - * - * @param scrollBar the scrollbar to scroll - * @param direction the scroll direction - */ - static final void scrollByBlock(JScrollBar scrollBar, int direction) - { - int delta; - if (direction > 0) - delta = scrollBar.getBlockIncrement(direction); - else - delta = - scrollBar.getBlockIncrement(direction); - int oldValue = scrollBar.getValue(); - int newValue = oldValue + delta; - - // Overflow check. - if (delta > 0 && newValue < oldValue) - newValue = scrollBar.getMaximum(); - else if (delta < 0 && newValue > oldValue) - newValue = scrollBar.getMinimum(); - - scrollBar.setValue(newValue); - } - - /** - * The method scrolls the thumb by a unit in the direction specified. - * - * @param direction The direction to scroll. - */ - protected void scrollByUnit(int direction) - { - scrollByUnits(scrollbar, direction, 1); - } - - /** - * Scrolls the specified <code>scrollbac/code> by <code>units</code> units - * in the specified <code>direction</code>. - * - * This method is here statically to support wheel scrolling from the - * BasicScrollPaneUI without code duplication. - * - * @param scrollBar the scrollbar to scroll - * @param direction the direction - * @param units the number of units to scroll - */ - static final void scrollByUnits(JScrollBar scrollBar, int direction, - int units) - { - // Do this inside a loop so that we don't clash with the scrollable - // interface, which can return different units at times. For instance, - // a Scrollable could return a unit of 2 pixels only to adjust the - // visibility of an item. If we would simply multiply this by units, - // then we would only get 6 pixels, which is complete crap. - for (int i = 0; i < units; i++) - { - int delta; - if (direction > 0) - delta = scrollBar.getUnitIncrement(direction); - else - delta = - scrollBar.getUnitIncrement(direction); - int oldValue = scrollBar.getValue(); - int newValue = oldValue + delta; - - // Overflow check. - if (delta > 0 && newValue < oldValue) - newValue = scrollBar.getMaximum(); - else if (delta < 0 && newValue > oldValue) - newValue = scrollBar.getMinimum(); - - scrollBar.setValue(newValue); - } - } - - /** - * This method sets the thumb's bounds. - * - * @param x The X position of the thumb. - * @param y The Y position of the thumb. - * @param width The width of the thumb. - * @param height The height of the thumb. - */ - protected void setThumbBounds(int x, int y, int width, int height) - { - thumbRect.x = x; - thumbRect.y = y; - thumbRect.width = width; - thumbRect.height = height; - } - - /** - * This method uninstalls any components that are a part of or related to - * this scrollbar. - */ - protected void uninstallComponents() - { - if (incrButton != null) - scrollbar.remove(incrButton); - if (decrButton != null) - scrollbar.remove(decrButton); - } - - /** - * This method uninstalls any defaults that this scrollbar acquired from the - * Basic Look and Feel defaults. - */ - protected void uninstallDefaults() - { - scrollbar.setForeground(null); - scrollbar.setBackground(null); - LookAndFeel.uninstallBorder(scrollbar); - incrButton = null; - decrButton = null; - } - - /** - * This method uninstalls any listeners that were registered during install. - */ - protected void uninstallListeners() - { - if (scrollTimer != null) - scrollTimer.removeActionListener(scrollListener); - - if (scrollbar != null) - { - scrollbar.getModel().removeChangeListener(modelListener); - scrollbar.removePropertyChangeListener(propertyChangeListener); - scrollbar.removeMouseListener(trackListener); - scrollbar.removeMouseMotionListener(trackListener); - } - - if (decrButton != null) - decrButton.removeMouseListener(buttonListener); - if (incrButton != null) - incrButton.removeMouseListener(buttonListener); - - propertyChangeListener = null; - modelListener = null; - buttonListener = null; - trackListener = null; - scrollListener = null; - } - - /** - * This method uninstalls the UI. This includes removing any defaults, - * listeners, and components that this UI may have initialized. It also - * nulls any instance data. - * - * @param c The Component to uninstall for. - */ - public void uninstallUI(JComponent c) - { - uninstallKeyboardActions(); - uninstallListeners(); - uninstallDefaults(); - uninstallComponents(); - - scrollTimer = null; - - thumbRect = null; - trackRect = null; - - trackColor = null; - trackHighlightColor = null; - thumbColor = null; - thumbHighlightColor = null; - thumbDarkShadowColor = null; - thumbLightShadowColor = null; - - scrollbar = null; - } - - /** - * This method returns the value in the scrollbar's range given the y - * coordinate. If the value is out of range, it will return the closest - * legal value. - * This is package-private to avoid an accessor method. - * - * @param yPos The y coordinate to calculate a value for. - * - * @return The value for the y coordinate. - */ - int valueForYPosition(int yPos) - { - int min = scrollbar.getMinimum(); - int max = scrollbar.getMaximum(); - int len = trackRect.height; - - int value; - - // If the length is 0, you shouldn't be able to even see where the thumb is. - // This really shouldn't ever happen, but just in case, we'll return the middle. - if (len == 0) - return (max - min) / 2; - - value = (yPos - trackRect.y) * (max - min) / len + min; - - // If this isn't a legal value, then we'll have to move to one now. - if (value > max) - value = max; - else if (value < min) - value = min; - return value; - } - - /** - * This method returns the value in the scrollbar's range given the x - * coordinate. If the value is out of range, it will return the closest - * legal value. - * This is package-private to avoid an accessor method. - * - * @param xPos The x coordinate to calculate a value for. - * - * @return The value for the x coordinate. - */ - int valueForXPosition(int xPos) - { - int min = scrollbar.getMinimum(); - int max = scrollbar.getMaximum(); - int len = trackRect.width; - - int value; - - // If the length is 0, you shouldn't be able to even see where the slider is. - // This really shouldn't ever happen, but just in case, we'll return the middle. - if (len == 0) - return (max - min) / 2; - - value = (xPos - trackRect.x) * (max - min) / len + min; - - // If this isn't a legal value, then we'll have to move to one now. - if (value > max) - value = max; - else if (value < min) - value = min; - return value; - } - - /** - * Returns true if the mouse is over the thumb. - * - * @return true if the mouse is over the thumb. - * - * @since 1.5 - */ - public boolean isThumbRollover() - { - return thumbRollover; - } - - /** - * Set thumbRollover to active. This indicates - * whether or not the mouse is over the thumb. - * - * @param active - true if the mouse is over the thumb. - * - * @since 1.5 - */ - protected void setThumbRollover(boolean active) - { - thumbRollover = active; - } - - /** - * Indicates whether the user can position the thumb with - * a mouse click (i.e. middle button). - * - * @return true if the user can position the thumb with a mouse - * click. - * - * @since 1.5 - */ - public boolean getSupportsAbsolutePositioning() - { - // The positioning feature has not been implemented. - // So, false is always returned. - return false; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java deleted file mode 100644 index 7123948..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicScrollPaneUI.java +++ /dev/null @@ -1,823 +0,0 @@ -/* BasicScrollPaneUI.java - Copyright (C) 2002, 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ContainerEvent; -import java.awt.event.ContainerListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JScrollBar; -import javax.swing.JScrollPane; -import javax.swing.JSlider; -import javax.swing.JViewport; -import javax.swing.LookAndFeel; -import javax.swing.ScrollPaneConstants; -import javax.swing.ScrollPaneLayout; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ScrollPaneUI; -import javax.swing.plaf.UIResource; - -/** - * A UI delegate for the {@link JScrollPane} component. - */ -public class BasicScrollPaneUI extends ScrollPaneUI - implements ScrollPaneConstants -{ - - /** - * Listens for changes in the state of the horizontal scrollbar's model and - * updates the scrollpane accordingly. - * - * @author Roman Kennke (kennke@aicas.com) - */ - public class HSBChangeListener implements ChangeListener - { - - /** - * Receives notification when the state of the horizontal scrollbar - * model has changed. - * - * @param event the change event - */ - public void stateChanged(ChangeEvent event) - { - JScrollBar hsb = scrollpane.getHorizontalScrollBar(); - JViewport vp = scrollpane.getViewport(); - Point viewPosition = vp.getViewPosition(); - viewPosition.x = hsb.getValue(); - vp.setViewPosition(viewPosition); - } - - } - - /** - * Listens for changes in the state of the vertical scrollbar's model and - * updates the scrollpane accordingly. - * - * @author Roman Kennke (kennke@aicas.com) - */ - public class VSBChangeListener implements ChangeListener - { - - /** - * Receives notification when the state of the vertical scrollbar - * model has changed. - * - * @param event the change event - */ - public void stateChanged(ChangeEvent event) - { - JScrollBar vsb = scrollpane.getVerticalScrollBar(); - JViewport vp = scrollpane.getViewport(); - Point viewPosition = vp.getViewPosition(); - viewPosition.y = vsb.getValue(); - vp.setViewPosition(viewPosition); - } - - } - - /** - * Listens for changes of the viewport's extent size and updates the - * scrollpane accordingly. - * - * @author Roman Kennke (kennke@aicas.com) - */ - public class ViewportChangeHandler implements ChangeListener - { - - /** - * Receives notification when the view's size, position or extent size - * changes. When the extents size has changed, this method calls - * {@link BasicScrollPaneUI#syncScrollPaneWithViewport()} to adjust the - * scrollbars extents as well. - * - * @param event the change event - */ - public void stateChanged(ChangeEvent event) - { - syncScrollPaneWithViewport(); - } - - } - - /** - * Listens for property changes on the scrollpane and update the view - * accordingly. - * - * @author Roman Kennke (kennke@aicas.com) - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - - /** - * Receives notification when any of the scrollpane's bound property - * changes. This method calls the appropriate update method on the - * <code>ScrollBarUI</code>. - * - * @param e the property change event - * - * @see BasicScrollPaneUI#updateColumnHeader(PropertyChangeEvent) - * @see BasicScrollPaneUI#updateRowHeader(PropertyChangeEvent) - * @see BasicScrollPaneUI#updateScrollBarDisplayPolicy(PropertyChangeEvent) - * @see BasicScrollPaneUI#updateViewport(PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent e) - { - String propName = e.getPropertyName(); - if (propName.equals("viewport")) - updateViewport(e); - else if (propName.equals("rowHeader")) - updateRowHeader(e); - else if (propName.equals("columnHeader")) - updateColumnHeader(e); - else if (propName.equals("horizontalScrollBarPolicy") - || e.getPropertyName().equals("verticalScrollBarPolicy")) - updateScrollBarDisplayPolicy(e); - else if (propName.equals("verticalScrollBar")) - { - JScrollBar oldSb = (JScrollBar) e.getOldValue(); - oldSb.getModel().removeChangeListener(vsbChangeListener); - JScrollBar newSb = (JScrollBar) e.getNewValue(); - newSb.getModel().addChangeListener(vsbChangeListener); - } - else if (propName.equals("horizontalScrollBar")) - { - JScrollBar oldSb = (JScrollBar) e.getOldValue(); - oldSb.getModel().removeChangeListener(hsbChangeListener); - JScrollBar newSb = (JScrollBar) e.getNewValue(); - newSb.getModel().addChangeListener(hsbChangeListener); - } - } - - } - - /** - * Listens for mouse wheel events and update the scrollpane accordingly. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.4 - */ - protected class MouseWheelHandler implements MouseWheelListener - { - /** - * Use to compute the visible rectangle. - */ - final Rectangle rect = new Rectangle(); - - /** - * Scroll with the mouse wheel. - * - * @author Audrius Meskauskas (audriusa@Bioinformatics.org) - */ - public void mouseWheelMoved(MouseWheelEvent e) - { - if (scrollpane.isWheelScrollingEnabled() && e.getScrollAmount() != 0) - { - // Try to scroll vertically first. - JScrollBar scrollBar = scrollpane.getVerticalScrollBar(); - if (scrollBar == null || ! scrollBar.isVisible()) - scrollBar = scrollpane.getHorizontalScrollBar(); - if (scrollBar != null && scrollBar.isVisible()) - { - int direction = e.getWheelRotation() < 0 ? -1 : 1; - int scrollType = e.getScrollType(); - if (scrollType == MouseWheelEvent.WHEEL_UNIT_SCROLL) - BasicScrollBarUI.scrollByUnits(scrollBar, direction, - e.getScrollAmount()); - else if (scrollType == MouseWheelEvent.WHEEL_BLOCK_SCROLL) - BasicScrollBarUI.scrollByBlock(scrollBar, direction); - } - } - } - } - - /** - * Adds/removes the mouse wheel listener when the component is added/removed - * to/from the scroll pane view port. - * - * @author Audrius Meskauskas (audriusa@bioinformatics.org) - */ - class ViewportContainerListener implements ContainerListener - { - /** - * Add the mouse wheel listener, allowing to scroll with the mouse. - */ - public void componentAdded(ContainerEvent e) - { - e.getChild().addMouseWheelListener(mouseWheelListener); - } - - /** - * Remove the mouse wheel listener. - */ - public void componentRemoved(ContainerEvent e) - { - e.getChild().removeMouseWheelListener(mouseWheelListener); - } - } - - /** - * The number of pixels by that we should scroll the content that does - * not implement Scrollable. - */ - static int SCROLL_NON_SCROLLABLES = 10; - - /** - * The number of rows to scroll per mouse wheel click. From impression, - * Sun seems using the value 3. - */ - static int ROWS_PER_WHEEL_CLICK = 3; - - /** The Scrollpane for which the UI is provided by this class. */ - protected JScrollPane scrollpane; - - /** - * The horizontal scrollbar listener. - */ - protected ChangeListener hsbChangeListener; - - /** - * The vertical scrollbar listener. - */ - protected ChangeListener vsbChangeListener; - - /** - * The viewport listener. - */ - protected ChangeListener viewportChangeListener; - - /** - * The scrollpane property change listener. - */ - protected PropertyChangeListener spPropertyChangeListener; - - /** - * The mousewheel listener for the scrollpane. - */ - MouseWheelListener mouseWheelListener; - - /** - * The listener to add and remove the mouse wheel listener to/from - * the component container. - */ - ContainerListener containerListener; - - public static ComponentUI createUI(final JComponent c) - { - return new BasicScrollPaneUI(); - } - - protected void installDefaults(JScrollPane p) - { - scrollpane = p; - LookAndFeel.installColorsAndFont(p, "ScrollPane.background", - "ScrollPane.foreground", - "ScrollPane.font"); - LookAndFeel.installBorder(p, "ScrollPane.border"); - - // Install Viewport border. - Border vpBorder = p.getViewportBorder(); - if (vpBorder == null || vpBorder instanceof UIResource) - { - vpBorder = UIManager.getBorder("ScrollPane.viewportBorder"); - p.setViewportBorder(vpBorder); - } - - p.setOpaque(true); - } - - protected void uninstallDefaults(JScrollPane p) - { - LookAndFeel.uninstallBorder(p); - Border vpBorder = p.getViewportBorder(); - if (vpBorder != null && vpBorder instanceof UIResource) - p.setViewportBorder(null); - } - - public void installUI(final JComponent c) - { - super.installUI(c); - installDefaults((JScrollPane) c); - installListeners((JScrollPane) c); - installKeyboardActions((JScrollPane) c); - } - - /** - * Installs the listeners on the scrollbars, the viewport and the scrollpane. - * - * @param sp the scrollpane on which to install the listeners - */ - protected void installListeners(JScrollPane sp) - { - if (spPropertyChangeListener == null) - spPropertyChangeListener = createPropertyChangeListener(); - sp.addPropertyChangeListener(spPropertyChangeListener); - - if (hsbChangeListener == null) - hsbChangeListener = createHSBChangeListener(); - sp.getHorizontalScrollBar().getModel().addChangeListener(hsbChangeListener); - - if (vsbChangeListener == null) - vsbChangeListener = createVSBChangeListener(); - sp.getVerticalScrollBar().getModel().addChangeListener(vsbChangeListener); - - if (viewportChangeListener == null) - viewportChangeListener = createViewportChangeListener(); - - if (mouseWheelListener == null) - mouseWheelListener = createMouseWheelListener(); - - if (containerListener == null) - containerListener = new ViewportContainerListener(); - - JViewport v = sp.getViewport(); - v.addChangeListener(viewportChangeListener); - v.addContainerListener(containerListener); - - // Add mouse wheel listeners to the componets that are probably already - // in the view port. - for (int i = 0; i < v.getComponentCount(); i++) - v.getComponent(i).addMouseWheelListener(mouseWheelListener); - } - - InputMap getInputMap(int condition) - { - if (condition == JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) - return (InputMap) UIManager.get("ScrollPane.ancestorInputMap"); - return null; - } - - /** - * Returns the action map for the {@link JScrollPane}. All scroll panes - * share a single action map which is created the first time this method is - * called, then stored in the UIDefaults table for subsequent access. - * - * @return The shared action map. - */ - ActionMap getActionMap() - { - ActionMap map = (ActionMap) UIManager.get("ScrollPane.actionMap"); - - if (map == null) // first time here - { - map = createActionMap(); - if (map != null) - UIManager.put("ScrollPane.actionMap", map); - } - return map; - } - - /** - * Creates the action map shared by all {@link JSlider} instances. - * This method is called once by {@link #getActionMap()} when it - * finds no action map in the UIDefaults table...after the map is - * created, it gets added to the defaults table so that subsequent - * calls to {@link #getActionMap()} will return the same shared - * instance. - * - * @return The action map. - */ - ActionMap createActionMap() - { - ActionMap map = new ActionMapUIResource(); - map.put("scrollLeft", - new AbstractAction("scrollLeft") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getHorizontalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getBlockIncrement(-1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("scrollEnd", - new AbstractAction("scrollEnd") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb1 = sp.getHorizontalScrollBar(); - if (sb1.isVisible()) - { - sb1.setValue(sb1.getMaximum()); - } - JScrollBar sb2 = sp.getVerticalScrollBar(); - if (sb2.isVisible()) - { - sb2.setValue(sb2.getMaximum()); - } - } - } - ); - map.put("unitScrollUp", - new AbstractAction("unitScrollUp") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getVerticalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getUnitIncrement(-1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("unitScrollLeft", - new AbstractAction("unitScrollLeft") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getHorizontalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getUnitIncrement(-1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("scrollUp", - new AbstractAction("scrollUp") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getVerticalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getBlockIncrement(-1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("scrollRight", - new AbstractAction("scrollRight") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getHorizontalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getBlockIncrement(1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("scrollHome", - new AbstractAction("scrollHome") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb1 = sp.getHorizontalScrollBar(); - if (sb1.isVisible()) - { - sb1.setValue(sb1.getMinimum()); - } - JScrollBar sb2 = sp.getVerticalScrollBar(); - if (sb2.isVisible()) - { - sb2.setValue(sb2.getMinimum()); - } - } - } - ); - map.put("scrollDown", - new AbstractAction("scrollDown") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getVerticalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getBlockIncrement(1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("unitScrollDown", - new AbstractAction("unitScrollDown") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getVerticalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getUnitIncrement(1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - map.put("unitScrollRight", - new AbstractAction("unitScrollRight") { - public void actionPerformed(ActionEvent event) - { - JScrollPane sp = (JScrollPane) event.getSource(); - JScrollBar sb = sp.getHorizontalScrollBar(); - if (sb.isVisible()) - { - int delta = sb.getUnitIncrement(1); - sb.setValue(sb.getValue() + delta); - } - } - } - ); - return map; - } - - /** - * Installs additional keyboard actions on the scrollpane. This is a hook - * method provided to subclasses in order to install their own keyboard - * actions. - * - * @param sp the scrollpane to install keyboard actions on - */ - protected void installKeyboardActions(JScrollPane sp) - { - InputMap keyMap = getInputMap( - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); - SwingUtilities.replaceUIInputMap(sp, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, keyMap); - ActionMap map = getActionMap(); - SwingUtilities.replaceUIActionMap(sp, map); - } - - /** - * Uninstalls all keyboard actions from the JScrollPane that have been - * installed by {@link #installKeyboardActions}. This is a hook method - * provided to subclasses to add their own keyboard actions. - * - * @param sp the scrollpane to uninstall keyboard actions from - */ - protected void uninstallKeyboardActions(JScrollPane sp) - { - SwingUtilities.replaceUIActionMap(sp, null); - SwingUtilities.replaceUIInputMap(sp, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - } - - /** - * Creates and returns the change listener for the horizontal scrollbar. - * - * @return the change listener for the horizontal scrollbar - */ - protected ChangeListener createHSBChangeListener() - { - return new HSBChangeListener(); - } - - /** - * Creates and returns the change listener for the vertical scrollbar. - * - * @return the change listener for the vertical scrollbar - */ - protected ChangeListener createVSBChangeListener() - { - return new VSBChangeListener(); - } - - /** - * Creates and returns the change listener for the viewport. - * - * @return the change listener for the viewport - */ - protected ChangeListener createViewportChangeListener() - { - return new ViewportChangeHandler(); - } - - /** - * Creates and returns the property change listener for the scrollpane. - * - * @return the property change listener for the scrollpane - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * Creates and returns the mouse wheel listener for the scrollpane. - * - * @return the mouse wheel listener for the scrollpane - * - * @since 1.4 - */ - protected MouseWheelListener createMouseWheelListener() - { - return new MouseWheelHandler(); - } - - public void uninstallUI(final JComponent c) - { - uninstallDefaults((JScrollPane) c); - uninstallListeners(c); - installKeyboardActions((JScrollPane) c); - } - - /** - * Uninstalls all the listeners that have been installed in - * {@link #installListeners(JScrollPane)}. - * - * @param c the scrollpane from which to uninstall the listeners - */ - protected void uninstallListeners(JComponent c) - { - JScrollPane sp = (JScrollPane) c; - sp.removePropertyChangeListener(spPropertyChangeListener); - sp.getHorizontalScrollBar().getModel() - .removeChangeListener(hsbChangeListener); - sp.getVerticalScrollBar().getModel() - .removeChangeListener(vsbChangeListener); - - JViewport v = sp.getViewport(); - v.removeChangeListener(viewportChangeListener); - v.removeContainerListener(containerListener); - - for (int i = 0; i < v.getComponentCount(); i++) - v.getComponent(i).removeMouseWheelListener(mouseWheelListener); - - } - - public Dimension getMinimumSize(JComponent c) - { - JScrollPane p = (JScrollPane) c; - ScrollPaneLayout sl = (ScrollPaneLayout) p.getLayout(); - return sl.minimumLayoutSize(c); - } - - public void paint(Graphics g, JComponent c) - { - Border vpBorder = scrollpane.getViewportBorder(); - if (vpBorder != null) - { - Rectangle r = scrollpane.getViewportBorderBounds(); - vpBorder.paintBorder(scrollpane, g, r.x, r.y, r.width, r.height); - } - } - - /** - * Synchronizes the scrollbar and header settings positions and extent - * with the viewport's view position and extent. - */ - protected void syncScrollPaneWithViewport() - { - JViewport vp = scrollpane.getViewport(); - - if (vp != null) - { - Dimension extentSize = vp.getExtentSize(); - Point viewPos = vp.getViewPosition(); - Dimension viewSize = vp.getViewSize(); - - // Update the vertical scrollbar. - JScrollBar vsb = scrollpane.getVerticalScrollBar(); - if (vsb != null) - { - int extent = extentSize.height; - int max = viewSize.height; - int val = Math.max(0, Math.min(viewPos.y, max - extent)); - vsb.setValues(val, extent, 0, max); - } - - // Update the horizontal scrollbar. - JScrollBar hsb = scrollpane.getHorizontalScrollBar(); - if (hsb != null) - { - int extent = extentSize.width; - int max = viewSize.width; - int val = Math.max(0, Math.min(viewPos.x, max - extent)); - hsb.setValues(val, extent, 0, max); - } - - // Update the row header. - JViewport rowHeader = scrollpane.getRowHeader(); - if (rowHeader != null) - { - Point p = new Point(0, viewPos.y); - rowHeader.setViewPosition(p); - } - - // Update the column header. - JViewport colHeader = scrollpane.getColumnHeader(); - if (colHeader != null) - { - Point p = new Point(viewPos.x, 0); - colHeader.setViewPosition(p); - } - } - } - - /** - * Receives notification when the <code>columnHeader</code> property has - * changed on the scrollpane. - * - * @param ev the property change event - */ - protected void updateColumnHeader(PropertyChangeEvent ev) - { - // TODO: Find out what should be done here. Or is this only a hook? - } - - /** - * Receives notification when the <code>rowHeader</code> property has changed - * on the scrollpane. - * - * @param ev the property change event - */ - protected void updateRowHeader(PropertyChangeEvent ev) - { - // TODO: Find out what should be done here. Or is this only a hook? - } - - /** - * Receives notification when the <code>scrollBarDisplayPolicy</code> - * property has changed on the scrollpane. - * - * @param ev the property change event - */ - protected void updateScrollBarDisplayPolicy(PropertyChangeEvent ev) - { - scrollpane.revalidate(); - scrollpane.repaint(); - } - - /** - * Receives notification when the <code>viewport</code> property has changed - * on the scrollpane. - * - * This method sets removes the viewportChangeListener from the old viewport - * and adds it to the new viewport. - * - * @param ev the property change event - */ - protected void updateViewport(PropertyChangeEvent ev) - { - JViewport oldViewport = (JViewport) ev.getOldValue(); - oldViewport.removeChangeListener(viewportChangeListener); - JViewport newViewport = (JViewport) ev.getNewValue(); - newViewport.addChangeListener(viewportChangeListener); - syncScrollPaneWithViewport(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSeparatorUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSeparatorUI.java deleted file mode 100644 index 2c80822..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicSeparatorUI.java +++ /dev/null @@ -1,252 +0,0 @@ -/* BasicSeparatorUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.JComponent; -import javax.swing.JSeparator; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SeparatorUI; - -/** - * The Basic Look and Feel UI delegate for JSeparator. - */ -public class BasicSeparatorUI extends SeparatorUI -{ - /** The shadow color. */ - protected Color shadow; - - /** The highlight color. */ - protected Color highlight; - - /** - * Creates a new UI delegate for the given JComponent. - * - * @param c The JComponent to create a delegate for. - * - * @return A new BasicSeparatorUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicSeparatorUI(); - } - - /** - * This method installs the UI for the given JComponent. - * This can include installing defaults, listeners, and - * initializing any instance data. - * - * @param c The JComponent that is having this UI installed. - */ - public void installUI(JComponent c) - { - super.installUI(c); - - if (c instanceof JSeparator) - { - JSeparator s = (JSeparator) c; - - installDefaults(s); - installListeners(s); - } - } - - /** - * Uninstalls the UI for the given JComponent. This - * method reverses what was done when installing - * the UI on the JComponent. - * - * @param c The JComponent that is having this UI uninstalled. - */ - public void uninstallUI(JComponent c) - { - if (c instanceof JSeparator) - { - JSeparator s = (JSeparator) c; - - uninstallListeners(s); - uninstallDefaults(s); - } - } - - /** - * This method installs the defaults that are given by - * the Basic Look and Feel. - * - * @param s The JSeparator that is being installed. - */ - protected void installDefaults(JSeparator s) - { - shadow = UIManager.getColor("Separator.shadow"); - highlight = UIManager.getColor("Separator.highlight"); - s.setOpaque(false); - } - - /** - * This method removes the defaults that were given - * by the Basic Look and Feel. - * - * @param s The JSeparator that is being uninstalled. - */ - protected void uninstallDefaults(JSeparator s) - { - shadow = null; - highlight = null; - } - - /** - * This method installs any listeners that need - * to be attached to the JSeparator or any of its - * components. - * - * @param s The JSeparator that is being installed. - */ - protected void installListeners(JSeparator s) - { - // Separators don't receive events. - } - - /** - * This method uninstalls any listeners that - * were installed during the install UI process. - * - * @param s The JSeparator that is being uninstalled. - */ - protected void uninstallListeners(JSeparator s) - { - // Separators don't receive events. - } - - /** - * The separator is made of two lines. The top line will be - * the shadow color (or left line if it's vertical). The bottom - * or right line will be the highlight color. The two lines will - * be centered inside the bounds box. If the separator is horizontal, - * then it will be vertically centered, or if it's vertical, it will - * be horizontally centered. - * - * @param g The Graphics object to paint with - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - Rectangle r = new Rectangle(); - SwingUtilities.calculateInnerArea(c, r); - Color saved = g.getColor(); - - JSeparator s; - if (c instanceof JSeparator) - s = (JSeparator) c; - else - return; - - if (s.getOrientation() == JSeparator.HORIZONTAL) - { - int midAB = r.height / 2; - g.setColor(shadow); - g.drawLine(r.x, r.y + midAB - 1, r.x + r.width, r.y + midAB - 1); - - g.setColor(highlight); - g.fillRect(r.x, r.y + midAB, r.x + r.width, r.y + midAB); - } - else - { - int midAD = r.height / 2 + r.y; - g.setColor(shadow); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - - g.setColor(highlight); - g.fillRect(r.x + midAD, r.y + r.height, r.x + midAD, r.y + r.height); - } - g.setColor(saved); - } - - /** - * This method returns the preferred size of the - * JComponent. - * - * @param c The JComponent to measure. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension pref = new Dimension(2, 0); - if (c instanceof JSeparator) - { - JSeparator s = (JSeparator) c; - if (s.getOrientation() == JSeparator.HORIZONTAL) - pref = new Dimension(0, 2); - } - return pref; - } - - /** - * This method returns the minimum size of the - * JComponent. - * - * @param c The JComponent to measure. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return new Dimension(0, 0); - } - - /** - * This method returns the maximum size of the - * JComponent. - * - * @param c The JComponent to measure. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return new Dimension(Short.MAX_VALUE, - Short.MAX_VALUE); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java deleted file mode 100644 index b9d5643..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicSliderUI.java +++ /dev/null @@ -1,2339 +0,0 @@ -/* BasicSliderUI.java -- - Copyright (C) 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Polygon; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Dictionary; -import java.util.Enumeration; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.BoundedRangeModel; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JSlider; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.MouseInputAdapter; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SliderUI; - -/** - * <p> - * BasicSliderUI.java This is the UI delegate in the Basic look and feel that - * paints JSliders. - * </p> - * - * <p> - * The UI delegate keeps track of 6 rectangles that place the various parts of - * the JSlider inside the component. - * </p> - * - * <p> - * The rectangles are organized as follows: - * </p> - * <pre> - * +-------------------------------------------------------+ <-- focusRect - * | | - * | +==+-------------------+==+--------------------+==+<------ contentRect - * | | | | |<---thumbRect | | | - * | | | TRACK | | |<--------- trackRect - * | | +-------------------+==+--------------------+ | | - * | | | | | | - * | | | TICKS GO HERE |<-------- tickRect - * | | | | | | - * | +==+-------------------------------------------+==+ | - * | | | | | | - * | | | | |<----- labelRect - * | | | LABELS GO HERE | | | - * | | | | | | - * | | | | | | - * | | | | | | - * | | | | | | - * | | | | | - * </pre> - * - * <p> - * The space between the contentRect and the focusRect are the FocusInsets. - * </p> - * - * <p> - * The space between the focusRect and the component bounds is the insetCache - * which are the component's insets. - * </p> - * - * <p> - * The top of the thumb is the top of the contentRect. The trackRect has to be - * as tall as the thumb. - * </p> - * - * <p> - * The trackRect and tickRect do not start from the left edge of the - * focusRect. They are trackBuffer away from each side of the focusRect. This - * is so that the thumb has room to move. - * </p> - * - * <p> - * The labelRect does start right against the contentRect's left and right - * edges and it gets all remaining space. - * </p> - */ -public class BasicSliderUI extends SliderUI -{ - /** - * Helper class that listens to the {@link JSlider}'s model for changes. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class ChangeHandler implements ChangeListener - { - /** - * Called when the slider's model has been altered. The UI delegate should - * recalculate any rectangles that are dependent on the model for their - * positions and repaint. - * - * @param e A static {@link ChangeEvent} passed from the model. - */ - public void stateChanged(ChangeEvent e) - { - // Maximum, minimum, and extent values will be taken - // care of automatically when the slider is repainted. - // Only thing that needs recalculation is the thumb. - calculateThumbLocation(); - slider.repaint(); - } - } - - /** - * Helper class that listens for resize events. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class ComponentHandler extends ComponentAdapter - { - /** - * Called when the size of the component changes. The UI delegate should - * recalculate any rectangles that are dependent on the model for their - * positions and repaint. - * - * @param e A {@link ComponentEvent}. - */ - public void componentResized(ComponentEvent e) - { - calculateGeometry(); - slider.repaint(); - } - } - - /** - * Helper class that listens for focus events. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class FocusHandler implements FocusListener - { - /** - * Called when the {@link JSlider} has gained focus. It should repaint - * the slider with the focus drawn. - * - * @param e A {@link FocusEvent}. - */ - public void focusGained(FocusEvent e) - { - slider.repaint(); - } - - /** - * Called when the {@link JSlider} has lost focus. It should repaint the - * slider without the focus drawn. - * - * @param e A {@link FocusEvent}. - */ - public void focusLost(FocusEvent e) - { - slider.repaint(); - } - } - - /** - * Helper class that listens for changes to the properties of the {@link - * JSlider}. - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - /** - * Called when one of the properties change. The UI should recalculate any - * rectangles if necessary and repaint. - * - * @param e A {@link PropertyChangeEvent}. - */ - public void propertyChange(PropertyChangeEvent e) - { - // Check for orientation changes. - String prop = e.getPropertyName(); - if (prop.equals("orientation") - || prop.equals("inverted") - || prop.equals("labelTable") - || prop.equals("majorTickSpacing") - || prop.equals("minorTickSpacing") - || prop.equals("paintTicks") - || prop.equals("paintTrack") - || prop.equals("paintLabels")) - { - calculateGeometry(); - slider.repaint(); - } - else if (e.getPropertyName().equals("model")) - { - BoundedRangeModel oldModel = (BoundedRangeModel) e.getOldValue(); - oldModel.removeChangeListener(changeListener); - slider.getModel().addChangeListener(changeListener); - calculateThumbLocation(); - slider.repaint(); - } - } - } - - /** - * Helper class that listens to our swing timer. This class is responsible - * for listening to the timer and moving the thumb in the proper direction - * every interval. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class ScrollListener implements ActionListener - { - /** Indicates which direction the thumb should scroll. */ - private transient int direction; - - /** Indicates whether we should scroll in blocks or in units. */ - private transient boolean block; - - /** - * Creates a new ScrollListener object. - */ - public ScrollListener() - { - direction = POSITIVE_SCROLL; - block = false; - } - - /** - * Creates a new ScrollListener object. - * - * @param dir The direction to scroll in. - * @param block If movement will be in blocks. - */ - public ScrollListener(int dir, boolean block) - { - direction = dir; - this.block = block; - } - - /** - * Called every time the swing timer reaches its interval. If the thumb - * needs to move, then this method will move the thumb one block or unit - * in the direction desired. Otherwise, the timer can be stopped. - * - * @param e An {@link ActionEvent}. - */ - public void actionPerformed(ActionEvent e) - { - if (! trackListener.shouldScroll(direction)) - { - scrollTimer.stop(); - return; - } - - if (block) - scrollByBlock(direction); - else - scrollByUnit(direction); - } - - /** - * Sets the direction to scroll in. - * - * @param direction The direction to scroll in. - */ - public void setDirection(int direction) - { - this.direction = direction; - } - - /** - * Sets whether movement will be in blocks. - * - * @param block If movement will be in blocks. - */ - public void setScrollByBlock(boolean block) - { - this.block = block; - } - } - - /** - * Helper class that listens for mouse events. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class TrackListener extends MouseInputAdapter - { - /** The current X position of the mouse. */ - protected int currentMouseX; - - /** The current Y position of the mouse. */ - protected int currentMouseY; - - /** - * The offset between the current slider value and the cursor's position. - */ - protected int offset; - - /** - * Called when the mouse has been dragged. This should find the mouse's - * current position and adjust the value of the {@link JSlider} - * accordingly. - * - * @param e A {@link MouseEvent} - */ - public void mouseDragged(MouseEvent e) - { - dragging = true; - if (slider.isEnabled()) - { - currentMouseX = e.getX(); - currentMouseY = e.getY(); - if (slider.getValueIsAdjusting()) - { - int value; - if (slider.getOrientation() == JSlider.HORIZONTAL) - value = valueForXPosition(currentMouseX) - offset; - else - value = valueForYPosition(currentMouseY) - offset; - - slider.setValue(value); - } - } - } - - /** - * Called when the mouse has moved over a component but no buttons have - * been pressed yet. - * - * @param e A {@link MouseEvent} - */ - public void mouseMoved(MouseEvent e) - { - // Don't care that we're moved unless we're dragging. - } - - /** - * Called when the mouse is pressed. When the press occurs on the thumb - * itself, the {@link JSlider} should have its value set to where the - * mouse was pressed. If the press occurs on the track, then the thumb - * should move one block towards the direction of the mouse. - * - * @param e A {@link MouseEvent} - */ - public void mousePressed(MouseEvent e) - { - if (slider.isEnabled()) - { - currentMouseX = e.getX(); - currentMouseY = e.getY(); - - int value; - if (slider.getOrientation() == JSlider.HORIZONTAL) - value = valueForXPosition(currentMouseX); - else - value = valueForYPosition(currentMouseY); - - if (slider.getSnapToTicks()) - value = findClosestTick(value); - - // If the thumb is hit, then we don't need to set the timers to - // move it. - if (! thumbRect.contains(e.getPoint())) - { - // The mouse has hit some other part of the slider. - // The value moves no matter where in the slider you hit. - if (value > slider.getValue()) - scrollDueToClickInTrack(POSITIVE_SCROLL); - else - scrollDueToClickInTrack(NEGATIVE_SCROLL); - } - else - { - slider.setValueIsAdjusting(true); - offset = value - slider.getValue(); - } - } - } - - /** - * Called when the mouse is released. This should stop the timer that - * scrolls the thumb. - * - * @param e A {@link MouseEvent} - */ - public void mouseReleased(MouseEvent e) - { - dragging = false; - if (slider.isEnabled()) - { - currentMouseX = e.getX(); - currentMouseY = e.getY(); - - if (slider.getValueIsAdjusting()) - { - slider.setValueIsAdjusting(false); - if (slider.getSnapToTicks()) - slider.setValue(findClosestTick(slider.getValue())); - } - if (scrollTimer != null) - scrollTimer.stop(); - } - slider.repaint(); - } - - /** - * Indicates whether the thumb should scroll in the given direction. - * - * @param direction The direction to check. - * - * @return True if the thumb should move in that direction. - */ - public boolean shouldScroll(int direction) - { - int value; - if (slider.getOrientation() == JSlider.HORIZONTAL) - value = valueForXPosition(currentMouseX); - else - value = valueForYPosition(currentMouseY); - - if (direction == POSITIVE_SCROLL) - return value > slider.getValue(); - else - return value < slider.getValue(); - } - } - - /** - * This class is no longer used as of JDK1.3. - */ - public class ActionScroller extends AbstractAction - { - /** - * Not used. - * - * @param slider not used - * @param dir not used - * @param block not used - */ - public ActionScroller(JSlider slider, int dir, boolean block) - { - // Not used. - } - - /** - * Not used. - * - * @param event not used - */ - public void actionPerformed(ActionEvent event) - { - // Not used. - } - } - - /** Listener for changes from the model. */ - protected ChangeListener changeListener; - - /** Listener for changes to the {@link JSlider}. */ - protected PropertyChangeListener propertyChangeListener; - - /** Listener for the scrollTimer. */ - protected ScrollListener scrollListener; - - /** Listener for component resizing. */ - protected ComponentListener componentListener; - - /** Listener for focus handling. */ - protected FocusListener focusListener; - - /** Listener for mouse events. */ - protected TrackListener trackListener; - - /** The insets between the FocusRectangle and the ContentRectangle. */ - protected Insets focusInsets; - - /** The {@link JSlider}'s insets. */ - protected Insets insetCache; - - /** Rectangle describing content bounds. See diagram above. */ - protected Rectangle contentRect; - - /** Rectangle describing focus bounds. See diagram above. */ - protected Rectangle focusRect; - - /** Rectangle describing the thumb's bounds. See diagram above. */ - protected Rectangle thumbRect; - - /** Rectangle describing the tick bounds. See diagram above. */ - protected Rectangle tickRect; - - /** Rectangle describing the label bounds. See diagram above. */ - protected Rectangle labelRect; - - /** Rectangle describing the track bounds. See diagram above. */ - protected Rectangle trackRect; - - /** FIXME: use this somewhere. */ - public static final int MAX_SCROLL = 2; - - /** FIXME: use this somewhere. */ - public static final int MIN_SCROLL = -2; - - /** A constant describing scrolling towards the minimum. */ - public static final int NEGATIVE_SCROLL = -1; - - /** A constant describing scrolling towards the maximum. */ - public static final int POSITIVE_SCROLL = 1; - - /** The gap between the edges of the contentRect and trackRect. */ - protected int trackBuffer; - - /** Whether this slider is actually drawn left to right. */ - protected boolean leftToRightCache; - - /** A timer that periodically moves the thumb. */ - protected Timer scrollTimer; - - /** A reference to the {@link JSlider} that this UI was created for. */ - protected JSlider slider; - - /** The shadow color. */ - private transient Color shadowColor; - - /** The highlight color. */ - private transient Color highlightColor; - - /** The focus color. */ - private transient Color focusColor; - - /** True if the user is dragging the slider. */ - boolean dragging; - - /** - * Creates a new Basic look and feel Slider UI. - * - * @param b The {@link JSlider} that this UI was created for. - */ - public BasicSliderUI(JSlider b) - { - super(); - } - - /** - * Returns true if the user is dragging the slider. - * - * @return true if the slider is being dragged. - * - * @since 1.5 - */ - protected boolean isDragging() - { - return dragging; - } - - /** - * Gets the shadow color to be used for this slider. The shadow color is the - * color used for drawing the top and left edges of the track. - * - * @return The shadow color. - */ - protected Color getShadowColor() - { - return shadowColor; - } - - /** - * Gets the highlight color to be used for this slider. The highlight color - * is the color used for drawing the bottom and right edges of the track. - * - * @return The highlight color. - */ - protected Color getHighlightColor() - { - return highlightColor; - } - - /** - * Gets the focus color to be used for this slider. The focus color is the - * color used for drawing the focus rectangle when the component gains - * focus. - * - * @return The focus color. - */ - protected Color getFocusColor() - { - return focusColor; - } - - /** - * Factory method to create a BasicSliderUI for the given {@link - * JComponent}, which should be a {@link JSlider}. - * - * @param b The {@link JComponent} a UI is being created for. - * - * @return A BasicSliderUI for the {@link JComponent}. - */ - public static ComponentUI createUI(JComponent b) - { - return new BasicSliderUI((JSlider) b); - } - - /** - * Installs and initializes all fields for this UI delegate. Any properties - * of the UI that need to be initialized and/or set to defaults will be - * done now. It will also install any listeners necessary. - * - * @param c The {@link JComponent} that is having this UI installed. - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JSlider) - { - slider = (JSlider) c; - - focusRect = new Rectangle(); - contentRect = new Rectangle(); - thumbRect = new Rectangle(); - trackRect = new Rectangle(); - tickRect = new Rectangle(); - labelRect = new Rectangle(); - - insetCache = slider.getInsets(); - leftToRightCache = ! slider.getInverted(); - - scrollTimer = new Timer(200, null); - scrollTimer.setRepeats(true); - - installDefaults(slider); - installListeners(slider); - installKeyboardActions(slider); - - calculateFocusRect(); - - calculateContentRect(); - calculateThumbSize(); - calculateTrackBuffer(); - calculateTrackRect(); - calculateThumbLocation(); - - calculateTickRect(); - calculateLabelRect(); - } - } - - /** - * Performs the opposite of installUI. Any properties or resources that need - * to be cleaned up will be done now. It will also uninstall any listeners - * it has. In addition, any properties of this UI will be nulled. - * - * @param c The {@link JComponent} that is having this UI uninstalled. - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - - uninstallKeyboardActions(slider); - uninstallListeners(slider); - - scrollTimer = null; - - focusRect = null; - contentRect = null; - thumbRect = null; - trackRect = null; - tickRect = null; - labelRect = null; - - focusInsets = null; - } - - /** - * Initializes any default properties that this UI has from the defaults for - * the Basic look and feel. - * - * @param slider The {@link JSlider} that is having this UI installed. - */ - protected void installDefaults(JSlider slider) - { - LookAndFeel.installColors(slider, "Slider.background", - "Slider.foreground"); - LookAndFeel.installBorder(slider, "Slider.border"); - shadowColor = UIManager.getColor("Slider.shadow"); - highlightColor = UIManager.getColor("Slider.highlight"); - focusColor = UIManager.getColor("Slider.focus"); - focusInsets = UIManager.getInsets("Slider.focusInsets"); - slider.setOpaque(true); - } - - /** - * Creates a new {@link TrackListener}. - * - * @param slider The {@link JSlider} that this {@link TrackListener} is - * created for. - * - * @return A new {@link TrackListener}. - */ - protected TrackListener createTrackListener(JSlider slider) - { - return new TrackListener(); - } - - /** - * Creates a new {@link ChangeListener}. - * - * @param slider The {@link JSlider} that this {@link ChangeListener} is - * created for. - * - * @return A new {@link ChangeListener}. - */ - protected ChangeListener createChangeListener(JSlider slider) - { - return new ChangeHandler(); - } - - /** - * Creates a new {@link ComponentListener}. - * - * @param slider The {@link JSlider} that this {@link ComponentListener} is - * created for. - * - * @return A new {@link ComponentListener}. - */ - protected ComponentListener createComponentListener(JSlider slider) - { - return new ComponentHandler(); - } - - /** - * Creates a new {@link FocusListener}. - * - * @param slider The {@link JSlider} that this {@link FocusListener} is - * created for. - * - * @return A new {@link FocusListener}. - */ - protected FocusListener createFocusListener(JSlider slider) - { - return new FocusHandler(); - } - - /** - * Creates a new {@link ScrollListener}. - * - * @param slider The {@link JSlider} that this {@link ScrollListener} is - * created for. - * - * @return A new {@link ScrollListener}. - */ - protected ScrollListener createScrollListener(JSlider slider) - { - return new ScrollListener(); - } - - /** - * Creates a new {@link PropertyChangeListener}. - * - * @param slider The {@link JSlider} that this {@link - * PropertyChangeListener} is created for. - * - * @return A new {@link PropertyChangeListener}. - */ - protected PropertyChangeListener createPropertyChangeListener(JSlider slider) - { - return new PropertyChangeHandler(); - } - - /** - * Creates and registers all the listeners for this UI delegate. This - * includes creating the ScrollListener and registering it to the timer. - * - * @param slider The {@link JSlider} is having listeners installed. - */ - protected void installListeners(JSlider slider) - { - propertyChangeListener = createPropertyChangeListener(slider); - componentListener = createComponentListener(slider); - trackListener = createTrackListener(slider); - focusListener = createFocusListener(slider); - changeListener = createChangeListener(slider); - scrollListener = createScrollListener(slider); - - slider.addPropertyChangeListener(propertyChangeListener); - slider.addComponentListener(componentListener); - slider.addMouseListener(trackListener); - slider.addMouseMotionListener(trackListener); - slider.addFocusListener(focusListener); - slider.getModel().addChangeListener(changeListener); - - scrollTimer.addActionListener(scrollListener); - } - - /** - * Unregisters all the listeners that this UI delegate was using. In - * addition, it will also null any listeners that it was using. - * - * @param slider The {@link JSlider} that is having listeners removed. - */ - protected void uninstallListeners(JSlider slider) - { - slider.removePropertyChangeListener(propertyChangeListener); - slider.removeComponentListener(componentListener); - slider.removeMouseListener(trackListener); - slider.removeMouseMotionListener(trackListener); - slider.removeFocusListener(focusListener); - slider.getModel().removeChangeListener(changeListener); - - scrollTimer.removeActionListener(scrollListener); - - propertyChangeListener = null; - componentListener = null; - trackListener = null; - focusListener = null; - changeListener = null; - scrollListener = null; - } - - /** - * Installs any keyboard actions. The list of keys that need to be bound are - * listed in Basic look and feel's defaults. - * - * @param slider The {@link JSlider} that is having keyboard actions - * installed. - */ - protected void installKeyboardActions(JSlider slider) - { - InputMap keyMap = getInputMap(JComponent.WHEN_FOCUSED); - SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, keyMap); - ActionMap map = getActionMap(); - SwingUtilities.replaceUIActionMap(slider, map); - } - - /** - * Uninstalls any keyboard actions. The list of keys used are listed in - * Basic look and feel's defaults. - * - * @param slider The {@link JSlider} that is having keyboard actions - * uninstalled. - */ - protected void uninstallKeyboardActions(JSlider slider) - { - SwingUtilities.replaceUIActionMap(slider, null); - SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, null); - } - - /* XXX: This is all after experimentation with SUN's implementation. - - PreferredHorizontalSize seems to be 200x21. - PreferredVerticalSize seems to be 21x200. - - MinimumHorizontalSize seems to be 36x21. - MinimumVerticalSize seems to be 21x36. - - PreferredSize seems to be 200x63. Or Components.getBounds? - - MinimumSize seems to be 36x63. - - MaximumSize seems to be 32767x63. - */ - - /** - * This method returns the preferred size when the slider is horizontally - * oriented. - * - * @return The dimensions of the preferred horizontal size. - */ - public Dimension getPreferredHorizontalSize() - { - Dimension dim = UIManager.getDimension("Slider.horizontalSize"); - if (dim == null) // Just to be sure we mirror the default. - dim = new Dimension(200, 21); - return dim; - } - - /** - * This method returns the preferred size when the slider is vertically - * oriented. - * - * @return The dimensions of the preferred vertical size. - */ - public Dimension getPreferredVerticalSize() - { - Dimension dim = UIManager.getDimension("Slider.verticalSize"); - if (dim == null) // Just to be sure we mirror the default. - dim = new Dimension(21, 200); - return dim; - } - - /** - * This method returns the minimum size when the slider is horizontally - * oriented. - * - * @return The dimensions of the minimum horizontal size. - */ - public Dimension getMinimumHorizontalSize() - { - Dimension dim = UIManager.getDimension("Slider.minimumHorizontalSize"); - if (dim == null) // Just to be sure we mirror the default. - dim = new Dimension(36, 21); - return dim; - } - - /** - * This method returns the minimum size of the slider when it is vertically - * oriented. - * - * @return The dimensions of the minimum vertical size. - */ - public Dimension getMinimumVerticalSize() - { - Dimension dim = UIManager.getDimension("Slider.minimumVerticalSize"); - if (dim == null) // Just to be sure we mirror the default. - dim = new Dimension(21, 36); - return dim; - } - - /** - * This method returns the preferred size of the component. If it returns - * null, then it is up to the Layout Manager to give the {@link JComponent} - * a size. - * - * @param c The {@link JComponent} to find the preferred size for. - * - * @return The dimensions of the preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - recalculateIfInsetsChanged(); - Dimension dim; - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - // Create copy here to protect the UIManager value. - dim = new Dimension(getPreferredHorizontalSize()); - dim.height = insetCache.top + insetCache.bottom; - dim.height += focusInsets.top + focusInsets.bottom; - dim.height += trackRect.height + tickRect.height + labelRect.height; - } - else - { - // Create copy here to protect the UIManager value. - dim = new Dimension(getPreferredVerticalSize()); - dim.width = insetCache.left + insetCache.right; - dim.width += focusInsets.left + focusInsets.right; - dim.width += trackRect.width + tickRect.width + labelRect.width; - } - return dim; - } - - /** - * This method returns the minimum size for this {@link JSlider} for this - * look and feel. If it returns null, then it is up to the Layout Manager - * to give the {@link JComponent} a size. - * - * @param c The {@link JComponent} to find the minimum size for. - * - * @return The dimensions of the minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - recalculateIfInsetsChanged(); - Dimension dim; - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - // Create copy here to protect the UIManager value. - dim = new Dimension(getMinimumHorizontalSize()); - dim.height = insetCache.top + insetCache.bottom; - dim.height += focusInsets.top + focusInsets.bottom; - dim.height += trackRect.height + tickRect.height + labelRect.height; - } - else - { - // Create copy here to protect the UIManager value. - dim = new Dimension(getMinimumVerticalSize()); - dim.width = insetCache.left + insetCache.right; - dim.width += focusInsets.left + focusInsets.right; - dim.width += trackRect.width + tickRect.width + labelRect.width; - } - return dim; - } - - /** - * This method returns the maximum size for this {@link JSlider} for this - * look and feel. - * - * @param c The {@link JComponent} to find a maximum size for. - * - * @return The dimensions of the maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension dim = getPreferredSize(c); - if (slider.getOrientation() == JSlider.HORIZONTAL) - dim.width = Short.MAX_VALUE; - else - dim.height = Short.MAX_VALUE; - return dim; - } - - /** - * This method calculates all the sizes of the rectangles by delegating to - * the helper methods calculateXXXRect. - */ - protected void calculateGeometry() - { - calculateFocusRect(); - calculateContentRect(); - calculateThumbSize(); - calculateTrackBuffer(); - calculateTrackRect(); - calculateTickRect(); - calculateLabelRect(); - calculateThumbLocation(); - } - - /** - * This method calculates the size and position of the focusRect. This - * method does not need to be called if the orientation changes. - */ - protected void calculateFocusRect() - { - focusRect.x = insetCache.left; - focusRect.y = insetCache.top; - focusRect.width = slider.getWidth() - insetCache.left - insetCache.right; - focusRect.height = slider.getHeight() - insetCache.top - insetCache.bottom; - } - - /** - * Sets the width and height of the <code>thumbRect</code> field, using the - * dimensions returned by {@link #getThumbSize()}. - */ - protected void calculateThumbSize() - { - Dimension d = getThumbSize(); - thumbRect.width = d.width; - thumbRect.height = d.height; - } - - /** - * Updates the <code>contentRect</code> field to an area inside the - * <code>focusRect</code>. This method does not need to be called if the - * orientation changes. - */ - protected void calculateContentRect() - { - contentRect.x = focusRect.x + focusInsets.left; - contentRect.y = focusRect.y + focusInsets.top; - - contentRect.width = focusRect.width - focusInsets.left - focusInsets.right; - contentRect.height = focusRect.height - focusInsets.top - - focusInsets.bottom; - } - - /** - * Calculates the position of the thumbRect based on the current value of - * the slider. It must take into account the orientation of the slider. - */ - protected void calculateThumbLocation() - { - int value = slider.getValue(); - - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - thumbRect.x = xPositionForValue(value) - thumbRect.width / 2; - thumbRect.y = trackRect.y + 1; - } - else - { - thumbRect.x = trackRect.x + 1; - thumbRect.y = yPositionForValue(value) - thumbRect.height / 2; - } - } - - /** - * Calculates the gap size between the edge of the <code>contentRect</code> - * and the edge of the <code>trackRect</code>, storing the result in the - * <code>trackBuffer</code> field. Sufficient space needs to be reserved - * for the slider thumb and/or the labels at each end of the slider track. - */ - protected void calculateTrackBuffer() - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - int w = Math.max(getWidthOfLowValueLabel(), getWidthOfHighValueLabel()); - trackBuffer = Math.max(thumbRect.width / 2, w / 2); - - } - else - { - int h = Math.max(getHeightOfLowValueLabel(), - getHeightOfHighValueLabel()); - trackBuffer = Math.max(thumbRect.height / 2, h / 2); - } - } - - /** - * Returns the size of the slider's thumb. The size is hard coded to - * <code>11 x 20</code> for horizontal sliders, and <code>20 x 11</code> for - * vertical sliders. Note that a new instance of {@link Dimension} is - * returned for every call to this method (this seems wasteful, but - * {@link Dimension} instances are not immutable, so this is probably - * unavoidable). - * - * @return The size of the slider's thumb. - */ - protected Dimension getThumbSize() - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - return new Dimension(11, 20); - else - return new Dimension(20, 11); - } - - /** - * Calculates the size and position of the trackRect. It must take into - * account the orientation of the slider. - */ - protected void calculateTrackRect() - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - int center = thumbRect.height; - if (slider.getPaintTicks()) - center += getTickLength(); - if (slider.getPaintLabels()) - center += getHeightOfTallestLabel(); - trackRect.x = contentRect.x + trackBuffer; - trackRect.y = contentRect.y + (contentRect.height - center - 1) / 2; - trackRect.width = contentRect.width - 2 * trackBuffer; - trackRect.height = thumbRect.height; - } - else - { - int center = thumbRect.width; - if (slider.getPaintTicks()) - center += getTickLength(); - if (slider.getPaintLabels()) - center += getWidthOfWidestLabel(); - trackRect.x = contentRect.x + (contentRect.width - center - 1) / 2; - trackRect.y = contentRect.y + trackBuffer; - trackRect.width = thumbRect.width; - trackRect.height = contentRect.height - 2 * trackBuffer; - } - } - - /** - * This method returns the height of the tick area box if the slider is - * horizontal and the width of the tick area box is the slider is vertical. - * It not necessarily how long the ticks will be. If a gap between the edge - * of tick box and the actual tick is desired, then that will need to be - * handled in the tick painting methods. - * - * @return The height (or width if the slider is vertical) of the tick - * rectangle. - */ - protected int getTickLength() - { - return 8; - } - - /** - * This method calculates the size and position of the tickRect. It must - * take into account the orientation of the slider. - */ - protected void calculateTickRect() - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - tickRect.x = trackRect.x; - tickRect.y = trackRect.y + trackRect.height; - tickRect.width = trackRect.width; - tickRect.height = getTickLength(); - - // this makes our Mauve tests pass...can't explain it! - if (!slider.getPaintTicks()) - { - tickRect.y--; - tickRect.height = 0; - } - } - else - { - tickRect.x = trackRect.x + trackRect.width; - tickRect.y = trackRect.y; - tickRect.width = getTickLength(); - tickRect.height = trackRect.height; - - // this makes our Mauve tests pass...can't explain it! - if (!slider.getPaintTicks()) - { - tickRect.x--; - tickRect.width = 0; - } - } - } - - /** - * Calculates the <code>labelRect</code> field, taking into account the - * orientation of the slider. - */ - protected void calculateLabelRect() - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - if (slider.getPaintLabels()) - { - labelRect.x = tickRect.x - trackBuffer; - labelRect.y = tickRect.y + tickRect.height; - labelRect.width = tickRect.width + trackBuffer * 2; - labelRect.height = getHeightOfTallestLabel(); - } - else - { - labelRect.x = tickRect.x; - labelRect.y = tickRect.y + tickRect.height; - labelRect.width = tickRect.width; - labelRect.height = 0; - } - } - else - { - if (slider.getPaintLabels()) - { - labelRect.x = tickRect.x + tickRect.width; - labelRect.y = tickRect.y - trackBuffer; - labelRect.width = getWidthOfWidestLabel(); - labelRect.height = tickRect.height + trackBuffer * 2; - } - else - { - labelRect.x = tickRect.x + tickRect.width; - labelRect.y = tickRect.y; - labelRect.width = 0; - labelRect.height = tickRect.height; - } - } - } - - /** - * This method returns the width of the widest label in the slider's label - * table. - * - * @return The width of the widest label or 0 if no label table exists. - */ - protected int getWidthOfWidestLabel() - { - int widest = 0; - Dictionary table = slider.getLabelTable(); - if (table != null) - { - for (Enumeration list = slider.getLabelTable().elements(); - list.hasMoreElements();) - { - Component label = (Component) list.nextElement(); - widest = Math.max(label.getPreferredSize().width, widest); - } - } - return widest; - } - - /** - * This method returns the height of the tallest label in the slider's label - * table. - * - * @return The height of the tallest label or 0 if no label table exists. - */ - protected int getHeightOfTallestLabel() - { - int tallest = 0; - Component label; - - if (slider.getLabelTable() == null) - return 0; - Dimension pref; - for (Enumeration list = slider.getLabelTable().elements(); - list.hasMoreElements();) - { - Object comp = list.nextElement(); - if (! (comp instanceof Component)) - continue; - label = (Component) comp; - pref = label.getPreferredSize(); - if (pref != null && pref.height > tallest) - tallest = pref.height; - } - return tallest; - } - - /** - * Returns the width of the label whose key has the highest value, or 0 if - * there are no labels. - * - * @return The width of the label whose key has the highest value. - * - * @see #getHighestValueLabel() - */ - protected int getWidthOfHighValueLabel() - { - Component highValueLabel = getHighestValueLabel(); - if (highValueLabel != null) - return highValueLabel.getPreferredSize().width; - else - return 0; - } - - /** - * Returns the width of the label whose key has the lowest value, or 0 if - * there are no labels. - * - * @return The width of the label whose key has the lowest value. - * - * @see #getLowestValueLabel() - */ - protected int getWidthOfLowValueLabel() - { - Component lowValueLabel = getLowestValueLabel(); - if (lowValueLabel != null) - return lowValueLabel.getPreferredSize().width; - else - return 0; - } - - /** - * Returns the height of the label whose key has the highest value, or 0 if - * there are no labels. - * - * @return The height of the high value label or 0 if no label table exists. - */ - protected int getHeightOfHighValueLabel() - { - Component highValueLabel = getHighestValueLabel(); - if (highValueLabel != null) - return highValueLabel.getPreferredSize().height; - else - return 0; - } - - /** - * Returns the height of the label whose key has the lowest value, or 0 if - * there are no labels. - * - * @return The height of the low value label or 0 if no label table exists. - */ - protected int getHeightOfLowValueLabel() - { - Component lowValueLabel = getLowestValueLabel(); - if (lowValueLabel != null) - return lowValueLabel.getPreferredSize().height; - else - return 0; - } - - /** - * Returns <code>true</code> if the slider scale is to be drawn inverted, - * and <code>false</code> if not. - * - * @return <code>true</code> if the slider is to be drawn inverted. - */ - protected boolean drawInverted() - { - return slider.getInverted(); - } - - /** - * This method returns the label whose key has the lowest value. - * - * @return The low value label or null if no label table exists. - */ - protected Component getLowestValueLabel() - { - Integer key = new Integer(Integer.MAX_VALUE); - Integer tmpKey; - Dictionary labelTable = slider.getLabelTable(); - - if (labelTable == null) - return null; - - for (Enumeration list = labelTable.keys(); list.hasMoreElements();) - { - Object value = list.nextElement(); - if (! (value instanceof Integer)) - continue; - tmpKey = (Integer) value; - if (tmpKey.intValue() < key.intValue()) - key = tmpKey; - } - Object comp = labelTable.get(key); - if (! (comp instanceof Component)) - return null; - return (Component) comp; - } - - /** - * Returns the label whose key has the highest value. - * - * @return The label whose key has the highest value or <code>null</code> if - * no label table exists. - */ - protected Component getHighestValueLabel() - { - Integer key = new Integer(Integer.MIN_VALUE); - Integer tmpKey; - Dictionary labelTable = slider.getLabelTable(); - - if (labelTable == null) - return null; - - for (Enumeration list = labelTable.keys(); list.hasMoreElements();) - { - Object value = list.nextElement(); - if (! (value instanceof Integer)) - continue; - tmpKey = (Integer) value; - if (tmpKey.intValue() > key.intValue()) - key = tmpKey; - } - Object comp = labelTable.get(key); - if (! (comp instanceof Component)) - return null; - return (Component) comp; - } - - /** - * This method is used to paint the {@link JSlider}. It delegates all its - * duties to the various paint methods like paintTicks(), paintTrack(), - * paintThumb(), etc. - * - * @param g The {@link Graphics} object to paint with. - * @param c The {@link JComponent} that is being painted. - */ - public void paint(Graphics g, JComponent c) - { - recalculateIfInsetsChanged(); - recalculateIfOrientationChanged(); - if (slider.getPaintTrack() && hitClip(g, trackRect)) - paintTrack(g); - if (slider.getPaintTicks() && hitClip(g, tickRect)) - paintTicks(g); - if (slider.getPaintLabels() && hitClip(g, labelRect)) - paintLabels(g); - if (slider.hasFocus() && hitClip(g, focusRect)) - paintFocus(g); - if (hitClip(g, thumbRect)) - paintThumb(g); - } - - /** - * This method recalculates any rectangles that need to be recalculated - * after the insets of the component have changed. - */ - protected void recalculateIfInsetsChanged() - { - Insets insets = slider.getInsets(); - if (! insets.equals(insetCache)) - { - insetCache = insets; - calculateGeometry(); - } - } - - /** - * This method recalculates any rectangles that need to be recalculated - * after the orientation of the slider changes. - */ - protected void recalculateIfOrientationChanged() - { - // Examining a test program shows that either Sun calls private - // methods that we don't know about, or these don't do anything. - calculateThumbSize(); - calculateTrackBuffer(); - calculateTrackRect(); - calculateThumbLocation(); - - calculateTickRect(); - calculateLabelRect(); - } - - /** - * This method is called during a repaint if the slider has focus. It draws - * an outline of the focusRect using the color returned by - * getFocusColor(). - * - * @param g The {@link Graphics} object to draw with. - */ - public void paintFocus(Graphics g) - { - Color saved_color = g.getColor(); - - g.setColor(getFocusColor()); - - g.drawRect(focusRect.x, focusRect.y, focusRect.width, focusRect.height); - - g.setColor(saved_color); - } - - /** - * <p> - * This method is called during a repaint if the track is to be drawn. It - * draws a 3D rectangle to represent the track. The track is not the size - * of the trackRect. The top and left edges of the track should be outlined - * with the shadow color. The bottom and right edges should be outlined - * with the highlight color. - * </p> - * <pre> - * a---d - * | | - * | | a------------------------d - * | | | | - * | | b------------------------c - * | | - * | | - * b---c - * </pre> - * - * <p> - * The b-a-d path needs to be drawn with the shadow color and the b-c-d path - * needs to be drawn with the highlight color. - * </p> - * - * @param g The {@link Graphics} object to draw with. - */ - public void paintTrack(Graphics g) - { - Color saved_color = g.getColor(); - int width; - int height; - - Point a = new Point(trackRect.x, trackRect.y + 1); - Point b = new Point(a); - Point c = new Point(a); - Point d = new Point(a); - - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - width = trackRect.width; - height = (thumbRect.height / 4 == 0) ? 1 : thumbRect.height / 4; - - a.translate(0, (trackRect.height / 2) - (height / 2)); - b.translate(0, (trackRect.height / 2) + (height / 2)); - c.translate(trackRect.width, (trackRect.height / 2) + (height / 2)); - d.translate(trackRect.width, (trackRect.height / 2) - (height / 2)); - } - else - { - width = (thumbRect.width / 4 == 0) ? 1 : thumbRect.width / 4; - height = trackRect.height; - - a.translate((trackRect.width / 2) - (width / 2), 0); - b.translate((trackRect.width / 2) - (width / 2), trackRect.height); - c.translate((trackRect.width / 2) + (width / 2), trackRect.height); - d.translate((trackRect.width / 2) + (width / 2), 0); - } - g.setColor(Color.GRAY); - g.fillRect(a.x, a.y, width, height); - - g.setColor(getHighlightColor()); - g.drawLine(b.x, b.y, c.x, c.y); - g.drawLine(c.x, c.y, d.x, d.y); - - g.setColor(getShadowColor()); - g.drawLine(b.x, b.y, a.x, a.y); - g.drawLine(a.x, a.y, d.x, d.y); - - g.setColor(saved_color); - } - - /** - * This method is called during a repaint if the ticks are to be drawn. This - * method must still verify that the majorTickSpacing and minorTickSpacing - * are greater than zero before drawing the ticks. - * - * @param g The {@link Graphics} object to draw with. - */ - public void paintTicks(Graphics g) - { - int max = slider.getMaximum(); - int min = slider.getMinimum(); - int majorSpace = slider.getMajorTickSpacing(); - int minorSpace = slider.getMinorTickSpacing(); - - if (majorSpace > 0) - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - g.translate(0, tickRect.y); - for (int i = min; i <= max; i += majorSpace) - paintMajorTickForHorizSlider(g, tickRect, xPositionForValue(i)); - g.translate(0, -tickRect.y); - } - else // JSlider.VERTICAL - { - g.translate(tickRect.x, 0); - for (int i = min; i <= max; i += majorSpace) - paintMajorTickForVertSlider(g, tickRect, yPositionForValue(i)); - g.translate(-tickRect.x, 0); - } - } - if (minorSpace > 0) - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - g.translate(0, tickRect.y); - for (int i = min; i <= max; i += minorSpace) - paintMinorTickForHorizSlider(g, tickRect, xPositionForValue(i)); - g.translate(0, -tickRect.y); - } - else - { - g.translate(tickRect.x, 0); - for (int i = min; i <= max; i += minorSpace) - paintMinorTickForVertSlider(g, tickRect, yPositionForValue(i)); - g.translate(-tickRect.x, 0); - } - } - } - - /* Minor ticks start at 1/4 of the height (or width) of the tickRect and - extend to 1/2 of the tickRect. - - Major ticks start at 1/4 of the height and extend to 3/4. - */ - - /** - * This method paints a minor tick for a horizontal slider at the given x - * value. x represents the x coordinate to paint at. - * - * @param g The {@link Graphics} object to draw with. - * @param tickBounds The tickRect rectangle. - * @param x The x coordinate to draw the tick at. - */ - protected void paintMinorTickForHorizSlider(Graphics g, - Rectangle tickBounds, int x) - { - int y = tickRect.height / 4; - Color saved = g.getColor(); - g.setColor(Color.BLACK); - - g.drawLine(x, y, x, y + tickRect.height / 4); - g.setColor(saved); - } - - /** - * This method paints a major tick for a horizontal slider at the given x - * value. x represents the x coordinate to paint at. - * - * @param g The {@link Graphics} object to draw with. - * @param tickBounds The tickRect rectangle. - * @param x The x coordinate to draw the tick at. - */ - protected void paintMajorTickForHorizSlider(Graphics g, - Rectangle tickBounds, int x) - { - int y = tickRect.height / 4; - Color saved = g.getColor(); - g.setColor(Color.BLACK); - - g.drawLine(x, y, x, y + tickRect.height / 2); - g.setColor(saved); - } - - /** - * This method paints a minor tick for a vertical slider at the given y - * value. y represents the y coordinate to paint at. - * - * @param g The {@link Graphics} object to draw with. - * @param tickBounds The tickRect rectangle. - * @param y The y coordinate to draw the tick at. - */ - protected void paintMinorTickForVertSlider(Graphics g, Rectangle tickBounds, - int y) - { - int x = tickRect.width / 4; - Color saved = g.getColor(); - g.setColor(Color.BLACK); - - g.drawLine(x, y, x + tickRect.width / 4, y); - g.setColor(saved); - } - - /** - * This method paints a major tick for a vertical slider at the given y - * value. y represents the y coordinate to paint at. - * - * @param g The {@link Graphics} object to draw with. - * @param tickBounds The tickRect rectangle. - * @param y The y coordinate to draw the tick at. - */ - protected void paintMajorTickForVertSlider(Graphics g, Rectangle tickBounds, - int y) - { - int x = tickRect.width / 4; - Color saved = g.getColor(); - g.setColor(Color.BLACK); - - g.drawLine(x, y, x + tickRect.width / 2, y); - g.setColor(saved); - } - - /** - * This method paints all the labels from the slider's label table. This - * method must make sure that the label table is not null before painting - * the labels. Each entry in the label table is a (integer, component) - * pair. Every label is painted at the value of the integer. - * - * @param g The {@link Graphics} object to draw with. - */ - public void paintLabels(Graphics g) - { - Dictionary table = slider.getLabelTable(); - if (table != null) - { - int min = slider.getMinimum(); - int max = slider.getMaximum(); - for (Enumeration list = table.keys(); list.hasMoreElements();) - { - Integer key = (Integer) list.nextElement(); - int value = key.intValue(); - if (value >= min && value <= max) - { - Component label = (Component) table.get(key); - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - g.translate(0, labelRect.y); - paintHorizontalLabel(g, value, label); - g.translate(0, -labelRect.y); - } - else - { - g.translate(labelRect.x, 0); - paintVerticalLabel(g, value, label); - g.translate(-labelRect.x, 0); - } - } - } - } - } - - /** - * This method paints the label on the horizontal slider at the value - * specified. The value is not a coordinate. It is a value within the range - * of the slider. If the value is not within the range of the slider, this - * method will do nothing. This method should not paint outside the - * boundaries of the labelRect. - * - * @param g The {@link Graphics} object to draw with. - * @param value The value to paint at. - * @param label The label to paint. - */ - protected void paintHorizontalLabel(Graphics g, int value, Component label) - { - int center = xPositionForValue(value); - int left = center - label.getPreferredSize().width / 2; - g.translate(left, 0); - label.paint(g); - g.translate(-left, 0); - } - - /** - * This method paints the label on the vertical slider at the value - * specified. The value is not a coordinate. It is a value within the range - * of the slider. If the value is not within the range of the slider, this - * method will do nothing. This method should not paint outside the - * boundaries of the labelRect. - * - * @param g The {@link Graphics} object to draw with. - * @param value The value to paint at. - * @param label The label to paint. - */ - protected void paintVerticalLabel(Graphics g, int value, Component label) - { - int center = yPositionForValue(value); - int top = center - label.getPreferredSize().height / 2; - g.translate(0, top); - label.paint(g); - g.translate(0, -top); - } - - /** - * <p> - * This method paints a thumb. There are two types of thumb: - * </p> - * <pre> - * Vertical Horizontal - * a---b a-----b - * | | | \ - * e c | c - * \ / | / - * d e-----d - * </pre> - * - * <p> - * In the case of vertical thumbs, we highlight the path b-a-e-d and shadow - * the path b-c-d. In the case of horizontal thumbs, we highlight the path - * c-b-a-e and shadow the path c-d-e. In both cases we fill the path - * a-b-c-d-e before shadows and highlights are drawn. - * </p> - * - * @param g The graphics object to paint with - */ - public void paintThumb(Graphics g) - { - Color saved_color = g.getColor(); - - Point a = new Point(thumbRect.x, thumbRect.y); - Point b = new Point(a); - Point c = new Point(a); - Point d = new Point(a); - Point e = new Point(a); - - Polygon bright; - Polygon light; // light shadow - Polygon dark; // dark shadow - Polygon all; - - // This will be in X-dimension if the slider is inverted and y if it isn't. - int turnPoint; - - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - turnPoint = thumbRect.height * 3 / 4; - - b.translate(thumbRect.width - 1, 0); - c.translate(thumbRect.width - 1, turnPoint); - d.translate(thumbRect.width / 2 - 1, thumbRect.height - 1); - e.translate(0, turnPoint); - - bright = new Polygon(new int[] { b.x - 1, a.x, e.x, d.x }, - new int[] { b.y, a.y, e.y, d.y }, 4); - - dark = new Polygon(new int[] { b.x, c.x, d.x + 1 }, new int[] { b.y, - c.y - 1, - d.y }, 3); - - light = new Polygon(new int[] { b.x - 1, c.x - 1, d.x + 1 }, - new int[] { b.y + 1, c.y - 1, d.y - 1 }, 3); - - all = new Polygon( - new int[] { a.x + 1, b.x - 2, c.x - 2, d.x, e.x + 1 }, - new int[] { a.y + 1, b.y + 1, c.y - 1, d.y - 1, e.y }, - 5); - } - else - { - turnPoint = thumbRect.width * 3 / 4 - 1; - - b.translate(turnPoint, 0); - c.translate(thumbRect.width - 1, thumbRect.height / 2); - d.translate(turnPoint, thumbRect.height - 1); - e.translate(0, thumbRect.height - 1); - - bright = new Polygon(new int[] { c.x - 1, b.x, a.x, e.x }, - new int[] { c.y - 1, b.y, a.y, e.y - 1 }, 4); - - dark = new Polygon(new int[] { c.x, d.x, e.x }, new int[] { c.y, d.y, - e.y }, 3); - - light = new Polygon(new int[] { c.x - 1, d.x, e.x + 1 }, - new int[] { c.y, d.y - 1, e.y - 1 }, 3); - all = new Polygon(new int[] { a.x + 1, b.x, c.x - 2, c.x - 2, d.x, - e.x + 1 }, new int[] { a.y + 1, b.y + 1, - c.y - 1, c.y, - d.y - 2, e.y - 2 }, - 6); - } - - g.setColor(Color.WHITE); - g.drawPolyline(bright.xpoints, bright.ypoints, bright.npoints); - - g.setColor(Color.BLACK); - g.drawPolyline(dark.xpoints, dark.ypoints, dark.npoints); - - g.setColor(Color.GRAY); - g.drawPolyline(light.xpoints, light.ypoints, light.npoints); - - g.setColor(Color.LIGHT_GRAY); - g.drawPolyline(all.xpoints, all.ypoints, all.npoints); - g.fillPolygon(all); - - g.setColor(saved_color); - } - - /** - * This method sets the position of the thumbRect. - * - * @param x The new x position. - * @param y The new y position. - */ - public void setThumbLocation(int x, int y) - { - Rectangle union = new Rectangle(thumbRect); - thumbRect.setLocation(x, y); - SwingUtilities.computeUnion(thumbRect.x, thumbRect.y, thumbRect.width, - thumbRect.height, union); - slider.repaint(union); - } - - /** - * Moves the thumb one block in the direction specified (a block is 1/10th - * of the slider range). If the slider snaps to ticks, this method is - * responsible for snapping it to a tick after the thumb has been moved. - * - * @param direction the direction (positive values increment the thumb - * position by one block, zero/negative values decrement the thumb position - * by one block). - */ - public void scrollByBlock(int direction) - { - int unit = (slider.getMaximum() - slider.getMinimum()) / 10; - int moveTo = slider.getValue(); - if (direction > 0) - moveTo += unit; - else - moveTo -= unit; - - if (slider.getSnapToTicks()) - moveTo = findClosestTick(moveTo); - - slider.setValue(moveTo); - } - - /** - * Moves the thumb one unit in the specified direction. If the slider snaps - * to ticks, this method is responsible for snapping it to a tick after the - * thumb has been moved. - * - * @param direction the direction (positive values increment the thumb - * position by one, zero/negative values decrement the thumb position by - * one). - */ - public void scrollByUnit(int direction) - { - int moveTo = slider.getValue(); - if (direction > 0) - moveTo++; - else - moveTo--; - - if (slider.getSnapToTicks()) - moveTo = findClosestTick(moveTo); - - slider.setValue(moveTo); - } - - /** - * This method is called when there has been a click in the track and the - * thumb needs to be scrolled on regular intervals. This method is only - * responsible for starting the timer and not for stopping it. - * - * @param dir The direction to move in. - */ - protected void scrollDueToClickInTrack(int dir) - { - scrollTimer.stop(); - - scrollListener.setDirection(dir); - scrollListener.setScrollByBlock(true); - - scrollTimer.start(); - } - - /** - * Returns the x-coordinate (relative to the component) for the given slider - * value. This method assumes that the <code>trackRect</code> field is - * set up. - * - * @param value the slider value. - * - * @return The x-coordinate. - */ - protected int xPositionForValue(int value) - { - int min = slider.getMinimum(); - int max = slider.getMaximum(); - int len = trackRect.width; - double range = max - min; - double pixPerVal = len / range; - int left = trackRect.x; - int right = left + trackRect.width - 1; - int xpos; - if (! drawInverted()) - xpos = left + (int) Math.round(pixPerVal * ((double) value - min)); - else - xpos = right - (int) Math.round(pixPerVal * ((double) value - min)); - xpos = Math.max(left, xpos); - xpos = Math.min(right, xpos); - return xpos; - } - - /** - * Returns the y-coordinate (relative to the component) for the given slider - * value. This method assumes that the <code>trackRect</code> field is - * set up. - * - * @param value the slider value. - * - * @return The y-coordinate. - */ - protected int yPositionForValue(int value) - { - int min = slider.getMinimum(); - int max = slider.getMaximum(); - int len = trackRect.height; - double range = max - min; - double pixPerVal = len / range; - int top = trackRect.y; - int bottom = top + trackRect.height - 1; - int ypos; - if (! drawInverted()) - ypos = top + (int) Math.round(pixPerVal * ((double) max - value)); - else - ypos = top + (int) Math.round(pixPerVal * ((double) value - min)); - ypos = Math.max(top, ypos); - ypos = Math.min(bottom, ypos); - return ypos; - } - - /** - * This method returns the value in the slider's range given the y - * coordinate. If the value is out of range, it will return the closest - * legal value. - * - * @param yPos The y coordinate to calculate a value for. - * - * @return The value for the y coordinate. - */ - public int valueForYPosition(int yPos) - { - int min = slider.getMinimum(); - int max = slider.getMaximum(); - int len = trackRect.height; - - int value; - - // If the length is 0, you shouldn't be able to even see where the slider - // is. This really shouldn't ever happen, but just in case, we'll return - // the middle. - if (len == 0) - return (max - min) / 2; - - if (! drawInverted()) - value = (len - (yPos - trackRect.y)) * (max - min) / len + min; - else - value = (yPos - trackRect.y) * (max - min) / len + min; - - // If this isn't a legal value, then we'll have to move to one now. - if (value > max) - value = max; - else if (value < min) - value = min; - return value; - } - - /** - * This method returns the value in the slider's range given the x - * coordinate. If the value is out of range, it will return the closest - * legal value. - * - * @param xPos The x coordinate to calculate a value for. - * - * @return The value for the x coordinate. - */ - public int valueForXPosition(int xPos) - { - int min = slider.getMinimum(); - int max = slider.getMaximum(); - int len = trackRect.width; - - int value; - - // If the length is 0, you shouldn't be able to even see where the slider - // is. This really shouldn't ever happen, but just in case, we'll return - // the middle. - if (len == 0) - return (max - min) / 2; - - if (! drawInverted()) - value = (xPos - trackRect.x) * (max - min) / len + min; - else - value = (len - (xPos - trackRect.x)) * (max - min) / len + min; - - // If this isn't a legal value, then we'll have to move to one now. - if (value > max) - value = max; - else if (value < min) - value = min; - return value; - } - - /** - * This method finds the closest value that has a tick associated with it. - * This is package-private to avoid an accessor method. - * - * @param value The value to search from. - * - * @return The closest value that has a tick associated with it. - */ - int findClosestTick(int value) - { - int min = slider.getMinimum(); - int max = slider.getMaximum(); - int majorSpace = slider.getMajorTickSpacing(); - int minorSpace = slider.getMinorTickSpacing(); - - // The default value to return is value + minor or - // value + major. - // Initializing at min - value leaves us with a default - // return value of min, which always has tick marks - // (if ticks are painted). - int minor = min - value; - int major = min - value; - - // If there are no major tick marks or minor tick marks - // e.g. snap is set to true but no ticks are set, then - // we can just return the value. - if (majorSpace <= 0 && minorSpace <= 0) - return value; - - // First check the major ticks. - if (majorSpace > 0) - { - int lowerBound = (value - min) / majorSpace; - int majLower = majorSpace * lowerBound + min; - int majHigher = majorSpace * (lowerBound + 1) + min; - - if (majHigher <= max && majHigher - value <= value - majLower) - major = majHigher - value; - else - major = majLower - value; - } - - if (minorSpace > 0) - { - int lowerBound = value / minorSpace; - int minLower = minorSpace * lowerBound; - int minHigher = minorSpace * (lowerBound + 1); - - if (minHigher <= max && minHigher - value <= value - minLower) - minor = minHigher - value; - else - minor = minLower - value; - } - - // Give preference to minor ticks - if (Math.abs(minor) > Math.abs(major)) - return value + major; - else - return value + minor; - } - - InputMap getInputMap(int condition) - { - if (condition == JComponent.WHEN_FOCUSED) - return (InputMap) UIManager.get("Slider.focusInputMap"); - return null; - } - - /** - * Returns the action map for the {@link JSlider}. All sliders share - * a single action map which is created the first time this method is - * called, then stored in the UIDefaults table for subsequent access. - * - * @return The shared action map. - */ - ActionMap getActionMap() - { - ActionMap map = (ActionMap) UIManager.get("Slider.actionMap"); - - if (map == null) // first time here - { - map = createActionMap(); - if (map != null) - UIManager.put("Slider.actionMap", map); - } - return map; - } - - /** - * Creates the action map shared by all {@link JSlider} instances. - * This method is called once by {@link #getActionMap()} when it - * finds no action map in the UIDefaults table...after the map is - * created, it gets added to the defaults table so that subsequent - * calls to {@link #getActionMap()} will return the same shared - * instance. - * - * @return The action map. - */ - ActionMap createActionMap() - { - ActionMap map = new ActionMapUIResource(); - map.put("positiveUnitIncrement", - new AbstractAction("positiveUnitIncrement") { - public void actionPerformed(ActionEvent event) - { - JSlider slider = (JSlider) event.getSource(); - BasicSliderUI ui = (BasicSliderUI) slider.getUI(); - if (slider.getInverted()) - ui.scrollByUnit(BasicSliderUI.NEGATIVE_SCROLL); - else - ui.scrollByUnit(BasicSliderUI.POSITIVE_SCROLL); - } - } - ); - map.put("negativeUnitIncrement", - new AbstractAction("negativeUnitIncrement") { - public void actionPerformed(ActionEvent event) - { - JSlider slider = (JSlider) event.getSource(); - BasicSliderUI ui = (BasicSliderUI) slider.getUI(); - if (slider.getInverted()) - ui.scrollByUnit(BasicSliderUI.POSITIVE_SCROLL); - else - ui.scrollByUnit(BasicSliderUI.NEGATIVE_SCROLL); - } - } - ); - map.put("positiveBlockIncrement", - new AbstractAction("positiveBlockIncrement") { - public void actionPerformed(ActionEvent event) - { - JSlider slider = (JSlider) event.getSource(); - BasicSliderUI ui = (BasicSliderUI) slider.getUI(); - if (slider.getInverted()) - ui.scrollByBlock(BasicSliderUI.NEGATIVE_SCROLL); - else - ui.scrollByBlock(BasicSliderUI.POSITIVE_SCROLL); - } - } - ); - map.put("negativeBlockIncrement", - new AbstractAction("negativeBlockIncrement") { - public void actionPerformed(ActionEvent event) - { - JSlider slider = (JSlider) event.getSource(); - BasicSliderUI ui = (BasicSliderUI) slider.getUI(); - if (slider.getInverted()) - ui.scrollByBlock(BasicSliderUI.POSITIVE_SCROLL); - else - ui.scrollByBlock(BasicSliderUI.NEGATIVE_SCROLL); - } - } - ); - map.put("minScroll", - new AbstractAction("minScroll") { - public void actionPerformed(ActionEvent event) - { - JSlider slider = (JSlider) event.getSource(); - if (slider.getInverted()) - slider.setValue(slider.getMaximum()); - else - slider.setValue(slider.getMinimum()); - } - } - ); - map.put("maxScroll", - new AbstractAction("maxScroll") { - public void actionPerformed(ActionEvent event) - { - JSlider slider = (JSlider) event.getSource(); - if (slider.getInverted()) - slider.setValue(slider.getMinimum()); - else - slider.setValue(slider.getMaximum()); - } - } - ); - return map; - } - - /** - * Small utility method to save me from typing the hell out of myself in - * paint(). - */ - private boolean hitClip(Graphics g, Rectangle r) - { - return g.hitClip(r.x, r.y, r.width, r.height); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java deleted file mode 100644 index 00c8537..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicSpinnerUI.java +++ /dev/null @@ -1,561 +0,0 @@ -/* BasicSpinnerUI.java -- - Copyright (C) 2003, 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JSpinner; -import javax.swing.LookAndFeel; -import javax.swing.Timer; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SpinnerUI; - -/** - * A UI delegate for the {@link JSpinner} component. - * - * @author Ka-Hing Cheung - * - * @since 1.4 - */ -public class BasicSpinnerUI extends SpinnerUI -{ - /** - * Creates a new <code>BasicSpinnerUI</code> for the specified - * <code>JComponent</code> - * - * @param c the component (ignored). - * - * @return A new instance of {@link BasicSpinnerUI}. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicSpinnerUI(); - } - - /** - * Creates an editor component. Really, it just returns - * <code>JSpinner.getEditor()</code> - * - * @return a JComponent as an editor - * - * @see javax.swing.JSpinner#getEditor - */ - protected JComponent createEditor() - { - return spinner.getEditor(); - } - - /** - * Creates a <code>LayoutManager</code> that layouts the sub components. The - * subcomponents are identifies by the constraint "Next", "Previous" and - * "Editor" - * - * @return a LayoutManager - * - * @see java.awt.LayoutManager - */ - protected LayoutManager createLayout() - { - return new DefaultLayoutManager(); - } - - /** - * Creates the "Next" button - * - * @return the next button component - */ - protected Component createNextButton() - { - JButton button = new BasicArrowButton(BasicArrowButton.NORTH); - return button; - } - - /** - * Creates the "Previous" button - * - * @return the previous button component - */ - protected Component createPreviousButton() - { - JButton button = new BasicArrowButton(BasicArrowButton.SOUTH); - return button; - } - - /** - * Creates the <code>PropertyChangeListener</code> that will be attached by - * <code>installListeners</code>. It should watch for the "editor" - * property, when it's changed, replace the old editor with the new one, - * probably by calling <code>replaceEditor</code> - * - * @return a PropertyChangeListener - * - * @see #replaceEditor - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeListener() - { - public void propertyChange(PropertyChangeEvent event) - { - // FIXME: Add check for enabled property change. Need to - // disable the buttons. - if ("editor".equals(event.getPropertyName())) - BasicSpinnerUI.this.replaceEditor((JComponent) event.getOldValue(), - (JComponent) event.getNewValue()); - // FIXME: Handle 'font' property change - } - }; - } - - /** - * Called by <code>installUI</code>. This should set various defaults - * obtained from <code>UIManager.getLookAndFeelDefaults</code>, as well as - * set the layout obtained from <code>createLayout</code> - * - * @see javax.swing.UIManager#getLookAndFeelDefaults - * @see #createLayout - * @see #installUI - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(spinner, "Spinner.background", - "Spinner.foreground", "Spinner.font"); - LookAndFeel.installBorder(spinner, "Spinner.border"); - JComponent e = spinner.getEditor(); - if (e instanceof JSpinner.DefaultEditor) - { - JSpinner.DefaultEditor de = (JSpinner.DefaultEditor) e; - de.getTextField().setBorder(null); - } - spinner.setLayout(createLayout()); - spinner.setOpaque(true); - } - - /* - * Called by <code>installUI</code>, which basically adds the - * <code>PropertyChangeListener</code> created by - * <code>createPropertyChangeListener</code> - * - * @see #createPropertyChangeListener - * @see #installUI - */ - protected void installListeners() - { - spinner.addPropertyChangeListener(listener); - } - - /* - * Install listeners to the next button so that it increments the model - */ - protected void installNextButtonListeners(Component c) - { - c.addMouseListener(new MouseAdapter() - { - public void mousePressed(MouseEvent evt) - { - if (! spinner.isEnabled()) - return; - increment(); - timer.setInitialDelay(500); - timer.start(); - } - - public void mouseReleased(MouseEvent evt) - { - timer.stop(); - } - - void increment() - { - Object next = BasicSpinnerUI.this.spinner.getNextValue(); - if (next != null) - BasicSpinnerUI.this.spinner.getModel().setValue(next); - } - - volatile boolean mouseDown; - Timer timer = new Timer(50, - new ActionListener() - { - public void actionPerformed(ActionEvent event) - { - increment(); - } - }); - }); - } - - /* - * Install listeners to the previous button so that it decrements the model - */ - protected void installPreviousButtonListeners(Component c) - { - c.addMouseListener(new MouseAdapter() - { - public void mousePressed(MouseEvent evt) - { - if (! spinner.isEnabled()) - return; - decrement(); - timer.setInitialDelay(500); - timer.start(); - } - - public void mouseReleased(MouseEvent evt) - { - timer.stop(); - } - - void decrement() - { - Object prev = BasicSpinnerUI.this.spinner.getPreviousValue(); - if (prev != null) - BasicSpinnerUI.this.spinner.getModel().setValue(prev); - } - - volatile boolean mouseDown; - Timer timer = new Timer(50, - new ActionListener() - { - public void actionPerformed(ActionEvent event) - { - decrement(); - } - }); - }); - } - - /** - * Install this UI to the <code>JComponent</code>, which in reality, is a - * <code>JSpinner</code>. Calls <code>installDefaults</code>, - * <code>installListeners</code>, and also adds the buttons and editor. - * - * @param c DOCUMENT ME! - * - * @see #installDefaults - * @see #installListeners - * @see #createNextButton - * @see #createPreviousButton - * @see #createEditor - */ - public void installUI(JComponent c) - { - super.installUI(c); - - spinner = (JSpinner) c; - - installDefaults(); - installListeners(); - - Component next = createNextButton(); - Component previous = createPreviousButton(); - - installNextButtonListeners(next); - installPreviousButtonListeners(previous); - - c.add(createEditor(), "Editor"); - c.add(next, "Next"); - c.add(previous, "Previous"); - } - - /** - * Replace the old editor with the new one - * - * @param oldEditor the old editor - * @param newEditor the new one to replace with - */ - protected void replaceEditor(JComponent oldEditor, JComponent newEditor) - { - spinner.remove(oldEditor); - spinner.add(newEditor); - } - - /** - * The reverse of <code>installDefaults</code>. Called by - * <code>uninstallUI</code> - */ - protected void uninstallDefaults() - { - spinner.setLayout(null); - } - - /** - * The reverse of <code>installListeners</code>, called by - * <code>uninstallUI</code> - */ - protected void uninstallListeners() - { - spinner.removePropertyChangeListener(listener); - } - - /** - * Called when the current L&F is replaced with another one, should call - * <code>uninstallDefaults</code> and <code>uninstallListeners</code> as - * well as remove the next/previous buttons and the editor - * - * @param c DOCUMENT ME! - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - - uninstallDefaults(); - uninstallListeners(); - c.removeAll(); - } - - /** The spinner for this UI */ - protected JSpinner spinner; - - /** DOCUMENT ME! */ - private PropertyChangeListener listener = createPropertyChangeListener(); - - /** - * A layout manager for the {@link JSpinner} component. The spinner has - * three subcomponents: an editor, a 'next' button and a 'previous' button. - */ - private class DefaultLayoutManager implements LayoutManager - { - /** - * Layout the spinners inner parts. - * - * @param parent The parent container - */ - public void layoutContainer(Container parent) - { - synchronized (parent.getTreeLock()) - { - Insets i = parent.getInsets(); - boolean l2r = parent.getComponentOrientation().isLeftToRight(); - /* - -------------- -------------- - | | n | | n | | - | e | - | or | - | e | - | | p | | p | | - -------------- -------------- - */ - Dimension e = prefSize(editor); - Dimension n = prefSize(next); - Dimension p = prefSize(previous); - Dimension s = parent.getSize(); - - int x = l2r ? i.left : i.right; - int y = i.top; - int w = Math.max(p.width, n.width); - int h = (s.height - i.bottom) / 2; - int e_width = s.width - w - i.left - i.right; - - if (l2r) - { - setBounds(editor, x, y, e_width, 2 * h); - x += e_width; - setBounds(next, x, y, w, h); - y += h; - setBounds(previous, x, y, w, h); - } - else - { - setBounds(next, x, y + (s.height - e.height) / 2, w, h); - y += h; - setBounds(previous, x, y + (s.height - e.height) / 2, w, h); - x += w; - y -= h; - setBounds(editor, x, y, e_width, e.height); - } - } - } - - /** - * Calculates the minimum layout size. - * - * @param parent the parent. - * - * @return The minimum layout size. - */ - public Dimension minimumLayoutSize(Container parent) - { - Dimension d = new Dimension(); - - if (editor != null) - { - Dimension tmp = editor.getMinimumSize(); - d.width += tmp.width; - d.height = tmp.height; - } - - int nextWidth = 0; - int previousWidth = 0; - - if (next != null) - { - Dimension tmp = next.getMinimumSize(); - nextWidth = tmp.width; - } - if (previous != null) - { - Dimension tmp = previous.getMinimumSize(); - previousWidth = tmp.width; - } - - d.width += Math.max(nextWidth, previousWidth); - - return d; - } - - /** - * Returns the preferred layout size of the container. - * - * @param parent DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public Dimension preferredLayoutSize(Container parent) - { - Dimension d = new Dimension(); - - if (editor != null) - { - Dimension tmp = editor.getPreferredSize(); - d.width += Math.max(tmp.width, 40); - d.height = tmp.height; - } - - int nextWidth = 0; - int previousWidth = 0; - - if (next != null) - { - Dimension tmp = next.getPreferredSize(); - nextWidth = tmp.width; - } - if (previous != null) - { - Dimension tmp = previous.getPreferredSize(); - previousWidth = tmp.width; - } - - d.width += Math.max(nextWidth, previousWidth); - Insets insets = parent.getInsets(); - d.width = d.width + insets.left + insets.right; - d.height = d.height + insets.top + insets.bottom; - return d; - } - - /** - * DOCUMENT ME! - * - * @param child DOCUMENT ME! - */ - public void removeLayoutComponent(Component child) - { - if (child == editor) - editor = null; - else if (child == next) - next = null; - else if (previous == child) - previous = null; - } - - /** - * DOCUMENT ME! - * - * @param name DOCUMENT ME! - * @param child DOCUMENT ME! - */ - public void addLayoutComponent(String name, Component child) - { - if ("Editor".equals(name)) - editor = child; - else if ("Next".equals(name)) - next = child; - else if ("Previous".equals(name)) - previous = child; - } - - /** - * DOCUMENT ME! - * - * @param c DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - private Dimension prefSize(Component c) - { - if (c == null) - return new Dimension(); - else - return c.getPreferredSize(); - } - - /** - * Sets the bounds for the specified component. - * - * @param c the component. - * @param x the x-coordinate for the top-left of the component bounds. - * @param y the y-coordinate for the top-left of the component bounds. - * @param w the width of the bounds. - * @param h the height of the bounds. - */ - private void setBounds(Component c, int x, int y, int w, int h) - { - if (c != null) - c.setBounds(x, y, w, h); - } - - /** The editor component. */ - private Component editor; - - /** The next button. */ - private Component next; - - /** The previous button. */ - private Component previous; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneDivider.java b/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneDivider.java deleted file mode 100644 index 53f7db6..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneDivider.java +++ /dev/null @@ -1,1077 +0,0 @@ -/* BasicSplitPaneDivider.java -- - Copyright (C) 2003, 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JButton; -import javax.swing.JSplitPane; -import javax.swing.UIManager; -import javax.swing.border.Border; - -/** - * The divider that separates the two parts of a JSplitPane in the Basic look - * and feel. - * - * <p> - * Implementation status: We do not have a real implementation yet. Currently, - * it is mostly a stub to allow compiling other parts of the - * javax.swing.plaf.basic package, although some parts are already - * functional. - * </p> - * - * @author Sascha Brawer (brawer_AT_dandelis.ch) - */ -public class BasicSplitPaneDivider extends Container - implements PropertyChangeListener -{ - /** - * The buttons used as one touch buttons. - */ - private class BasicOneTouchButton - extends JButton - { - /** - * Denotes a left button. - */ - static final int LEFT = 0; - - /** - * Denotes a right button. - */ - static final int RIGHT = 1; - - /** - * The x points for the arrow. - */ - private int[] xpoints; - - /** - * The y points for the arrow. - */ - private int[] ypoints; - - /** - * Either LEFT or RIGHT. - */ - private int direction; - - /** - * Creates a new instance. - * - * @param dir either LEFT or RIGHT - */ - BasicOneTouchButton(int dir) - { - direction = dir; - xpoints = new int[3]; - ypoints = new int[3]; - } - - /** - * Never allow borders. - */ - public void setBorder(Border b) - { - } - - /** - * Never allow focus traversal. - */ - public boolean isFocusTraversable() - { - return false; - } - - /** - * Paints the one touch button. - */ - public void paint(Graphics g) - { - if (splitPane != null) - { - // Fill background. - g.setColor(splitPane.getBackground()); - g.fillRect(0, 0, getWidth(), getHeight()); - - // Draw arrow. - int size; - if (direction == LEFT) - { - if (orientation == JSplitPane.VERTICAL_SPLIT) - { - size = Math.min(getHeight(), ONE_TOUCH_SIZE); - xpoints[0] = 0; - xpoints[1] = size / 2; - xpoints[2] = size; - ypoints[0] = size; - ypoints[1] = 0; - ypoints[2] = size; - } - else - { - size = Math.min(getWidth(), ONE_TOUCH_SIZE); - xpoints[0] = size; - xpoints[1] = 0; - xpoints[2] = size; - ypoints[0] = 0; - ypoints[1] = size / 2; - ypoints[2] = size; - } - } - else - { - if (orientation == JSplitPane.VERTICAL_SPLIT) - { - size = Math.min(getHeight(), ONE_TOUCH_SIZE); - xpoints[0] = 0; - xpoints[1] = size / 2; - xpoints[2] = size; - ypoints[0] = 0; - ypoints[1] = size; - ypoints[2] = 0; - } - else - { - size = Math.min(getWidth(), ONE_TOUCH_SIZE); - xpoints[0] = 0; - xpoints[1] = size; - xpoints[2] = 0; - ypoints[0] = 0; - ypoints[1] = size / 2; - ypoints[2] = size; - } - } - g.setColor(Color.BLACK); - g.fillPolygon(xpoints, ypoints, 3); - } - } - } - - /** - * Listens for actions on the one touch buttons. - */ - private class OneTouchAction - implements ActionListener - { - - public void actionPerformed(ActionEvent ev) - { - Insets insets = splitPane.getInsets(); - int lastLoc = splitPane.getLastDividerLocation(); - int currentLoc = splitPaneUI.getDividerLocation(splitPane); - int newLoc; - - if (ev.getSource() == leftButton) - { - if (orientation == JSplitPane.VERTICAL_SPLIT) - { - if (currentLoc - >= splitPane.getHeight() - insets.bottom - getHeight()) - { - newLoc = Math.min(splitPane.getMaximumDividerLocation(), - lastLoc); - } - else - { - newLoc = insets.top; - } - } - else - { - if (currentLoc - >= splitPane.getWidth() - insets.right - getWidth()) - { - newLoc = Math.min(splitPane.getMaximumDividerLocation(), - lastLoc); - } - else - { - newLoc = insets.left; - } - } - } - else - { - if (orientation == JSplitPane.VERTICAL_SPLIT) - { - if (currentLoc == insets.top) - { - newLoc = Math.min(splitPane.getMaximumDividerLocation(), - lastLoc); - } - else - { - newLoc = splitPane.getHeight() - insets.top - getHeight(); - } - } - else - { - if (currentLoc == insets.left) - { - newLoc = Math.min(splitPane.getMaximumDividerLocation(), - lastLoc); - } - else - { - newLoc = splitPane.getWidth() - insets.left - getWidth(); - } - } - } - if (currentLoc != newLoc) - { - splitPane.setDividerLocation(newLoc); - splitPane.setLastDividerLocation(currentLoc); - } - } - } - - /** - * Determined using the <code>serialver</code> tool of Apple/Sun JDK 1.3.1 - * on MacOS X 10.1.5. - */ - static final long serialVersionUID = 1463404307042803342L; - - /** - * The width and height of the little buttons for showing and hiding parts - * of a JSplitPane in a single mouse click. - */ - protected static final int ONE_TOUCH_SIZE = 6; - - /** The distance the one touch buttons will sit from the divider's edges. */ - protected static final int ONE_TOUCH_OFFSET = 2; - - /** - * An object that performs the tasks associated with an ongoing drag - * operation, or <code>null</code> if the user is currently not dragging - * the divider. - */ - protected DragController dragger; - - /** - * The delegate object that is responsible for the UI of the - * <code>JSplitPane</code> that contains this divider. - */ - protected BasicSplitPaneUI splitPaneUI; - - /** The thickness of the divider in pixels. */ - protected int dividerSize; - - /** A divider that is used for layout purposes. */ - protected Component hiddenDivider; - - /** The JSplitPane containing this divider. */ - protected JSplitPane splitPane; - - /** - * The listener for handling mouse events from both the divider and the - * containing <code>JSplitPane</code>. - * - * <p> - * The reason for also handling MouseEvents from the containing - * <code>JSplitPane</code> is that users should be able to start a drag - * gesture from inside the JSplitPane, but slightly outisde the divider. - * </p> - */ - protected MouseHandler mouseHandler = new MouseHandler(); - - /** - * The current orientation of the containing <code>JSplitPane</code>, which - * is either {@link javax.swing.JSplitPane#HORIZONTAL_SPLIT} or {@link - * javax.swing.JSplitPane#VERTICAL_SPLIT}. - */ - protected int orientation; - - /** - * The button for showing and hiding the left (or top) component of the - * <code>JSplitPane</code>. - */ - protected JButton leftButton; - - /** - * The button for showing and hiding the right (or bottom) component of the - * <code>JSplitPane</code>. - */ - protected JButton rightButton; - - /** - * The border of this divider. Typically, this will be an instance of {@link - * javax.swing.plaf.basic.BasicBorders.SplitPaneDividerBorder}. - * - * @see #getBorder() - * @see #setBorder(javax.swing.border.Border) - */ - private Border border; - - // This is not a pixel count. - // This int should be able to take 3 values. - // left (top), middle, right(bottom) - // 0 1 2 - - /** - * Keeps track of where the divider should be placed when using one touch - * expand buttons. - * This is package-private to avoid an accessor method. - */ - transient int currentDividerLocation = 1; - - /** - * Indicates if the ont touch buttons are laid out centered or at the - * top/left. - * - * Package private to avoid accessor method. - */ - boolean centerOneTouchButtons; - - /** - * Constructs a new divider. - * - * @param ui the UI delegate of the enclosing <code>JSplitPane</code>. - */ - public BasicSplitPaneDivider(BasicSplitPaneUI ui) - { - setLayout(new DividerLayout()); - setBasicSplitPaneUI(ui); - setDividerSize(splitPane.getDividerSize()); - centerOneTouchButtons = - UIManager.getBoolean("SplitPane.centerOneTouchButtons"); - } - - /** - * Sets the delegate object that is responsible for the UI of the {@link - * javax.swing.JSplitPane} containing this divider. - * - * @param newUI the UI delegate, or <code>null</code> to release the - * connection to the current delegate. - */ - public void setBasicSplitPaneUI(BasicSplitPaneUI newUI) - { - /* Remove the connection to the existing JSplitPane. */ - if (splitPane != null) - { - splitPane.removePropertyChangeListener(this); - removeMouseListener(mouseHandler); - removeMouseMotionListener(mouseHandler); - splitPane = null; - hiddenDivider = null; - } - - /* Establish the connection to the new JSplitPane. */ - splitPaneUI = newUI; - if (splitPaneUI != null) - splitPane = newUI.getSplitPane(); - if (splitPane != null) - { - splitPane.addPropertyChangeListener(this); - addMouseListener(mouseHandler); - addMouseMotionListener(mouseHandler); - hiddenDivider = splitPaneUI.getNonContinuousLayoutDivider(); - orientation = splitPane.getOrientation(); - if (splitPane.isOneTouchExpandable()) - oneTouchExpandableChanged(); - } - } - - /** - * Returns the delegate object that is responsible for the UI of the {@link - * javax.swing.JSplitPane} containing this divider. - * - * @return The UI for the JSplitPane. - */ - public BasicSplitPaneUI getBasicSplitPaneUI() - { - return splitPaneUI; - } - - /** - * Sets the thickness of the divider. - * - * @param newSize the new width or height in pixels. - */ - public void setDividerSize(int newSize) - { - this.dividerSize = newSize; - } - - /** - * Retrieves the thickness of the divider. - * - * @return The thickness of the divider. - */ - public int getDividerSize() - { - return dividerSize; - } - - /** - * Sets the border of this divider. - * - * @param border the new border. Typically, this will be an instance of - * {@link - * javax.swing.plaf.basic.BasicBorders.SplitPaneBorder}. - * - * @since 1.3 - */ - public void setBorder(Border border) - { - if (border != this.border) - { - Border oldValue = this.border; - this.border = border; - firePropertyChange("border", oldValue, border); - } - } - - /** - * Retrieves the border of this divider. - * - * @return the current border, or <code>null</code> if no border has been - * set. - * - * @since 1.3 - */ - public Border getBorder() - { - return border; - } - - /** - * Retrieves the insets of the divider. If a border has been installed on - * the divider, the result of calling its <code>getBorderInsets</code> - * method is returned. Otherwise, the inherited implementation will be - * invoked. - * - * @see javax.swing.border.Border#getBorderInsets(java.awt.Component) - */ - public Insets getInsets() - { - if (border != null) - return border.getBorderInsets(this); - else - return super.getInsets(); - } - - /** - * Returns the preferred size of this divider, which is - * <code>dividerSize</code> by <code>dividerSize</code> pixels. - * - * @return The preferred size of the divider. - */ - public Dimension getPreferredSize() - { - Dimension d; - if (orientation == JSplitPane.HORIZONTAL_SPLIT) - d = new Dimension(getDividerSize(), 1); - else - d = new Dimension(1, getDividerSize()); - return d; - } - - /** - * Returns the minimal size of this divider, which is - * <code>dividerSize</code> by <code>dividerSize</code> pixels. - * - * @return The minimal size of the divider. - */ - public Dimension getMinimumSize() - { - return getPreferredSize(); - } - - /** - * Processes events from the <code>JSplitPane</code> that contains this - * divider. - * - * @param e The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(JSplitPane.ONE_TOUCH_EXPANDABLE_PROPERTY)) - oneTouchExpandableChanged(); - else if (e.getPropertyName().equals(JSplitPane.ORIENTATION_PROPERTY)) - { - orientation = splitPane.getOrientation(); - invalidate(); - if (splitPane != null) - splitPane.revalidate(); - } - else if (e.getPropertyName().equals(JSplitPane.DIVIDER_SIZE_PROPERTY)) - dividerSize = splitPane.getDividerSize(); - } - - /** - * Paints the divider by painting its border. - * - * @param g The Graphics Object to paint with. - */ - public void paint(Graphics g) - { - Dimension dividerSize; - - super.paint(g); - if (border != null) - { - dividerSize = getSize(); - border.paintBorder(this, g, 0, 0, dividerSize.width, dividerSize.height); - } - } - - /** - * Reacts to changes of the <code>oneToughExpandable</code> property of the - * containing <code>JSplitPane</code>. - */ - protected void oneTouchExpandableChanged() - { - if (splitPane.isOneTouchExpandable()) - { - leftButton = createLeftOneTouchButton(); - if (leftButton != null) - leftButton.addActionListener(new OneTouchAction()); - - rightButton = createRightOneTouchButton(); - if (rightButton != null) - rightButton.addActionListener(new OneTouchAction()); - - // Only add them when both are non-null. - if (leftButton != null && rightButton != null) - { - add(leftButton); - add(rightButton); - } - } - invalidate(); - if (splitPane != null) - splitPane.revalidate(); - } - - /** - * Creates a button for showing and hiding the left (or top) part of a - * <code>JSplitPane</code>. - * - * @return The left one touch button. - */ - protected JButton createLeftOneTouchButton() - { - JButton button = new BasicOneTouchButton(BasicOneTouchButton.LEFT); - button.setMinimumSize(new Dimension(ONE_TOUCH_SIZE, ONE_TOUCH_SIZE)); - button.setRequestFocusEnabled(false); - return button; - } - - /** - * Creates a button for showing and hiding the right (or bottom) part of a - * <code>JSplitPane</code>. - * - * @return The right one touch button. - */ - protected JButton createRightOneTouchButton() - { - JButton button = new BasicOneTouchButton(BasicOneTouchButton.RIGHT); - button.setMinimumSize(new Dimension(ONE_TOUCH_SIZE, ONE_TOUCH_SIZE)); - button.setRequestFocusEnabled(false); - return button; - } - - /** - * Prepares the divider for dragging by calling the - * <code>startDragging</code> method of the UI delegate of the enclosing - * <code>JSplitPane</code>. - * - * @see BasicSplitPaneUI#startDragging() - */ - protected void prepareForDragging() - { - if (splitPaneUI != null) - splitPaneUI.startDragging(); - } - - /** - * Drags the divider to a given location by calling the - * <code>dragDividerTo</code> method of the UI delegate of the enclosing - * <code>JSplitPane</code>. - * - * @param location the new location of the divider. - * - * @see BasicSplitPaneUI#dragDividerTo(int location) - */ - protected void dragDividerTo(int location) - { - if (splitPaneUI != null) - splitPaneUI.dragDividerTo(location); - } - - /** - * Finishes a dragging gesture by calling the <code>finishDraggingTo</code> - * method of the UI delegate of the enclosing <code>JSplitPane</code>. - * - * @param location the new, final location of the divider. - * - * @see BasicSplitPaneUI#finishDraggingTo(int location) - */ - protected void finishDraggingTo(int location) - { - if (splitPaneUI != null) - splitPaneUI.finishDraggingTo(location); - } - - /** - * This helper method moves the divider to one of the three locations when - * using one touch expand buttons. Location 0 is the left (or top) most - * location. Location 1 is the middle. Location 2 is the right (or bottom) - * most location. - * This is package-private to avoid an accessor method. - * - * @param locationIndex The location to move to. - */ - void moveDividerTo(int locationIndex) - { - Insets insets = splitPane.getInsets(); - switch (locationIndex) - { - case 1: - splitPane.setDividerLocation(splitPane.getLastDividerLocation()); - break; - case 0: - int top = (orientation == JSplitPane.HORIZONTAL_SPLIT) ? insets.left - : insets.top; - splitPane.setDividerLocation(top); - break; - case 2: - int bottom; - if (orientation == JSplitPane.HORIZONTAL_SPLIT) - bottom = splitPane.getBounds().width - insets.right - dividerSize; - else - bottom = splitPane.getBounds().height - insets.bottom - dividerSize; - splitPane.setDividerLocation(bottom); - break; - } - } - - /** - * The listener for handling mouse events from both the divider and the - * containing <code>JSplitPane</code>. - * - * <p> - * The reason for also handling MouseEvents from the containing - * <code>JSplitPane</code> is that users should be able to start a drag - * gesture from inside the JSplitPane, but slightly outisde the divider. - * </p> - * - * @author Sascha Brawer (brawer_AT_dandelis.ch) - */ - protected class MouseHandler extends MouseAdapter - implements MouseMotionListener - { - /** Keeps track of whether a drag is occurring. */ - private transient boolean isDragging; - - /** - * This method is called when the mouse is pressed. - * - * @param e The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - isDragging = true; - currentDividerLocation = 1; - if (orientation == JSplitPane.HORIZONTAL_SPLIT) - dragger = new DragController(e); - else - dragger = new VerticalDragController(e); - prepareForDragging(); - } - - /** - * This method is called when the mouse is released. - * - * @param e The MouseEvent. - */ - public void mouseReleased(MouseEvent e) - { - if (isDragging) - dragger.completeDrag(e); - isDragging = false; - } - - /** - * Repeatedly invoked when the user is dragging the mouse cursor while - * having pressed a mouse button. - * - * @param e The MouseEvent. - */ - public void mouseDragged(MouseEvent e) - { - if (dragger != null) - dragger.continueDrag(e); - } - - /** - * Repeatedly invoked when the user is dragging the mouse cursor without - * having pressed a mouse button. - * - * @param e The MouseEvent. - */ - public void mouseMoved(MouseEvent e) - { - // Do nothing. - } - } - - /** - * Performs the tasks associated with an ongoing drag operation. - * - * @author Sascha Brawer (brawer_AT_dandelis.ch) - */ - protected class DragController - { - /** - * The difference between where the mouse is clicked and the initial - * divider location. - */ - transient int offset; - - /** - * Creates a new DragController object. - * - * @param e The MouseEvent to initialize with. - */ - protected DragController(MouseEvent e) - { - offset = e.getX(); - } - - /** - * This method returns true if the divider can move. - * - * @return True if dragging is allowed. - */ - protected boolean isValid() - { - // Views can always be resized? - return true; - } - - /** - * Returns a position for the divider given the MouseEvent. - * - * @param e MouseEvent. - * - * @return The position for the divider to move to. - */ - protected int positionForMouseEvent(MouseEvent e) - { - return e.getX() + getX() - offset; - } - - /** - * This method returns one of the two paramters for the orientation. In - * this case, it returns x. - * - * @param x The x coordinate. - * @param y The y coordinate. - * - * @return The x coordinate. - */ - protected int getNeededLocation(int x, int y) - { - return x; - } - - /** - * This method is called to pass on the drag information to the UI through - * dragDividerTo. - * - * @param newX The x coordinate of the MouseEvent. - * @param newY The y coordinate of the MouseEvent. - */ - protected void continueDrag(int newX, int newY) - { - if (isValid()) - dragDividerTo(adjust(newX, newY)); - } - - /** - * This method is called to pass on the drag information to the UI - * through dragDividerTo. - * - * @param e The MouseEvent. - */ - protected void continueDrag(MouseEvent e) - { - if (isValid()) - dragDividerTo(positionForMouseEvent(e)); - } - - /** - * This method is called to finish the drag session by calling - * finishDraggingTo. - * - * @param x The x coordinate of the MouseEvent. - * @param y The y coordinate of the MouseEvent. - */ - protected void completeDrag(int x, int y) - { - finishDraggingTo(adjust(x, y)); - } - - /** - * This method is called to finish the drag session by calling - * finishDraggingTo. - * - * @param e The MouseEvent. - */ - protected void completeDrag(MouseEvent e) - { - finishDraggingTo(positionForMouseEvent(e)); - } - - /** - * This is a helper method that includes the offset in the needed - * location. - * - * @param x The x coordinate of the MouseEvent. - * @param y The y coordinate of the MouseEvent. - * - * @return The needed location adjusted by the offsets. - */ - int adjust(int x, int y) - { - return getNeededLocation(x, y) + getX() - offset; - } - } - - /** - * This is a helper class that controls dragging when the orientation is - * VERTICAL_SPLIT. - */ - protected class VerticalDragController extends DragController - { - /** - * Creates a new VerticalDragController object. - * - * @param e The MouseEvent to initialize with. - */ - protected VerticalDragController(MouseEvent e) - { - super(e); - offset = e.getY(); - } - - /** - * This method returns one of the two parameters given the orientation. In - * this case, it returns y. - * - * @param x The x coordinate of the MouseEvent. - * @param y The y coordinate of the MouseEvent. - * - * @return The y coordinate. - */ - protected int getNeededLocation(int x, int y) - { - return y; - } - - /** - * This method returns the new location of the divider given a MouseEvent. - * - * @param e The MouseEvent. - * - * @return The new location of the divider. - */ - protected int positionForMouseEvent(MouseEvent e) - { - return e.getY() + getY() - offset; - } - - /** - * This is a helper method that includes the offset in the needed - * location. - * - * @param x The x coordinate of the MouseEvent. - * @param y The y coordinate of the MouseEvent. - * - * @return The needed location adjusted by the offsets. - */ - int adjust(int x, int y) - { - return getNeededLocation(x, y) + getY() - offset; - } - } - - /** - * This helper class acts as the Layout Manager for the divider. - */ - protected class DividerLayout implements LayoutManager - { - /** - * Creates a new DividerLayout object. - */ - protected DividerLayout() - { - // Nothing to do here. - } - - /** - * This method is called when a Component is added. - * - * @param string The constraints string. - * @param c The Component to add. - */ - public void addLayoutComponent(String string, Component c) - { - // Do nothing. - } - - /** - * This method is called to lay out the container. - * - * @param c The container to lay out. - */ - public void layoutContainer(Container c) - { - if (leftButton != null && rightButton != null - && c == BasicSplitPaneDivider.this) - { - if (splitPane.isOneTouchExpandable()) - { - Insets insets = getInsets(); - if (orientation == JSplitPane.HORIZONTAL_SPLIT) - { - int size = getWidth() - insets.left - insets.right; - size = Math.max(size, 0); - size = Math.min(size, ONE_TOUCH_SIZE); - int x, y; - if (centerOneTouchButtons) - { - y = insets.top; - x = (getWidth() - size) / 2; - } - else - { - x = insets.left; - y = 0; - } - - leftButton.setBounds(x, y + ONE_TOUCH_OFFSET, size, - size * 2); - rightButton.setBounds(x, y + ONE_TOUCH_OFFSET - + ONE_TOUCH_SIZE * 2, size, size * 2); - } - else - { - int size = getHeight() - insets.top - insets.bottom; - size = Math.max(size, 0); - size = Math.min(size, ONE_TOUCH_SIZE); - int x, y; - if (centerOneTouchButtons) - { - x = insets.left; - y = (getHeight() - size) / 2; - } - else - { - x = 0; - y = insets.top; - } - leftButton.setBounds(x + ONE_TOUCH_OFFSET, y, size * 2, - size); - rightButton.setBounds(x + ONE_TOUCH_OFFSET - + ONE_TOUCH_SIZE * 2, y, size * 2, - size); - } - } - else - { - // The JDK sets this bounds for disabled one touch buttons, so - // do we. - leftButton.setBounds(-5, -5, 1, 1); - rightButton.setBounds(-5, -5, 1, 1); - } - } - } - - /** - * This method returns the minimum layout size. - * - * @param c The container to calculate for. - * - * @return The minimum layout size. - */ - public Dimension minimumLayoutSize(Container c) - { - return preferredLayoutSize(c); - } - - /** - * This method returns the preferred layout size. - * - * @param c The container to calculate for. - * - * @return The preferred layout size. - */ - public Dimension preferredLayoutSize(Container c) - { - return new Dimension(dividerSize, dividerSize); - } - - /** - * This method is called when a component is removed. - * - * @param c The component to remove. - */ - public void removeLayoutComponent(Component c) - { - // Do nothing. - } - - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java deleted file mode 100644 index ca96075..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java +++ /dev/null @@ -1,1623 +0,0 @@ -/* BasicSplitPaneUI.java -- - Copyright (C) 2003, 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Canvas; -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager2; -import java.awt.Point; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JSlider; -import javax.swing.JSplitPane; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SplitPaneUI; -import javax.swing.plaf.UIResource; - -/** - * This is the Basic Look and Feel implementation of the SplitPaneUI class. - */ -public class BasicSplitPaneUI extends SplitPaneUI -{ - /** - * This Layout Manager controls the position and size of the components when - * the JSplitPane's orientation is HORIZONTAL_SPLIT. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class BasicHorizontalLayoutManager implements LayoutManager2 - { - // 3 components at a time. - // LEFT/TOP = 0 - // RIGHT/BOTTOM = 1 - // DIVIDER = 2 - - /** - * This array contains the components in the JSplitPane. The left/top - * component is at index 0, the right/bottom is at 1, and the divider is - * at 2. - */ - protected Component[] components = new Component[3]; - - // These are the _current_ widths of the associated component. - - /** - * This array contains the current width (for HORIZONTAL_SPLIT) or height - * (for VERTICAL_SPLIT) of the components. The indices are the same as - * for components. - */ - protected int[] sizes = new int[3]; - - /** - * This is used to determine if we are vertical or horizontal layout. - * In the JDK, the BasicVerticalLayoutManager seems to have no more - * methods implemented (as of JDK5), so we keep this state here. - */ - private int axis; - - /** - * Creates a new instance. This is package private because the reference - * implementation has no public constructor either. Still, we need to - * call it from BasicVerticalLayoutManager. - */ - BasicHorizontalLayoutManager() - { - this(SwingConstants.HORIZONTAL); - } - - /** - * Creates a new instance for a specified axis. This is provided for - * compatibility, since the BasicVerticalLayoutManager seems to have - * no more implementation in the RI, according to the specs. So - * we handle all the axis specific stuff here. - * - * @param a the axis, either SwingConstants#HORIZONTAL, - * or SwingConstants#VERTICAL - */ - BasicHorizontalLayoutManager(int a) - { - axis = a; - } - - /** - * This method adds the component given to the JSplitPane. The position of - * the component is given by the constraints object. - * - * @param comp The Component to add. - * @param constraints The constraints that bind the object. - */ - public void addLayoutComponent(Component comp, Object constraints) - { - addLayoutComponent((String) constraints, comp); - } - - /** - * This method is called to add a Component to the JSplitPane. The - * placement string determines where the Component will be placed. The - * string should be one of LEFT, RIGHT, TOP, BOTTOM or null (signals that - * the component is the divider). - * - * @param place The placement of the Component. - * @param component The Component to add. - * - * @throws IllegalArgumentException DOCUMENT ME! - */ - public void addLayoutComponent(String place, Component component) - { - int i = 0; - if (place == null) - i = 2; - else if (place.equals(JSplitPane.TOP) || place.equals(JSplitPane.LEFT)) - i = 0; - else if (place.equals(JSplitPane.BOTTOM) - || place.equals(JSplitPane.RIGHT)) - i = 1; - else - throw new IllegalArgumentException("Illegal placement in JSplitPane"); - components[i] = component; - resetSizeAt(i); - splitPane.revalidate(); - splitPane.repaint(); - } - - /** - * This method returns the width of the JSplitPane minus the insets. - * - * @param containerSize The Dimensions of the JSplitPane. - * @param insets The Insets of the JSplitPane. - * - * @return The width of the JSplitPane minus the insets. - */ - protected int getAvailableSize(Dimension containerSize, Insets insets) - { - int size; - if (axis == SwingConstants.HORIZONTAL) - size = containerSize.width - insets.left - insets.right; - else - size = containerSize.height - insets.top - insets.bottom; - return size; - } - - /** - * This method returns the given insets left value. If the given inset is - * null, then 0 is returned. - * - * @param insets The Insets to use with the JSplitPane. - * - * @return The inset's left value. - */ - protected int getInitialLocation(Insets insets) - { - int loc = 0; - if (insets != null) - { - if (axis == SwingConstants.HORIZONTAL) - loc = insets.left; - else - loc = insets.top; - } - return loc; - } - - /** - * This specifies how a component is aligned with respect to other - * components in the x fdirection. - * - * @param target The container. - * - * @return The component's alignment. - */ - public float getLayoutAlignmentX(Container target) - { - return 0.0f; - } - - /** - * This specifies how a component is aligned with respect to other - * components in the y direction. - * - * @param target The container. - * - * @return The component's alignment. - */ - public float getLayoutAlignmentY(Container target) - { - return 0.0f; - } - - /** - * This method returns the preferred width of the component. - * - * @param c The component to measure. - * - * @return The preferred width of the component. - */ - protected int getPreferredSizeOfComponent(Component c) - { - int size = 0; - Dimension dims = c.getPreferredSize(); - if (axis == SwingConstants.HORIZONTAL) - { - if (dims != null) - size = dims.width; - } - else - { - if (dims != null) - size = dims.height; - } - return size; - } - - /** - * This method returns the current width of the component. - * - * @param c The component to measure. - * - * @return The width of the component. - */ - protected int getSizeOfComponent(Component c) - { - int size; - if (axis == SwingConstants.HORIZONTAL) - size = c.getHeight(); - else - size = c.getWidth(); - return size; - } - - /** - * This method returns the sizes array. - * - * @return The sizes array. - */ - protected int[] getSizes() - { - return sizes; - } - - /** - * This method invalidates the layout. It does nothing. - * - * @param c The container to invalidate. - */ - public void invalidateLayout(Container c) - { - // DO NOTHING - } - - /** - * This method lays out the components in the container. - * - * @param container The container to lay out. - */ - public void layoutContainer(Container container) - { - if (container instanceof JSplitPane) - { - JSplitPane split = (JSplitPane) container; - distributeExtraSpace(); - Insets insets = split.getInsets(); - Dimension dims = split.getSize(); - int loc = getInitialLocation(insets); - int available = getAvailableSize(dims, insets); - sizes[0] = split.getDividerLocation(); - sizes[1] = available - sizes[0] - sizes[2]; - - // According to a Mauve test we only honour the minimum - // size of the components, when the dividerLocation hasn't - // been excplicitly set. - if (! dividerLocationSet) - { - sizes[0] = Math.max(sizes[0], minimumSizeOfComponent(0)); - sizes[1] = Math.max(sizes[1], minimumSizeOfComponent(1)); - } - // The size of the divider won't change. - - // Layout component#1. - setComponentToSize(components[0], sizes[0], loc, insets, dims); - // Layout divider. - loc += sizes[0]; - setComponentToSize(components[2], sizes[2], loc, insets, dims); - // Layout component#2. - loc += sizes[2]; - setComponentToSize(components[1], sizes[1], loc, insets, dims); - } - } - - /** - * This method returns the maximum size for the container given the - * components. It returns a new Dimension object that has width and - * height equal to Integer.MAX_VALUE. - * - * @param target The container to measure. - * - * @return The maximum size. - */ - public Dimension maximumLayoutSize(Container target) - { - return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - - /** - * This method returns the container's minimum size. The minimum width is - * the sum of all the component's minimum widths. The minimum height is - * the maximum of all the components' minimum heights. - * - * @param target The container to measure. - * - * @return The minimum size. - */ - public Dimension minimumLayoutSize(Container target) - { - Dimension dim = new Dimension(); - if (target instanceof JSplitPane) - { - int primary = 0; - int secondary = 0; - for (int i = 0; i < components.length; i++) - { - if (components[i] != null) - { - Dimension dims = components[i].getMinimumSize(); - primary += axis == SwingConstants.HORIZONTAL ? dims.width - : dims.height; - int sec = axis == SwingConstants.HORIZONTAL ? dims.height - : dims.width; - secondary = Math.max(sec, secondary); - } - } - int width = axis == SwingConstants.HORIZONTAL ? primary : secondary; - int height = axis == SwingConstants.VERTICAL ? secondary : primary; - - Insets i = splitPane.getInsets(); - dim.setSize(width + i.left + i.right, height + i.top + i.bottom); - } - return dim; - } - - /** - * This method returns the container's preferred size. The preferred width - * is the sum of all the component's preferred widths. The preferred - * height is the maximum of all the components' preferred heights. - * - * @param target The container to measure. - * - * @return The preferred size. - */ - public Dimension preferredLayoutSize(Container target) - { - Dimension dim = new Dimension(); - if (target instanceof JSplitPane) - { - int primary = 0; - int secondary = 0; - for (int i = 0; i < components.length; i++) - { - if (components[i] != null) - { - Dimension dims = components[i].getPreferredSize(); - primary += axis == SwingConstants.HORIZONTAL ? dims.width - : dims.height; - int sec = axis == SwingConstants.HORIZONTAL ? dims.height - : dims.width; - secondary = Math.max(sec, secondary); - } - } - int width = axis == SwingConstants.HORIZONTAL ? primary : secondary; - int height = axis == SwingConstants.VERTICAL ? secondary : primary; - - Insets i = splitPane.getInsets(); - dim.setSize(width + i.left + i.right, height + i.top + i.bottom); - } - return dim; - } - - /** - * This method removes the component from the layout. - * - * @param component The component to remove from the layout. - */ - public void removeLayoutComponent(Component component) - { - for (int i = 0; i < components.length; i++) - { - if (component == components[i]) - { - components[i] = null; - sizes[i] = 0; - } - } - } - - /** - * This method resets the size of Component to the preferred size. - * - * @param index The index of the component to reset. - */ - protected void resetSizeAt(int index) - { - if (components[index] != null) - sizes[index] = getPreferredSizeOfComponent(components[index]); - } - - /** - * This method resets the sizes of all the components. - */ - public void resetToPreferredSizes() - { - for (int i = 0; i < components.length; i++) - resetSizeAt(i); - } - - /** - * This methods sets the bounds of the given component. The width is the - * size. The height is the container size minus the top and bottom - * inset. The x coordinate is the location given. The y coordinate is - * the top inset. - * - * @param c The component to set. - * @param size The width of the component. - * @param location The x coordinate. - * @param insets The insets to use. - * @param containerSize The height of the container. - */ - protected void setComponentToSize(Component c, int size, int location, - Insets insets, Dimension containerSize) - { - if (insets != null) - { - if (axis == SwingConstants.HORIZONTAL) - c.setBounds(location, insets.top, size, - containerSize.height - insets.top - insets.bottom); - else - c.setBounds(insets.left, location, - containerSize.width - insets.left - insets.right, - size); - } - else - { - if (axis == SwingConstants.HORIZONTAL) - c.setBounds(location, 0, size, containerSize.height); - else - c.setBounds(0, location, containerSize.width, size); - } - } - - /** - * This method stores the given int array as the new sizes array. - * - * @param newSizes The array to use as sizes. - */ - protected void setSizes(int[] newSizes) - { - sizes = newSizes; - } - - /** - * This method determines the size of each component. It should be called - * when a new Layout Manager is created for an existing JSplitPane. - */ - protected void updateComponents() - { - Component left = splitPane.getLeftComponent(); - Component right = splitPane.getRightComponent(); - - if (left != null) - { - components[0] = left; - resetSizeAt(0); - } - if (right != null) - { - components[1] = right; - resetSizeAt(1); - } - components[2] = divider; - } - - /** - * This method resizes the left and right components to fit inside the - * JSplitPane when there is extra space. - */ - void distributeExtraSpace() - { - // FIXME: This needs to be reimplemented correctly. - } - - /** - * This method returns the minimum width of the component at the given - * index. - * - * @param index The index to check. - * - * @return The minimum width. - */ - int minimumSizeOfComponent(int index) - { - Dimension dims = components[index].getMinimumSize(); - int size = 0; - if (dims != null) - if (axis == SwingConstants.HORIZONTAL) - size = dims.width; - else - size = dims.height; - return size; - } - } //end BasicHorizontalLayoutManager - - /** - * This class is the Layout Manager for the JSplitPane when the orientation - * is VERTICAL_SPLIT. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class BasicVerticalLayoutManager - extends BasicHorizontalLayoutManager - { - /** - * Creates a new instance. - */ - public BasicVerticalLayoutManager() - { - super(SwingConstants.VERTICAL); - } - } - - /** - * This class handles FocusEvents from the JComponent. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class FocusHandler extends FocusAdapter - { - /** - * This method is called when the JSplitPane gains focus. - * - * @param ev The FocusEvent. - */ - public void focusGained(FocusEvent ev) - { - // repaint the divider because its background color may change due to - // the focus state... - divider.repaint(); - } - - /** - * This method is called when the JSplitPane loses focus. - * - * @param ev The FocusEvent. - */ - public void focusLost(FocusEvent ev) - { - // repaint the divider because its background color may change due to - // the focus state... - divider.repaint(); - } - } - - /** - * This is a deprecated class. It is supposed to be used for handling down - * and right key presses. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class KeyboardDownRightHandler implements ActionListener - { - /** - * This method is called when the down or right keys are pressed. - * - * @param ev The ActionEvent - */ - public void actionPerformed(ActionEvent ev) - { - // FIXME: implement. - } - } - - /** - * This is a deprecated class. It is supposed to be used for handling end - * key presses. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class KeyboardEndHandler implements ActionListener - { - /** - * This method is called when the end key is pressed. - * - * @param ev The ActionEvent. - */ - public void actionPerformed(ActionEvent ev) - { - // FIXME: implement. - } - } - - /** - * This is a deprecated class. It is supposed to be used for handling home - * key presses. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class KeyboardHomeHandler implements ActionListener - { - /** - * This method is called when the home key is pressed. - * - * @param ev The ActionEvent. - */ - public void actionPerformed(ActionEvent ev) - { - // FIXME: implement. - } - } - - /** - * This is a deprecated class. It is supposed to be used for handling resize - * toggles. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class KeyboardResizeToggleHandler implements ActionListener - { - /** - * This method is called when a resize is toggled. - * - * @param ev The ActionEvent. - */ - public void actionPerformed(ActionEvent ev) - { - // FIXME: implement. - } - } - - /** - * This is a deprecated class. It is supposed to be used for handler up and - * left key presses. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class KeyboardUpLeftHandler implements ActionListener - { - /** - * This method is called when the left or up keys are pressed. - * - * @param ev The ActionEvent. - */ - public void actionPerformed(ActionEvent ev) - { - // FIXME: implement. - } - } - - /** - * This helper class handles PropertyChangeEvents from the JSplitPane. When - * a property changes, this will update the UI accordingly. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class PropertyHandler implements PropertyChangeListener - { - /** - * This method is called whenever one of the JSplitPane's properties - * change. - * - * @param e DOCUMENT ME! - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(JSplitPane.DIVIDER_SIZE_PROPERTY)) - { - int newSize = splitPane.getDividerSize(); - int[] tmpSizes = layoutManager.getSizes(); - dividerSize = tmpSizes[2]; - int newSpace = newSize - tmpSizes[2]; - tmpSizes[2] = newSize; - - tmpSizes[0] += newSpace / 2; - tmpSizes[1] += newSpace / 2; - - layoutManager.setSizes(tmpSizes); - } - else if (e.getPropertyName().equals(JSplitPane.ORIENTATION_PROPERTY)) - { - int max = layoutManager.getAvailableSize(splitPane.getSize(), - splitPane.getInsets()); - int dividerLoc = getDividerLocation(splitPane); - double prop = ((double) dividerLoc) / max; - - resetLayoutManager(); - if (prop <= 1 && prop >= 0) - splitPane.setDividerLocation(prop); - } - // Don't have to deal with continuous_layout - only - // necessary in dragging modes (and it's checked - // every time you drag there) - // Don't have to deal with resize_weight (as there - // will be no extra space associated with this - // event - the changes to the weighting will - // be taken into account the next time the - // sizes change.) - // Don't have to deal with divider_location - // The method in JSplitPane calls our setDividerLocation - // so we'll know about those anyway. - // Don't have to deal with last_divider_location - // Although I'm not sure why, it doesn't seem to - // have any effect on Sun's JSplitPane. - // one_touch_expandable changes are dealt with - // by our divider. - } - } - - /** The location of the divider when dragging began. */ - protected int beginDragDividerLocation; - - /** The size of the divider while dragging. */ - protected int dividerSize; - - /** The location where the last drag location ended. */ - transient int lastDragLocation = -1; - - /** The distance the divider is moved when moved by keyboard actions. */ - // Sun defines this as 3 - protected static int KEYBOARD_DIVIDER_MOVE_OFFSET = 3; - - /** The divider that divides this JSplitPane. */ - protected BasicSplitPaneDivider divider; - - /** The listener that listens for PropertyChangeEvents from the JSplitPane. */ - protected PropertyChangeListener propertyChangeListener; - - /** The JSplitPane's focus handler. */ - protected FocusListener focusListener; - - /** @deprecated The handler for down and right key presses. */ - protected ActionListener keyboardDownRightListener; - - /** @deprecated The handler for end key presses. */ - protected ActionListener keyboardEndListener; - - /** @deprecated The handler for home key presses. */ - protected ActionListener keyboardHomeListener; - - /** @deprecated The handler for toggling resizes. */ - protected ActionListener keyboardResizeToggleListener; - - /** @deprecated The handler for up and left key presses. */ - protected ActionListener keyboardUpLeftListener; - - /** The JSplitPane's current layout manager. */ - protected BasicHorizontalLayoutManager layoutManager; - - /** @deprecated The divider resize toggle key. */ - protected KeyStroke dividerResizeToggleKey; - - /** @deprecated The down key. */ - protected KeyStroke downKey; - - /** @deprecated The end key. */ - protected KeyStroke endKey; - - /** @deprecated The home key. */ - protected KeyStroke homeKey; - - /** @deprecated The left key. */ - protected KeyStroke leftKey; - - /** @deprecated The right key. */ - protected KeyStroke rightKey; - - /** @deprecated The up key. */ - protected KeyStroke upKey; - - /** Set to true when dragging heavy weight components. */ - protected boolean draggingHW; - - /** - * The constraints object used when adding the non-continuous divider to the - * JSplitPane. - */ - protected static final String NON_CONTINUOUS_DIVIDER - = "nonContinuousDivider"; - - /** The dark divider used when dragging in non-continuous layout mode. */ - protected Component nonContinuousLayoutDivider; - - /** The JSplitPane that this UI draws. */ - protected JSplitPane splitPane; - - /** - * True, when setDividerLocation() has been called at least - * once on the JSplitPane, false otherwise. - * - * This is package private to avoid a synthetic accessor method. - */ - boolean dividerLocationSet; - - /** - * Creates a new BasicSplitPaneUI object. - */ - public BasicSplitPaneUI() - { - // Nothing to do here. - } - - /** - * This method creates a new BasicSplitPaneUI for the given JComponent. - * - * @param x The JComponent to create a UI for. - * - * @return A new BasicSplitPaneUI. - */ - public static ComponentUI createUI(JComponent x) - { - return new BasicSplitPaneUI(); - } - - /** - * This method installs the BasicSplitPaneUI for the given JComponent. - * - * @param c The JComponent to install the UI for. - */ - public void installUI(JComponent c) - { - if (c instanceof JSplitPane) - { - splitPane = (JSplitPane) c; - dividerLocationSet = false; - installDefaults(); - installListeners(); - installKeyboardActions(); - } - } - - /** - * This method uninstalls the BasicSplitPaneUI for the given JComponent. - * - * @param c The JComponent to uninstall the UI for. - */ - public void uninstallUI(JComponent c) - { - uninstallKeyboardActions(); - uninstallListeners(); - uninstallDefaults(); - - dividerLocationSet = false; - splitPane = null; - } - - /** - * This method installs the defaults given by the Look and Feel. - */ - protected void installDefaults() - { - LookAndFeel.installColors(splitPane, "SplitPane.background", - "SplitPane.foreground"); - LookAndFeel.installBorder(splitPane, "SplitPane.border"); - divider = createDefaultDivider(); - divider.setBorder(UIManager.getBorder("SplitPaneDivider.border")); - resetLayoutManager(); - nonContinuousLayoutDivider = createDefaultNonContinuousLayoutDivider(); - splitPane.add(divider, JSplitPane.DIVIDER); - - // There is no need to add the nonContinuousLayoutDivider. - dividerSize = UIManager.getInt("SplitPane.dividerSize"); - splitPane.setDividerSize(dividerSize); - divider.setDividerSize(dividerSize); - splitPane.setOpaque(true); - } - - /** - * This method uninstalls the defaults and nulls any objects created during - * install. - */ - protected void uninstallDefaults() - { - layoutManager = null; - splitPane.remove(divider); - divider = null; - nonContinuousLayoutDivider = null; - - if (splitPane.getBackground() instanceof UIResource) - splitPane.setBackground(null); - if (splitPane.getBorder() instanceof UIResource) - splitPane.setBorder(null); - } - - /** - * This method installs the listeners needed for this UI to function. - */ - protected void installListeners() - { - propertyChangeListener = createPropertyChangeListener(); - focusListener = createFocusListener(); - - splitPane.addPropertyChangeListener(propertyChangeListener); - splitPane.addFocusListener(focusListener); - } - - /** - * This method uninstalls all listeners registered for the UI. - */ - protected void uninstallListeners() - { - splitPane.removePropertyChangeListener(propertyChangeListener); - splitPane.removeFocusListener(focusListener); - - focusListener = null; - propertyChangeListener = null; - } - - /** - * Returns the input map for the specified condition. - * - * @param condition the condition. - * - * @return The input map. - */ - InputMap getInputMap(int condition) - { - if (condition == JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) - return (InputMap) UIManager.get("SplitPane.ancestorInputMap"); - return null; - } - - /** - * Returns the action map for the {@link JSplitPane}. All sliders share - * a single action map which is created the first time this method is - * called, then stored in the UIDefaults table for subsequent access. - * - * @return The shared action map. - */ - ActionMap getActionMap() - { - ActionMap map = (ActionMap) UIManager.get("SplitPane.actionMap"); - - if (map == null) // first time here - { - map = createActionMap(); - if (map != null) - UIManager.put("SplitPane.actionMap", map); - } - return map; - } - - /** - * Creates the action map shared by all {@link JSlider} instances. - * This method is called once by {@link #getActionMap()} when it - * finds no action map in the UIDefaults table...after the map is - * created, it gets added to the defaults table so that subsequent - * calls to {@link #getActionMap()} will return the same shared - * instance. - * - * @return The action map. - */ - ActionMap createActionMap() - { - ActionMap map = new ActionMapUIResource(); - map.put("toggleFocus", - new AbstractAction("toggleFocus") { - public void actionPerformed(ActionEvent event) - { - // FIXME: What to do here? - } - } - ); - map.put("startResize", - new AbstractAction("startResize") { - public void actionPerformed(ActionEvent event) - { - splitPane.requestFocus(); - } - } - ); - map.put("selectMax", - new AbstractAction("selectMax") { - public void actionPerformed(ActionEvent event) - { - splitPane.setDividerLocation(1.0); - } - } - ); - map.put("selectMin", - new AbstractAction("selectMin") { - public void actionPerformed(ActionEvent event) - { - splitPane.setDividerLocation(0.0); - } - } - ); - map.put("negativeIncrement", - new AbstractAction("negativeIncrement") { - public void actionPerformed(ActionEvent event) - { - int oldLoc = splitPane.getDividerLocation(); - int newLoc = - Math.max(oldLoc - KEYBOARD_DIVIDER_MOVE_OFFSET, 0); - splitPane.setDividerLocation(newLoc); - } - } - ); - map.put("positiveIncrement", - new AbstractAction("positiveIncrement") { - public void actionPerformed(ActionEvent event) - { - int oldLoc = splitPane.getDividerLocation(); - int newLoc = - Math.max(oldLoc + KEYBOARD_DIVIDER_MOVE_OFFSET, 0); - splitPane.setDividerLocation(newLoc); - } - } - ); - map.put("focusOutBackward", - new AbstractAction("focusOutBackward") { - public void actionPerformed(ActionEvent event) - { - // FIXME: implement this - } - } - ); - map.put("focusOutForward", - new AbstractAction("focusOutForward") { - public void actionPerformed(ActionEvent event) - { - // FIXME: implement this - } - } - ); - return map; - } - - /** - * Installs any keyboard actions. The list of keys that need to be bound are - * listed in Basic look and feel's defaults. - */ - protected void installKeyboardActions() - { - InputMap keyMap = getInputMap( - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); - SwingUtilities.replaceUIInputMap(splitPane, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, keyMap); - ActionMap map = getActionMap(); - SwingUtilities.replaceUIActionMap(splitPane, map); - } - - /** - * This method reverses the work done in installKeyboardActions. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIActionMap(splitPane, null); - SwingUtilities.replaceUIInputMap(splitPane, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - } - - /** - * This method creates a new PropertyChangeListener. - * - * @return A new PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyHandler(); - } - - /** - * This method creates a new FocusListener. - * - * @return A new FocusListener. - */ - protected FocusListener createFocusListener() - { - return new FocusHandler(); - } - - /** - * This method creates a new ActionListener for up and left key presses. - * - * @return A new ActionListener for up and left keys. - * - * @deprecated 1.3 - */ - protected ActionListener createKeyboardUpLeftListener() - { - return new KeyboardUpLeftHandler(); - } - - /** - * This method creates a new ActionListener for down and right key presses. - * - * @return A new ActionListener for down and right keys. - * - * @deprecated 1.3 - */ - protected ActionListener createKeyboardDownRightListener() - { - return new KeyboardDownRightHandler(); - } - - /** - * This method creates a new ActionListener for home key presses. - * - * @return A new ActionListener for home keys. - * - * @deprecated - */ - protected ActionListener createKeyboardHomeListener() - { - return new KeyboardHomeHandler(); - } - - /** - * This method creates a new ActionListener for end key presses.i - * - * @return A new ActionListener for end keys. - * - * @deprecated 1.3 - */ - protected ActionListener createKeyboardEndListener() - { - return new KeyboardEndHandler(); - } - - /** - * This method creates a new ActionListener for resize toggle key events. - * - * @return A new ActionListener for resize toggle keys. - * - * @deprecated 1.3 - */ - protected ActionListener createKeyboardResizeToggleListener() - { - return new KeyboardResizeToggleHandler(); - } - - /** - * This method returns the orientation of the JSplitPane. - * - * @return The orientation of the JSplitPane. - */ - public int getOrientation() - { - return splitPane.getOrientation(); - } - - /** - * This method sets the orientation of the JSplitPane. - * - * @param orientation The new orientation of the JSplitPane. - */ - public void setOrientation(int orientation) - { - splitPane.setOrientation(orientation); - } - - /** - * This method returns true if the JSplitPane is using continuous layout. - * - * @return True if the JSplitPane is using continuous layout. - */ - public boolean isContinuousLayout() - { - return splitPane.isContinuousLayout(); - } - - /** - * This method sets the continuous layout property of the JSplitPane. - * - * @param b True if the JsplitPane is to use continuous layout. - */ - public void setContinuousLayout(boolean b) - { - splitPane.setContinuousLayout(b); - } - - /** - * This method returns the last location the divider was dragged to. - * - * @return The last location the divider was dragged to. - */ - public int getLastDragLocation() - { - return lastDragLocation; - } - - /** - * This method sets the last location the divider was dragged to. - * - * @param l The last location the divider was dragged to. - */ - public void setLastDragLocation(int l) - { - lastDragLocation = l; - } - - /** - * This method returns the BasicSplitPaneDivider that divides this - * JSplitPane. - * - * @return The divider for the JSplitPane. - */ - public BasicSplitPaneDivider getDivider() - { - return divider; - } - - /** - * This method creates a nonContinuousLayoutDivider for use with the - * JSplitPane in nonContinousLayout mode. The default divider is a gray - * Canvas. - * - * @return The default nonContinousLayoutDivider. - */ - protected Component createDefaultNonContinuousLayoutDivider() - { - if (nonContinuousLayoutDivider == null) - { - nonContinuousLayoutDivider = new Canvas(); - Color c = UIManager.getColor("SplitPaneDivider.draggingColor"); - nonContinuousLayoutDivider.setBackground(c); - } - return nonContinuousLayoutDivider; - } - - /** - * This method sets the component to use as the nonContinuousLayoutDivider. - * - * @param newDivider The component to use as the nonContinuousLayoutDivider. - */ - protected void setNonContinuousLayoutDivider(Component newDivider) - { - setNonContinuousLayoutDivider(newDivider, true); - } - - /** - * This method sets the component to use as the nonContinuousLayoutDivider. - * - * @param newDivider The component to use as the nonContinuousLayoutDivider. - * @param rememberSizes FIXME: document. - */ - protected void setNonContinuousLayoutDivider(Component newDivider, - boolean rememberSizes) - { - // FIXME: use rememberSizes for something - nonContinuousLayoutDivider = newDivider; - } - - /** - * This method returns the nonContinuousLayoutDivider. - * - * @return The nonContinuousLayoutDivider. - */ - public Component getNonContinuousLayoutDivider() - { - return nonContinuousLayoutDivider; - } - - /** - * This method returns the JSplitPane that this BasicSplitPaneUI draws. - * - * @return The JSplitPane. - */ - public JSplitPane getSplitPane() - { - return splitPane; - } - - /** - * This method creates the divider used normally with the JSplitPane. - * - * @return The default divider. - */ - public BasicSplitPaneDivider createDefaultDivider() - { - if (divider == null) - divider = new BasicSplitPaneDivider(this); - return divider; - } - - /** - * This method is called when JSplitPane's resetToPreferredSizes is called. - * It resets the sizes of all components in the JSplitPane. - * - * @param jc The JSplitPane to reset. - */ - public void resetToPreferredSizes(JSplitPane jc) - { - layoutManager.resetToPreferredSizes(); - } - - /** - * This method sets the location of the divider. - * - * @param jc The JSplitPane to set the divider location in. - * @param location The new location of the divider. - */ - public void setDividerLocation(JSplitPane jc, int location) - { - dividerLocationSet = true; - splitPane.revalidate(); - splitPane.repaint(); - } - - /** - * This method returns the location of the divider. - * - * @param jc The JSplitPane to retrieve the location for. - * - * @return The location of the divider. - */ - public int getDividerLocation(JSplitPane jc) - { - int loc; - if (jc.getOrientation() == JSplitPane.HORIZONTAL_SPLIT) - loc = divider.getX(); - else - loc = divider.getY(); - return loc; - } - - /** - * This method returns the smallest value possible for the location of the - * divider. - * - * @param jc The JSplitPane. - * - * @return The minimum divider location. - */ - public int getMinimumDividerLocation(JSplitPane jc) - { - int value = layoutManager.getInitialLocation(jc.getInsets()); - if (layoutManager.components[0] != null) - value += layoutManager.minimumSizeOfComponent(0); - return value; - } - - /** - * This method returns the largest value possible for the location of the - * divider. - * - * @param jc The JSplitPane. - * - * @return The maximum divider location. - */ - public int getMaximumDividerLocation(JSplitPane jc) - { - int value = layoutManager.getInitialLocation(jc.getInsets()) - + layoutManager.getAvailableSize(jc.getSize(), jc.getInsets()) - - splitPane.getDividerSize(); - if (layoutManager.components[1] != null) - value -= layoutManager.minimumSizeOfComponent(1); - return value; - } - - /** - * This method is called after the children of the JSplitPane are painted. - * - * @param jc The JSplitPane. - * @param g The Graphics object to paint with. - */ - public void finishedPaintingChildren(JSplitPane jc, Graphics g) - { - if (! splitPane.isContinuousLayout() && nonContinuousLayoutDivider != null - && nonContinuousLayoutDivider.isVisible()) - javax.swing.SwingUtilities.paintComponent(g, nonContinuousLayoutDivider, - null, - nonContinuousLayoutDivider - .getBounds()); - } - - /** - * This method is called to paint the JSplitPane. - * - * @param g The Graphics object to paint with. - * @param jc The JSplitPane to paint. - */ - public void paint(Graphics g, JComponent jc) - { - // TODO: What should be done here? - } - - /** - * This method returns the preferred size of the JSplitPane. - * - * @param jc The JSplitPane. - * - * @return The preferred size of the JSplitPane. - */ - public Dimension getPreferredSize(JComponent jc) - { - return layoutManager.preferredLayoutSize(jc); - } - - /** - * This method returns the minimum size of the JSplitPane. - * - * @param jc The JSplitPane. - * - * @return The minimum size of the JSplitPane. - */ - public Dimension getMinimumSize(JComponent jc) - { - return layoutManager.minimumLayoutSize(jc); - } - - /** - * This method returns the maximum size of the JSplitPane. - * - * @param jc The JSplitPane. - * - * @return The maximum size of the JSplitPane. - */ - public Dimension getMaximumSize(JComponent jc) - { - return layoutManager.maximumLayoutSize(jc); - } - - /** - * This method returns the border insets of the current border. - * - * @param jc The JSplitPane. - * - * @return The current border insets. - */ - public Insets getInsets(JComponent jc) - { - return splitPane.getBorder().getBorderInsets(splitPane); - } - - /** - * This method resets the current layout manager. The type of layout manager - * is dependent on the current orientation. - */ - protected void resetLayoutManager() - { - if (getOrientation() == JSplitPane.HORIZONTAL_SPLIT) - layoutManager = new BasicHorizontalLayoutManager(); - else - layoutManager = new BasicVerticalLayoutManager(); - getSplitPane().setLayout(layoutManager); - layoutManager.updateComponents(); - - // invalidating by itself does not invalidate the layout. - getSplitPane().revalidate(); - } - - /** - * This method is called when dragging starts. It resets lastDragLocation - * and dividerSize. - */ - protected void startDragging() - { - Component left = splitPane.getLeftComponent(); - Component right = splitPane.getRightComponent(); - dividerSize = divider.getDividerSize(); - setLastDragLocation(-1); - - if ((left != null && !left.isLightweight()) - || (right != null && !right.isLightweight())) - draggingHW = true; - - if (splitPane.isContinuousLayout()) - nonContinuousLayoutDivider.setVisible(false); - else - { - nonContinuousLayoutDivider.setVisible(true); - nonContinuousLayoutDivider.setBounds(divider.getBounds()); - } - } - - /** - * This method is called whenever the divider is dragged. If the JSplitPane - * is in continuousLayout mode, the divider needs to be moved and the - * JSplitPane needs to be laid out. - * - * @param location The new location of the divider. - */ - protected void dragDividerTo(int location) - { - location = validLocation(location); - if (beginDragDividerLocation == -1) - beginDragDividerLocation = location; - - if (splitPane.isContinuousLayout()) - splitPane.setDividerLocation(location); - else - { - Point p = nonContinuousLayoutDivider.getLocation(); - if (getOrientation() == JSplitPane.HORIZONTAL_SPLIT) - p.x = location; - else - p.y = location; - nonContinuousLayoutDivider.setLocation(p); - } - setLastDragLocation(location); - splitPane.repaint(); - } - - /** - * This method is called when the dragging is finished. - * - * @param location The location where the drag finished. - */ - protected void finishDraggingTo(int location) - { - if (nonContinuousLayoutDivider != null) - nonContinuousLayoutDivider.setVisible(false); - draggingHW = false; - location = validLocation(location); - splitPane.setDividerLocation(location); - splitPane.setLastDividerLocation(beginDragDividerLocation); - beginDragDividerLocation = -1; - } - - /** - * This method returns the width of one of the sides of the divider's border. - * - * @return The width of one side of the divider's border. - * - * @deprecated 1.3 - */ - protected int getDividerBorderSize() - { - if (getOrientation() == JSplitPane.HORIZONTAL_SPLIT) - return divider.getBorder().getBorderInsets(divider).left; - else - return divider.getBorder().getBorderInsets(divider).top; - } - - /** - * This is a helper method that returns a valid location for the divider - * when dragging. - * - * @param location The location to check. - * - * @return A valid location. - */ - private int validLocation(int location) - { - int min = getMinimumDividerLocation(splitPane); - int max = getMaximumDividerLocation(splitPane); - if (min > 0 && location < min) - return min; - if (max > 0 && location > max) - return max; - return location; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java deleted file mode 100644 index c42f9ca..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTabbedPaneUI.java +++ /dev/null @@ -1,4003 +0,0 @@ -/* BasicTabbedPaneUI.java -- - Copyright (C) 2002, 2004, 2005, 2006 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.Icon; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.JViewport; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TabbedPaneUI; -import javax.swing.plaf.UIResource; -import javax.swing.text.View; - -/** - * This is the Basic Look and Feel's UI delegate for JTabbedPane. - * - * @author Lillian Angel (langel@redhat.com) - * @author Kim Ho (kho@redhat.com) - * @author Roman Kennke (kennke@aicas.com) - * @author Robert Schuster (robertschuster@fsfe.org) - */ -public class BasicTabbedPaneUI extends TabbedPaneUI implements SwingConstants -{ - - static class NavigateAction extends AbstractAction - { - int direction; - - NavigateAction(String name, int dir) - { - super(name); - direction = dir; - } - - public void actionPerformed(ActionEvent event) - { - JTabbedPane tp = (JTabbedPane) event.getSource(); - BasicTabbedPaneUI ui = (BasicTabbedPaneUI) tp.getUI(); - - ui.navigateSelectedTab(direction); - } - - } - - static class NavigatePageDownAction extends AbstractAction - { - - public NavigatePageDownAction() - { - super("navigatePageDown"); - } - - public void actionPerformed(ActionEvent event) - { - JTabbedPane tp = (JTabbedPane) event.getSource(); - BasicTabbedPaneUI ui = (BasicTabbedPaneUI) tp.getUI(); - - int i = tp.getSelectedIndex(); - - if (i < 0) - i = 0; - - ui.selectNextTabInRun(i); - } - - } - - static class NavigatePageUpAction extends AbstractAction - { - - public NavigatePageUpAction() - { - super("navigatePageUp"); - } - - public void actionPerformed(ActionEvent event) - { - JTabbedPane tp = (JTabbedPane) event.getSource(); - BasicTabbedPaneUI ui = (BasicTabbedPaneUI) tp.getUI(); - - int i = tp.getSelectedIndex(); - - if (i < 0) - i = 0; - - ui.selectPreviousTabInRun(i); - - } - } - - static class RequestFocusAction extends AbstractAction - { - - public RequestFocusAction() - { - super("requestFocus"); - } - - public void actionPerformed(ActionEvent event) - { - ((JTabbedPane) event.getSource()).requestFocus(); - } - - } - - static class RequestFocusForVisibleComponentAction extends AbstractAction - { - - public RequestFocusForVisibleComponentAction() - { - super("requestFocusForVisibleComponent"); - } - - public void actionPerformed(ActionEvent event) - { - JTabbedPane tp = (JTabbedPane) event.getSource(); - - // FIXME: This should select a suitable component within - // the tab content. However I dont know whether we have - // to search for this component or wether the called is - // supposed to do that. - tp.getSelectedComponent().requestFocus(); - } - - } - - /** - * A helper class that handles focus. - * <p>The purpose of this class is to implement a more flexible focus - * handling for the tabbed pane, which is used to determine whether the - * focus indicator should be painted or not. When in scrolling layout - * mode the area containing the tabs is a scrollpane, so simply testing - * whether the tabbed pane has the focus does not work.</p> - * <p>The <code>FocusHandler</code> is installed on the scrollpane and - * the tabbed pane and sets the variable <code>hasFocus</code> to - * <code>false</code> only when both components do not hold the focus.</p> - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class FocusHandler extends FocusAdapter - { - /** - * This method is called when the component gains focus. - * - * @param e The FocusEvent. - */ - public void focusGained(FocusEvent e) - { - Object source = e.getSource(); - if (source == panel ) - tabPane.requestFocus(); - else if (source == tabPane) - tabPane.repaint(); - } - - /** - * This method is called when the component loses focus. - * - * @param e The FocusEvent. - */ - public void focusLost(FocusEvent e) - { - if (e.getOppositeComponent() == tabPane.getSelectedComponent()) - tabPane.requestFocus(); - else if (e.getSource() == tabPane) - tabPane.repaint(); - } - } - - /** - * A helper class for determining if mouse presses occur inside tabs and - * sets the index appropriately. In SCROLL_TAB_MODE, this class also - * handles the mouse clicks on the scrolling buttons. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class MouseHandler extends MouseAdapter - { - public void mouseReleased(MouseEvent e) - { - Object s = e.getSource(); - - // Event may originate from the viewport in - // SCROLL_TAB_LAYOUT mode. It is redisptached - // through the tabbed pane then. - if (tabPane != e.getSource()) - { - redispatchEvent(e); - e.setSource(s); - } - } - - /** - * This method is called when the mouse is pressed. The index cannot - * change to a tab that is not enabled. - * - * @param e The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - Object s = e.getSource(); - - // Event may originate from the viewport in - // SCROLL_TAB_LAYOUT mode. It is redisptached - // through the tabbed pane then. - if (tabPane != e.getSource()) - { - redispatchEvent(e); - e.setSource(s); - } - - int placement = tabPane.getTabPlacement(); - - if (s == incrButton) - { - if(!incrButton.isEnabled()) - return; - - currentScrollLocation++; - - switch (placement) - { - case JTabbedPane.TOP: - case JTabbedPane.BOTTOM: - currentScrollOffset = getTabAreaInsets(placement).left; - for (int i = 0; i < currentScrollLocation; i++) - currentScrollOffset += rects[i].width; - break; - default: - currentScrollOffset = getTabAreaInsets(placement).top; - for (int i = 0; i < currentScrollLocation; i++) - currentScrollOffset += rects[i].height; - break; - } - - updateViewPosition(); - updateButtons(); - - tabPane.repaint(); - } - else if (s == decrButton) - { - if(!decrButton.isEnabled()) - return; - - // The scroll location may be zero but the offset - // greater than zero because of an adjustement to - // make a partially visible tab completely visible. - if (currentScrollLocation > 0) - currentScrollLocation--; - - // Set the offset back to 0 and recompute it. - currentScrollOffset = 0; - - switch (placement) - { - case JTabbedPane.TOP: - case JTabbedPane.BOTTOM: - // Take the tab area inset into account. - if (currentScrollLocation > 0) - currentScrollOffset = getTabAreaInsets(placement).left; - // Recompute scroll offset. - for (int i = 0; i < currentScrollLocation; i++) - currentScrollOffset += rects[i].width; - break; - default: - // Take the tab area inset into account. - if (currentScrollLocation > 0) - currentScrollOffset = getTabAreaInsets(placement).top; - - for (int i = 0; i < currentScrollLocation; i++) - currentScrollOffset += rects[i].height; - } - - updateViewPosition(); - updateButtons(); - - tabPane.repaint(); - } - else if (tabPane.isEnabled()) - { - int index = tabForCoordinate(tabPane, e.getX(), e.getY()); - if (!tabPane.isEnabledAt(index)) - return; - - if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT - && s == panel) - { - scrollTab(index, placement); - - tabPane.setSelectedIndex(index); - tabPane.repaint(); - } - else - { - tabPane.setSelectedIndex(index); - tabPane.revalidate(); - tabPane.repaint(); - } - - } - - } - - /** - * Receives notification when the mouse pointer has entered the tabbed - * pane. - * - * @param e the mouse event - */ - public void mouseEntered(MouseEvent e) - { - Object s = e.getSource(); - - // Event may originate from the viewport in - // SCROLL_TAB_LAYOUT mode. It is redisptached - // through the tabbed pane then. - if (tabPane != e.getSource()) - { - redispatchEvent(e); - e.setSource(s); - } - - int tabIndex = tabForCoordinate(tabPane, e.getX(), e.getY()); - setRolloverTab(tabIndex); - } - - /** - * Receives notification when the mouse pointer has exited the tabbed - * pane. - * - * @param e the mouse event - */ - public void mouseExited(MouseEvent e) - { - Object s = e.getSource(); - - // Event may originate from the viewport in - // SCROLL_TAB_LAYOUT mode. It is redisptached - // through the tabbed pane then. - if (tabPane != e.getSource()) - { - redispatchEvent(e); - e.setSource(s); - } - - setRolloverTab(-1); - } - - /** - * Receives notification when the mouse pointer has moved over the tabbed - * pane. - * - * @param ev the mouse event - */ - public void mouseMoved(MouseEvent ev) - { - Object s = ev.getSource(); - - if (tabPane != ev.getSource()) - { - ev.setSource(tabPane); - tabPane.dispatchEvent(ev); - - ev.setSource(s); - } - - int tabIndex = tabForCoordinate(tabPane, ev.getX(), ev.getY()); - setRolloverTab(tabIndex); - } - - /** Modifies the mouse event to originate from - * the tabbed pane and redispatches it. - * - * @param me - */ - void redispatchEvent(MouseEvent me) - { - me.setSource(tabPane); - Point viewPos = viewport.getViewPosition(); - viewPos.x -= viewport.getX(); - viewPos.y -= viewport.getY(); - me.translatePoint(-viewPos.x, -viewPos.y); - tabPane.dispatchEvent(me); - - me.translatePoint(viewPos.x, viewPos.y); - } - - } - - /** - * This class handles PropertyChangeEvents fired from the JTabbedPane. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class PropertyChangeHandler implements PropertyChangeListener - { - /** - * This method is called whenever one of the properties of the JTabbedPane - * changes. - * - * @param e The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - out: - { - if (e.getPropertyName().equals("tabLayoutPolicy")) - { - currentScrollLocation = currentScrollOffset = 0; - - layoutManager = createLayoutManager(); - - tabPane.setLayout(layoutManager); - } - else if (e.getPropertyName().equals("tabPlacement") - && tabPane.getTabLayoutPolicy() - == JTabbedPane.SCROLL_TAB_LAYOUT) - { - incrButton = createIncreaseButton(); - decrButton = createDecreaseButton(); - - // If the tab placement value was changed of a tabbed pane - // in SCROLL_TAB_LAYOUT mode we investigate the change to - // implement the following behavior which was observed in - // the RI: - // The scrolling offset will be reset if we change to - // a direction which is orthogonal to the current - // direction and stays the same if it is parallel. - - int oldPlacement = ((Integer) e.getOldValue()).intValue(); - int newPlacement = ((Integer) e.getNewValue()).intValue(); - switch (newPlacement) - { - case JTabbedPane.TOP: - case JTabbedPane.BOTTOM: - if (oldPlacement == JTabbedPane.TOP - || oldPlacement == JTabbedPane.BOTTOM) - break out; - - currentScrollOffset = getTabAreaInsets(newPlacement).left; - break; - default: - if (oldPlacement == JTabbedPane.LEFT - || oldPlacement == JTabbedPane.RIGHT) - break out; - - currentScrollOffset = getTabAreaInsets(newPlacement).top; - } - - updateViewPosition(); - updateButtons(); - } - } - - tabPane.revalidate(); - tabPane.repaint(); - } - } - - /** - * A LayoutManager responsible for placing all the tabs and the visible - * component inside the JTabbedPane. This class is only used for - * WRAP_TAB_LAYOUT. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class TabbedPaneLayout implements LayoutManager - { - /** - * This method is called when a component is added to the JTabbedPane. - * - * @param name The name of the component. - * @param comp The component being added. - */ - public void addLayoutComponent(String name, Component comp) - { - // Do nothing. - } - - /** - * This method is called when the rectangles need to be calculated. It - * also fixes the size of the visible component. - */ - public void calculateLayoutInfo() - { - int count = tabPane.getTabCount(); - assureRectsCreated(count); - calculateTabRects(tabPane.getTabPlacement(), count); - tabRunsDirty = false; - } - - /** - * This method calculates the size of the the JTabbedPane. - * - * @param minimum Whether the JTabbedPane will try to be as small as it - * can. - * - * @return The desired size of the JTabbedPane. - */ - protected Dimension calculateSize(boolean minimum) - { - int tabPlacement = tabPane.getTabPlacement(); - - int width = 0; - int height = 0; - Component c; - Dimension dims; - - // Find out the minimum/preferred size to display the largest child - // of the tabbed pane. - int count = tabPane.getTabCount(); - for (int i = 0; i < count; i++) - { - c = tabPane.getComponentAt(i); - if (c == null) - continue; - dims = minimum ? c.getMinimumSize() : c.getPreferredSize(); - if (dims != null) - { - height = Math.max(height, dims.height); - width = Math.max(width, dims.width); - } - } - - Insets tabAreaInsets = getTabAreaInsets(tabPlacement); - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - width = Math.max(calculateMaxTabWidth(tabPlacement), width); - - height += preferredTabAreaHeight(tabPlacement, - width - tabAreaInsets.left - - tabAreaInsets.right); - } - else - { - height = Math.max(calculateMaxTabHeight(tabPlacement), height); - - width += preferredTabAreaWidth(tabPlacement, - height - tabAreaInsets.top - - tabAreaInsets.bottom); - } - - Insets tabPaneInsets = tabPane.getInsets(); - return new Dimension(width + tabPaneInsets.left + tabPaneInsets.right, - height + tabPaneInsets.top + tabPaneInsets.bottom); - } - - // if tab placement is LEFT OR RIGHT, they share width. - // if tab placement is TOP OR BOTTOM, they share height - // PRE STEP: finds the default sizes for the labels as well as their - // locations. - // AND where they will be placed within the run system. - // 1. calls normalizeTab Runs. - // 2. calls rotate tab runs. - // 3. pads the tab runs. - // 4. pads the selected tab. - - /** - * This method is called to calculate the tab rectangles. This method - * will calculate the size and position of all rectangles (taking into - * account which ones should be in which tab run). It will pad them and - * normalize them as necessary. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabCount The run the current selection is in. - */ - protected void calculateTabRects(int tabPlacement, int tabCount) - { - Insets insets = tabPane.getInsets(); - Insets tabAreaInsets = getTabAreaInsets(tabPlacement); - Dimension size = tabPane.getSize(); - - // The coordinates of the upper left corner of the tab area. - int x; - int y; - // The location at which the runs must be broken. - int breakAt; - - // Calculate the bounds for the tab area. - switch (tabPlacement) - { - case LEFT: - maxTabWidth = calculateMaxTabWidth(tabPlacement); - x = insets.left + tabAreaInsets.left; - y = insets.top + tabAreaInsets.top; - breakAt = size.height - (insets.bottom + tabAreaInsets.bottom); - break; - case RIGHT: - maxTabWidth = calculateMaxTabWidth(tabPlacement); - x = size.width - (insets.right + tabAreaInsets.right) - - maxTabWidth - 1; - y = insets.top + tabAreaInsets.top; - breakAt = size.height - (insets.bottom + tabAreaInsets.bottom); - break; - case BOTTOM: - maxTabHeight = calculateMaxTabHeight(tabPlacement); - x = insets.left + tabAreaInsets.left; - y = size.height - (insets.bottom + tabAreaInsets.bottom) - - maxTabHeight - 1; - breakAt = size.width - (insets.right + tabAreaInsets.right); - break; - case TOP: - default: - maxTabHeight = calculateMaxTabHeight(tabPlacement); - x = insets.left + tabAreaInsets.left; - y = insets.top + tabAreaInsets.top; - breakAt = size.width - (insets.right + tabAreaInsets.right); - break; - } - - if (tabCount == 0) - return; - - FontMetrics fm = getFontMetrics(); - runCount = 0; - selectedRun = -1; - int selectedIndex = tabPane.getSelectedIndex(); - if (selectedIndex < 0) - selectedIndex = 0; - - Rectangle rect; - - // Go through all the tabs and build the tab runs. - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - for (int i = 0; i < tabCount; i++) - { - rect = rects[i]; - if (i > 0) - { - rect.x = rects[i - 1].x + rects[i - 1].width; - } - else - { - tabRuns[0] = 0; - runCount = 1; - maxTabWidth = 0; - rect.x = x; - } - rect.width = calculateTabWidth(tabPlacement, i, fm); - maxTabWidth = Math.max(maxTabWidth, rect.width); - - if (rect.x != 2 + insets.left && rect.x + rect.width > breakAt) - { - if (runCount > tabRuns.length - 1) - expandTabRunsArray(); - tabRuns[runCount] = i; - runCount++; - rect.x = x; - } - - rect.y = y; - rect.height = maxTabHeight; - if (i == selectedIndex) - selectedRun = runCount - 1; - } - } - else - { - for (int i = 0; i < tabCount; i++) - { - rect = rects[i]; - if (i > 0) - { - rect.y = rects[i - 1].y + rects[i - 1].height; - } - else - { - tabRuns[0] = 0; - runCount = 1; - maxTabHeight = 0; - rect.y = y; - } - rect.height = calculateTabHeight(tabPlacement, i, - fm.getHeight()); - maxTabHeight = Math.max(maxTabHeight, rect.height); - - if (rect.y != 2 + insets.top && rect.y + rect.height > breakAt) - { - if (runCount > tabRuns.length - 1) - expandTabRunsArray(); - tabRuns[runCount] = i; - runCount++; - rect.y = y; - } - - rect.x = x; - rect.width = maxTabWidth; - - if (i == selectedIndex) - selectedRun = runCount - 1; - } - } - - if (runCount > 1) - { - int start; - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - start = x; - else - start = y; - normalizeTabRuns(tabPlacement, tabCount, start, breakAt); - selectedRun = getRunForTab(tabCount, selectedIndex); - if (shouldRotateTabRuns(tabPlacement)) - { - rotateTabRuns(tabPlacement, selectedRun); - } - } - - // Suppress padding if we have only one tab run. - if (runCount == 1) - return; - - // Pad the runs. - int tabRunOverlay = getTabRunOverlay(tabPlacement); - for (int i = runCount - 1; i >= 0; --i) - { - int start = tabRuns[i]; - int nextIndex; - if (i == runCount - 1) - nextIndex = 0; - else - nextIndex = i + 1; - int next = tabRuns[nextIndex]; - int end = next != 0 ? next - 1 : tabCount - 1; - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - for (int j = start; j <= end; ++j) - { - rect = rects[j]; - rect.y = y; - rect.x += getTabRunIndent(tabPlacement, i); - } - if (shouldPadTabRun(tabPlacement, i)) - { - padTabRun(tabPlacement, start, end, breakAt); - } - if (tabPlacement == BOTTOM) - y -= maxTabHeight - tabRunOverlay; - else - y += maxTabHeight - tabRunOverlay; - } - else - { - for (int j = start; j <= end; ++j) - { - rect = rects[j]; - rect.x = x; - rect.y += getTabRunIndent(tabPlacement, i); - } - if (shouldPadTabRun(tabPlacement, i)) - { - padTabRun(tabPlacement, start, end, breakAt); - } - if (tabPlacement == RIGHT) - x -= maxTabWidth - tabRunOverlay; - else - x += maxTabWidth - tabRunOverlay; - - } - } - padSelectedTab(tabPlacement, selectedIndex); - } - - /** - * This method is called when the JTabbedPane is laid out in - * WRAP_TAB_LAYOUT. It calls calculateLayoutInfo to find the positions - * of all its components. - * - * @param parent The Container to lay out. - */ - public void layoutContainer(Container parent) - { - calculateLayoutInfo(); - - int tabPlacement = tabPane.getTabPlacement(); - Insets insets = tabPane.getInsets(); - - int selectedIndex = tabPane.getSelectedIndex(); - - Component selectedComponent = null; - if (selectedIndex >= 0) - selectedComponent = tabPane.getComponentAt(selectedIndex); - // The RI doesn't seem to change the component if the new selected - // component == null. This is probably so that applications can add - // one single component for every tab. - if (selectedComponent != null) - { - setVisibleComponent(selectedComponent); - } - - int childCount = tabPane.getComponentCount(); - if (childCount > 0) - { - int compX; - int compY; - int tabAreaWidth = 0; - int tabAreaHeight = 0; - switch (tabPlacement) - { - case LEFT: - tabAreaWidth = calculateTabAreaWidth(tabPlacement, runCount, - maxTabWidth); - compX = tabAreaWidth + insets.left + contentBorderInsets.left; - compY = insets.top + contentBorderInsets.top; - break; - case RIGHT: - tabAreaWidth = calculateTabAreaWidth(tabPlacement, runCount, - maxTabWidth); - compX = insets.left + contentBorderInsets.left; - compY = insets.top + contentBorderInsets.top; - break; - case BOTTOM: - tabAreaHeight = calculateTabAreaHeight(tabPlacement, runCount, - maxTabHeight); - compX = insets.left + contentBorderInsets.left; - compY = insets.top + contentBorderInsets.top; - break; - case TOP: - default: - tabAreaHeight = calculateTabAreaHeight(tabPlacement, runCount, - maxTabHeight); - - compX = insets.left + contentBorderInsets.left; - compY = tabAreaHeight + insets.top + contentBorderInsets.top; - } - Rectangle bounds = tabPane.getBounds(); - int compWidth = bounds.width - tabAreaWidth - insets.left - - insets.right - contentBorderInsets.left - - contentBorderInsets.right; - int compHeight = bounds.height - tabAreaHeight - insets.top - - insets.bottom - contentBorderInsets.top - - contentBorderInsets.bottom; - - - for (int i = 0; i < childCount; ++i) - { - Component c = tabPane.getComponent(i); - c.setBounds(compX, compY, compWidth, compHeight); - } - } - } - - /** - * This method returns the minimum layout size for the given container. - * - * @param parent The container that is being sized. - * - * @return The minimum size. - */ - public Dimension minimumLayoutSize(Container parent) - { - return calculateSize(true); - } - - // If there is more free space in an adjacent run AND the tab - // in the run can fit in the adjacent run, move it. This method - // is not perfect, it is merely an approximation. - // If you play around with Sun's JTabbedPane, you'll see that - // it does do some pretty strange things with regards to not moving tabs - // that should be moved. - // start = the x position where the tabs will begin - // max = the maximum position of where the tabs can go to - // (tabAreaInsets.left + the width of the tab area) - - /** - * This method tries to "even out" the number of tabs in each run based on - * their widths. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabCount The number of tabs. - * @param start The x position where the tabs will begin. - * @param max The maximum x position where the tab can run to. - */ - protected void normalizeTabRuns(int tabPlacement, int tabCount, int start, - int max) - { - boolean horizontal = tabPlacement == TOP || tabPlacement == BOTTOM; - int currentRun = runCount - 1; - double weight = 1.25; - for (boolean adjust = true; adjust == true;) - { - int last = lastTabInRun(tabCount, currentRun); - int prevLast = lastTabInRun(tabCount, currentRun - 1); - int end; - int prevLength; - if (horizontal) - { - end = rects[last].x + rects[last].width; - prevLength = (int) (maxTabWidth * weight); - } - else - { - end = rects[last].y + rects[last].height; - prevLength = (int) (maxTabWidth * weight * 2); - } - if (max - end > prevLength) - { - tabRuns[currentRun] = prevLast; - if (horizontal) - rects[prevLast].x = start; - else - rects[prevLast].y = start; - for (int i = prevLast + 1; i <= last; i++) - { - if (horizontal) - rects[i].x = rects[i - 1].x + rects[i - 1].width; - else - rects[i].y = rects[i - 1].y + rects[i - 1].height; - } - } - else if (currentRun == runCount - 1) - adjust = false; - if (currentRun - 1 > 0) - currentRun -= 1; - else - { - // Check again, but with higher ratio to avoid - // clogging up the last run. - currentRun = runCount - 1; - weight += 0.25; - } - } - } - - /** - * This method pads the tab at the selected index by the selected tab pad - * insets (so that it looks larger). - * - * @param tabPlacement The placement of the tabs. - * @param selectedIndex The selected index. - */ - protected void padSelectedTab(int tabPlacement, int selectedIndex) - { - Insets insets = getSelectedTabPadInsets(tabPlacement); - rects[selectedIndex].x -= insets.left; - rects[selectedIndex].y -= insets.top; - rects[selectedIndex].width += insets.left + insets.right; - rects[selectedIndex].height += insets.top + insets.bottom; - } - - // If the tabs on the run don't fill the width of the window, make it - // fit now. - // start = starting index of the run - // end = last index of the run - // max = tabAreaInsets.left + width (or equivalent) - // assert start <= end. - - /** - * This method makes each tab in the run larger so that the tabs expand - * to fill the runs width/height (depending on tabPlacement). - * - * @param tabPlacement The placement of the tabs. - * @param start The index of the first tab. - * @param end The last index of the tab - * @param max The amount of space in the run (width for TOP and BOTTOM - * tabPlacement). - */ - protected void padTabRun(int tabPlacement, int start, int end, int max) - { - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - int runWidth = rects[end].x + rects[end].width; - int spaceRemaining = max - runWidth; - int numTabs = end - start + 1; - - // now divvy up the space. - int spaceAllocated = spaceRemaining / numTabs; - int currX = rects[start].x; - for (int i = start; i <= end; i++) - { - rects[i].x = currX; - rects[i].width += spaceAllocated; - - currX += rects[i].width; - // This is used because since the spaceAllocated - // variable is an int, it rounds down. Sometimes, - // we don't fill an entire row, so we make it do - // so now. - - if (i == end && rects[i].x + rects[i].width != max) - rects[i].width = max - rects[i].x; - } - } - else - { - int runHeight = rects[end].y + rects[end].height; - int spaceRemaining = max - runHeight; - int numTabs = end - start + 1; - - int spaceAllocated = spaceRemaining / numTabs; - int currY = rects[start].y; - for (int i = start; i <= end; i++) - { - rects[i].y = currY; - rects[i].height += spaceAllocated; - currY += rects[i].height; - if (i == end && rects[i].y + rects[i].height != max) - rects[i].height = max - rects[i].y; - } - } - } - - /** - * This method returns the preferred layout size for the given container. - * - * @param parent The container to size. - * - * @return The preferred layout size. - */ - public Dimension preferredLayoutSize(Container parent) - { - return calculateSize(false); - } - - /** - * This method returns the preferred tab height given a tabPlacement and - * width. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param width The expected width. - * - * @return The preferred tab area height. - */ - protected int preferredTabAreaHeight(int tabPlacement, int width) - { - if (tabPane.getTabCount() == 0) - return calculateTabAreaHeight(tabPlacement, 0, 0); - - int runs = 0; - int runWidth = 0; - int tabWidth = 0; - - FontMetrics fm = getFontMetrics(); - - Insets tabAreaInsets = getTabAreaInsets(tabPlacement); - Insets insets = tabPane.getInsets(); - - // Only interested in width, this is a messed up rectangle now. - width -= tabAreaInsets.left + tabAreaInsets.right + insets.left - + insets.right; - - // The reason why we can't use runCount: - // This method is only called to calculate the size request - // for the tabbedPane. However, this size request is dependent on - // our desired width. We need to find out what the height would - // be IF we got our desired width. - for (int i = 0; i < tabPane.getTabCount(); i++) - { - tabWidth = calculateTabWidth(tabPlacement, i, fm); - if (runWidth + tabWidth > width) - { - runWidth = tabWidth; - runs++; - } - else - runWidth += tabWidth; - } - runs++; - - int maxTabHeight = calculateMaxTabHeight(tabPlacement); - int tabAreaHeight = calculateTabAreaHeight(tabPlacement, runs, - maxTabHeight); - return tabAreaHeight; - } - - /** - * This method calculates the preferred tab area width given a tab - * placement and height. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param height The expected height. - * - * @return The preferred tab area width. - */ - protected int preferredTabAreaWidth(int tabPlacement, int height) - { - if (tabPane.getTabCount() == 0) - return calculateTabAreaHeight(tabPlacement, 0, 0); - - int runs = 0; - int runHeight = 0; - int tabHeight = 0; - - FontMetrics fm = getFontMetrics(); - - Insets tabAreaInsets = getTabAreaInsets(tabPlacement); - Insets insets = tabPane.getInsets(); - - height -= tabAreaInsets.top + tabAreaInsets.bottom + insets.top - + insets.bottom; - int fontHeight = fm.getHeight(); - - for (int i = 0; i < tabPane.getTabCount(); i++) - { - tabHeight = calculateTabHeight(tabPlacement, i, fontHeight); - if (runHeight + tabHeight > height) - { - runHeight = tabHeight; - runs++; - } - else - runHeight += tabHeight; - } - runs++; - - int maxTabWidth = calculateMaxTabWidth(tabPlacement); - int tabAreaWidth = calculateTabAreaWidth(tabPlacement, runs, - maxTabWidth); - return tabAreaWidth; - } - - /** - * This method rotates the places each run in the correct place the - * tabRuns array. See the comment for tabRuns for how the runs are placed - * in the array. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedRun The run the current selection is in. - */ - protected void rotateTabRuns(int tabPlacement, int selectedRun) - { - if (runCount == 1 || selectedRun == 0 || selectedRun == -1) - return; - int[] newTabRuns = new int[tabRuns.length]; - int currentRun = selectedRun; - int i = 0; - do - { - newTabRuns[i] = tabRuns[currentRun]; - currentRun = getNextTabRun(currentRun); - i++; - } - while (i < runCount); - - tabRuns = newTabRuns; - BasicTabbedPaneUI.this.selectedRun = 1; - } - - /** - * This method is called when a component is removed from the - * JTabbedPane. - * - * @param comp The component removed. - */ - public void removeLayoutComponent(Component comp) - { - // Do nothing. - } - } - - /** - * This class acts as the LayoutManager for the JTabbedPane in - * SCROLL_TAB_MODE. - */ - private class TabbedPaneScrollLayout extends TabbedPaneLayout - { - /** - * This method returns the preferred layout size for the given container. - * - * @param parent The container to calculate a size for. - * - * @return The preferred layout size. - */ - public Dimension preferredLayoutSize(Container parent) - { - return super.calculateSize(false); - } - - /** - * This method returns the minimum layout size for the given container. - * - * @param parent The container to calculate a size for. - * - * @return The minimum layout size. - */ - public Dimension minimumLayoutSize(Container parent) - { - return super.calculateSize(true); - } - - /** - * This method calculates the tab area height given a desired width. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param width The expected width. - * - * @return The tab area height given the width. - */ - protected int preferredTabAreaHeight(int tabPlacement, int width) - { - if (tabPane.getTabCount() == 0) - return calculateTabAreaHeight(tabPlacement, 0, 0); - - int runs = 1; - - int maxTabHeight = calculateMaxTabHeight(tabPlacement); - int tabAreaHeight = calculateTabAreaHeight(tabPlacement, runs, - maxTabHeight); - return tabAreaHeight; - } - - /** - * This method calculates the tab area width given a desired height. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param height The expected height. - * - * @return The tab area width given the height. - */ - protected int preferredTabAreaWidth(int tabPlacement, int height) - { - if (tabPane.getTabCount() == 0) - return calculateTabAreaHeight(tabPlacement, 0, 0); - - int runs = 1; - - int maxTabWidth = calculateMaxTabWidth(tabPlacement); - int tabAreaWidth = calculateTabAreaWidth(tabPlacement, runs, maxTabWidth); - return tabAreaWidth; - } - - /** - * This method is called to calculate the tab rectangles. This method - * will calculate the size and position of all rectangles (taking into - * account which ones should be in which tab run). It will pad them and - * normalize them as necessary. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabCount The number of tabs. - */ - protected void calculateTabRects(int tabPlacement, int tabCount) - { - if (tabCount == 0) - return; - - FontMetrics fm = getFontMetrics(); - SwingUtilities.calculateInnerArea(tabPane, calcRect); - Insets tabAreaInsets = getTabAreaInsets(tabPlacement); - Insets insets = tabPane.getInsets(); - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - int maxHeight = calculateMaxTabHeight(tabPlacement); - calcRect.width -= tabAreaInsets.left + tabAreaInsets.right; - int width = 0; - int runWidth = tabAreaInsets.left + insets.left; - int top = insets.top + tabAreaInsets.top; - for (int i = 0; i < tabCount; i++) - { - width = calculateTabWidth(tabPlacement, i, fm); - - // The proper instances should exists because - // assureRectsCreated() was being run already. - rects[i].setBounds(runWidth, top, width, maxHeight); - - runWidth += width; - } - tabAreaRect.width = tabPane.getWidth() - insets.left - insets.right; - tabAreaRect.height = maxTabHeight + tabAreaInsets.top - + tabAreaInsets.bottom; - contentRect.width = tabAreaRect.width; - contentRect.height = tabPane.getHeight() - insets.top - - insets.bottom - tabAreaRect.height; - contentRect.x = insets.left; - tabAreaRect.x = insets.left; - if (tabPlacement == SwingConstants.BOTTOM) - { - contentRect.y = insets.top; - tabAreaRect.y = contentRect.y + contentRect.height; - } - else - { - tabAreaRect.y = insets.top; - contentRect.y = tabAreaRect.y + tabAreaRect.height; - } - } - else - { - int maxWidth = calculateMaxTabWidth(tabPlacement); - - calcRect.height -= tabAreaInsets.top + tabAreaInsets.bottom; - int height = 0; - int runHeight = tabAreaInsets.top + insets.top; - int fontHeight = fm.getHeight(); - int left = insets.left + tabAreaInsets.left; - for (int i = 0; i < tabCount; i++) - { - height = calculateTabHeight(tabPlacement, i, fontHeight); - - // The proper instances should exists because - // assureRectsCreated() was being run already. - rects[i].setBounds(left, runHeight, maxWidth, height); - runHeight += height; - } - tabAreaRect.width = maxTabWidth + tabAreaInsets.left - + tabAreaInsets.right; - tabAreaRect.height = tabPane.getHeight() - insets.top - - insets.bottom; - tabAreaRect.y = insets.top; - contentRect.width = tabPane.getWidth() - insets.left - insets.right - - tabAreaRect.width; - contentRect.height = tabAreaRect.height; - contentRect.y = insets.top; - if (tabPlacement == SwingConstants.LEFT) - { - tabAreaRect.x = insets.left; - contentRect.x = tabAreaRect.x + tabAreaRect.width; - } - else - { - contentRect.x = insets.left; - tabAreaRect.x = contentRect.x + contentRect.width; - } - } - - // Unlike the behavior in the WRAP_TAB_LAYOUT the selected - // tab is not padded specially. - } - - /** - * This method is called when the JTabbedPane is laid out in - * SCROLL_TAB_LAYOUT. It finds the position for all components in the - * JTabbedPane. - * - * @param pane The JTabbedPane to be laid out. - */ - public void layoutContainer(Container pane) - { - super.layoutContainer(pane); - int tabCount = tabPane.getTabCount(); - if (tabCount == 0) - return; - int tabPlacement = tabPane.getTabPlacement(); - - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - if (tabAreaRect.x + tabAreaRect.width < rects[tabCount - 1].x - + rects[tabCount - 1].width) - { - Dimension incrDims = incrButton.getPreferredSize(); - Dimension decrDims = decrButton.getPreferredSize(); - - if (tabPlacement == SwingConstants.BOTTOM) - { - // Align scroll buttons with the bottom border of the tabbed - // pane's content area. - decrButton.setBounds(tabAreaRect.x + tabAreaRect.width - - incrDims.width - decrDims.width, - tabAreaRect.y, decrDims.width, - decrDims.height); - incrButton.setBounds(tabAreaRect.x + tabAreaRect.width - - incrDims.width, tabAreaRect.y, - incrDims.width, incrDims.height); - } - else - { - // Align scroll buttons with the top border of the tabbed - // pane's content area. - decrButton.setBounds(tabAreaRect.x + tabAreaRect.width - - incrDims.width - decrDims.width, - tabAreaRect.y + tabAreaRect.height - - decrDims.height, decrDims.width, - decrDims.height); - incrButton.setBounds(tabAreaRect.x + tabAreaRect.width - - incrDims.width, - tabAreaRect.y + tabAreaRect.height - - incrDims.height, - incrDims.width, incrDims.height); - } - - tabAreaRect.width -= decrDims.width + incrDims.width; - - updateButtons(); - - incrButton.setVisible(true); - decrButton.setVisible(true); - } - else - { - incrButton.setVisible(false); - decrButton.setVisible(false); - - currentScrollOffset = 0; - currentScrollLocation = 0; - } - } - - if (tabPlacement == SwingConstants.LEFT - || tabPlacement == SwingConstants.RIGHT) - { - if (tabAreaRect.y + tabAreaRect.height < rects[tabCount - 1].y - + rects[tabCount - 1].height) - { - Dimension incrDims = incrButton.getPreferredSize(); - Dimension decrDims = decrButton.getPreferredSize(); - - if (tabPlacement == SwingConstants.RIGHT) - { - // Align scroll buttons with the right border of the tabbed - // pane's content area. - decrButton.setBounds(tabAreaRect.x, - tabAreaRect.y + tabAreaRect.height - - incrDims.height - decrDims.height, - decrDims.width, decrDims.height); - incrButton.setBounds(tabAreaRect.x, - tabAreaRect.y + tabAreaRect.height - - incrDims.height, incrDims.width, - incrDims.height); - } - else - { - // Align scroll buttons with the left border of the tabbed - // pane's content area. - decrButton.setBounds(tabAreaRect.x + tabAreaRect.width - - decrDims.width, - tabAreaRect.y + tabAreaRect.height - - incrDims.height - decrDims.height, - decrDims.width, decrDims.height); - incrButton.setBounds(tabAreaRect.x + tabAreaRect.width - - incrDims.width, - tabAreaRect.y + tabAreaRect.height - - incrDims.height, incrDims.width, - incrDims.height); - } - - tabAreaRect.height -= decrDims.height + incrDims.height; - - incrButton.setVisible(true); - decrButton.setVisible(true); - } - else - { - incrButton.setVisible(false); - decrButton.setVisible(false); - - currentScrollOffset = 0; - currentScrollLocation = 0; - } - } - viewport.setBounds(tabAreaRect.x, tabAreaRect.y, tabAreaRect.width, - tabAreaRect.height); - - updateViewPosition(); - - viewport.repaint(); - } - } - - /** - * This class handles ChangeEvents from the JTabbedPane. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class TabSelectionHandler implements ChangeListener - { - /** - * This method is called whenever a ChangeEvent is fired from the - * JTabbedPane. - * - * @param e The ChangeEvent fired. - */ - public void stateChanged(ChangeEvent e) - { - selectedRun = getRunForTab(tabPane.getTabCount(), - tabPane.getSelectedIndex()); - - if (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT) - tabPane.revalidate(); - tabPane.repaint(); - } - } - - /** - * This helper class is a JPanel that fits inside the ScrollViewport. This - * panel's sole job is to paint the tab rectangles inside the viewport so - * that it's clipped correctly. - */ - private class ScrollingPanel extends JPanel - { - /** - * This is a private UI class for our panel. - */ - private class ScrollingPanelUI extends BasicPanelUI - { - /** - * This method overrides the default paint method. It paints the tab - * rectangles for the JTabbedPane in the panel. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - int placement = tabPane.getTabPlacement(); - g.setColor(highlight); - if (placement == SwingUtilities.TOP - || placement == SwingUtilities.BOTTOM) - g.fillRect(currentScrollOffset, 0, - tabAreaRect.width, tabAreaRect.height); - else - g.fillRect(0, currentScrollOffset, - tabAreaRect.width, tabAreaRect.height); - - paintTabArea(g, placement, tabPane.getSelectedIndex()); - } - } - - /** - * This method overrides the updateUI method. It makes the default UI for - * this ScrollingPanel to be a ScrollingPanelUI. - */ - public void updateUI() - { - setUI(new ScrollingPanelUI()); - } - } - - /** - * This is a helper class that paints the panel that paints tabs. This - * custom JViewport is used so that the tabs painted in the panel will be - * clipped. This class implements UIResource so tabs are not added when - * this objects of this class are added to the JTabbedPane. - */ - private class ScrollingViewport extends JViewport implements UIResource - { - // TODO: Maybe remove this inner class. - } - - /** - * This is a helper class that implements UIResource so it is not added as a - * tab when an object of this class is added to the JTabbedPane. - */ - private class ScrollingButton extends BasicArrowButton implements UIResource - { - /** - * Creates a ScrollingButton given the direction. - * - * @param dir The direction to point in. - */ - public ScrollingButton(int dir) - { - super(dir); - } - } - - /** The button that increments the current scroll location. - * This is package-private to avoid an accessor method. */ - transient ScrollingButton incrButton; - - /** The button that decrements the current scroll location. - * This is package-private to avoid an accessor method. */ - transient ScrollingButton decrButton; - - /** The viewport used to display the tabs. - * This is package-private to avoid an accessor method. */ - transient ScrollingViewport viewport; - - /** The panel inside the viewport that paints the tabs. - * This is package-private to avoid an accessor method. */ - transient ScrollingPanel panel; - - /** The starting visible tab in the run in SCROLL_TAB_MODE. - * This is package-private to avoid an accessor method. */ - transient int currentScrollLocation; - - transient int currentScrollOffset; - - /** A reusable rectangle. */ - protected Rectangle calcRect; - - /** An array of Rectangles keeping track of the tabs' area and position. */ - protected Rectangle[] rects; - - /** The insets around the content area. */ - protected Insets contentBorderInsets; - - /** The extra insets around the selected tab. */ - protected Insets selectedTabPadInsets; - - /** The insets around the tab area. */ - protected Insets tabAreaInsets; - - /** The insets around each and every tab. */ - protected Insets tabInsets; - - /** - * The outer bottom and right edge color for both the tab and content - * border. - */ - protected Color darkShadow; - - /** The color of the focus outline on the selected tab. */ - protected Color focus; - - /** FIXME: find a use for this. */ - protected Color highlight; - - /** The top and left edge color for both the tab and content border. */ - protected Color lightHighlight; - - /** The inner bottom and right edge color for the tab and content border. */ - protected Color shadow; - - /** The maximum tab height. */ - protected int maxTabHeight; - - /** The maximum tab width. */ - protected int maxTabWidth; - - /** The number of runs in the JTabbedPane. */ - protected int runCount; - - /** The index of the run that the selected index is in. */ - protected int selectedRun; - - /** The amount of space each run overlaps the previous by. */ - protected int tabRunOverlay; - - /** The gap between text and label */ - protected int textIconGap; - - /** This array keeps track of which tabs are in which run. - * <p>The value at index i denotes the index of the first tab in run i.</p> - * <p>If the value for any index (i > 0) is 0 then (i - 1) is the last - * run.</p> - */ - protected int[] tabRuns; - - /** - * Indicates if the layout of the tab runs is ok or not. This is package - * private to avoid a synthetic accessor method. - */ - boolean tabRunsDirty; - - /** - * This is the keystroke for moving down. - * - * @deprecated 1.3 - */ - protected KeyStroke downKey; - - /** - * This is the keystroke for moving left. - * - * @deprecated 1.3 - */ - protected KeyStroke leftKey; - - /** - * This is the keystroke for moving right. - * - * @deprecated 1.3 - */ - protected KeyStroke rightKey; - - /** - * This is the keystroke for moving up. - * - * @deprecated 1.3 - */ - protected KeyStroke upKey; - - /** The listener that listens for focus events. */ - protected FocusListener focusListener; - - /** The listener that listens for mouse events. */ - protected MouseListener mouseListener; - - /** The listener that listens for property change events. */ - protected PropertyChangeListener propertyChangeListener; - - /** The listener that listens for change events. */ - protected ChangeListener tabChangeListener; - - /** The tab pane that this UI paints. */ - protected JTabbedPane tabPane; - - /** The current layout manager for the tabPane. - * This is package-private to avoid an accessor method. */ - transient LayoutManager layoutManager; - - /** The rectangle that describes the tab area's position and size. - * This is package-private to avoid an accessor method. */ - transient Rectangle tabAreaRect; - - /** The rectangle that describes the content area's position and - * size. This is package-private to avoid an accessor method. */ - transient Rectangle contentRect; - - /** - * The index over which the mouse is currently moving. - */ - private int rolloverTab; - - /** - * Determines if tabs are painted opaque or not. This can be adjusted using - * the UIManager property 'TabbedPane.tabsOpaque'. - */ - private boolean tabsOpaque; - - /** - * The currently visible component. - */ - private Component visibleComponent; - - private Color selectedColor; - - private Rectangle tempTextRect = new Rectangle(); - - private Rectangle tempIconRect = new Rectangle(); - - /** - * Creates a new BasicTabbedPaneUI object. - */ - public BasicTabbedPaneUI() - { - super(); - rects = new Rectangle[0]; - tabRuns = new int[10]; - } - - /** - * This method creates a ScrollingButton that points in the appropriate - * direction for an increasing button. - * This is package-private to avoid an accessor method. - * - * @return The increase ScrollingButton. - */ - ScrollingButton createIncreaseButton() - { - if (incrButton == null) - incrButton = new ScrollingButton(SwingConstants.NORTH); - if (tabPane.getTabPlacement() == SwingConstants.TOP - || tabPane.getTabPlacement() == SwingConstants.BOTTOM) - incrButton.setDirection(SwingConstants.EAST); - else - incrButton.setDirection(SwingConstants.SOUTH); - return incrButton; - } - - /** - * This method creates a ScrollingButton that points in the appropriate - * direction for a decreasing button. - * This is package-private to avoid an accessor method. - * - * @return The decrease ScrollingButton. - */ - ScrollingButton createDecreaseButton() - { - if (decrButton == null) - decrButton = new ScrollingButton(SwingConstants.SOUTH); - if (tabPane.getTabPlacement() == SwingConstants.TOP - || tabPane.getTabPlacement() == SwingConstants.BOTTOM) - decrButton.setDirection(SwingConstants.WEST); - else - decrButton.setDirection(SwingConstants.NORTH); - return decrButton; - } - - /** - * This method finds the point to set the view position at given the index - * of a tab. The tab will be the first visible tab in the run. - * This is package-private to avoid an accessor method. - * - * @param index The index of the first visible tab. - * - * @return The position of the first visible tab. - */ - Point findPointForIndex(int index) - { - int tabPlacement = tabPane.getTabPlacement(); - int selectedIndex = tabPane.getSelectedIndex(); - Insets insets = getSelectedTabPadInsets(tabPlacement); - int w = 0; - int h = 0; - - if (tabPlacement == TOP || tabPlacement == BOTTOM) - { - if (index > 0) - { - w += rects[index - 1].x + rects[index - 1].width; - if (index > selectedIndex) - w -= insets.left + insets.right; - } - } - - else - { - if (index > 0) - { - h += rects[index - 1].y + rects[index - 1].height; - if (index > selectedIndex) - h -= insets.top + insets.bottom; - } - } - - Point p = new Point(w, h); - return p; - } - - /** TabbedPanes in scrolling mode should use this method to - * scroll properly to the tab given by the index argument. - * - * @param index The tab to scroll to. - * @param placement The tab's placement. - */ - final void scrollTab(int index, int placement) - { - int diff; - if (index >= 0 && tabPane.isEnabledAt(index)) - { - // If the user clicked on the last tab and that one was - // only partially visible shift the scroll offset to make - // it completely visible. - switch (placement) - { - case JTabbedPane.TOP: - case JTabbedPane.BOTTOM: - if ((diff = rects[index].x - + rects[index].width - - decrButton.getX() - currentScrollOffset) > 0) - currentScrollOffset += diff; - else if ((diff = rects[index].x - currentScrollOffset) < 0) - { - if (index == 0) - currentScrollOffset = 0; - else - currentScrollOffset += diff; - } - - currentScrollLocation = tabForCoordinate(tabPane, - currentScrollOffset, - rects[index].y); - break; - default: - if ((diff = rects[index].y + rects[index].height - - decrButton.getY() - currentScrollOffset) > 0) - currentScrollOffset += diff; - else if ((diff = rects[index].y - currentScrollOffset) < 0) - { - if (index == 0) - currentScrollOffset = 0; - else - currentScrollOffset += diff; - } - - currentScrollLocation = tabForCoordinate(tabPane, - rects[index].x, - currentScrollOffset); - } - - updateViewPosition(); - updateButtons(); - } - } - - /** Sets the enabled state of the increase and decrease button - * according to the current scrolling offset and tab pane width - * (or height in TOP/BOTTOM placement). - */ - final void updateButtons() - { - int tc = tabPane.getTabCount(); - - // The increase button should be enabled as long as the - // right/bottom border of the last tab is under the left/top - // border of the decrease button. - switch (tabPane.getTabPlacement()) - { - case JTabbedPane.BOTTOM: - case JTabbedPane.TOP: - incrButton.setEnabled(currentScrollLocation + 1 < tc - && rects[tc-1].x + rects[tc-1].width - - currentScrollOffset > decrButton.getX()); - break; - default: - incrButton.setEnabled(currentScrollLocation + 1 < tc - && rects[tc-1].y + rects[tc-1].height - - currentScrollOffset > decrButton.getY()); - } - - // The decrease button is enabled when the tab pane is scrolled in any way. - decrButton.setEnabled(currentScrollOffset > 0); - - } - - /** - * Updates the position of the scrolling viewport's view - * according to the current scroll offset. - */ - final void updateViewPosition() - { - Point p = viewport.getViewPosition(); - - // The unneeded coordinate must be set to zero - // in order to correctly handle placement changes. - switch (tabPane.getTabPlacement()) - { - case JTabbedPane.LEFT: - case JTabbedPane.RIGHT: - p.x = 0; - p.y = currentScrollOffset; - break; - default: - p.x = currentScrollOffset; - p.y = 0; - } - - viewport.setViewPosition(p); - } - - /** - * This method creates a new BasicTabbedPaneUI. - * - * @param c The JComponent to create a UI for. - * - * @return A new BasicTabbedPaneUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicTabbedPaneUI(); - } - - /** - * This method installs the UI for the given JComponent. - * - * @param c The JComponent to install the UI for. - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JTabbedPane) - { - tabPane = (JTabbedPane) c; - - installComponents(); - installDefaults(); - installListeners(); - installKeyboardActions(); - - layoutManager = createLayoutManager(); - tabPane.setLayout(layoutManager); - } - } - - /** - * This method uninstalls the UI for the given JComponent. - * - * @param c The JComponent to uninstall the UI for. - */ - public void uninstallUI(JComponent c) - { - layoutManager = null; - - uninstallKeyboardActions(); - uninstallListeners(); - uninstallDefaults(); - uninstallComponents(); - - tabPane = null; - } - - /** - * This method creates the appropriate layout manager for the JTabbedPane's - * current tab layout policy. If the tab layout policy is - * SCROLL_TAB_LAYOUT, then all the associated components that need to be - * created will be done so now. - * - * @return A layout manager given the tab layout policy. - */ - protected LayoutManager createLayoutManager() - { - if (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT) - return new TabbedPaneLayout(); - else - { - runCount = 1; - tabRuns[0] = 0; - - incrButton = createIncreaseButton(); - incrButton.addMouseListener(mouseListener); - - decrButton = createDecreaseButton(); - decrButton.addMouseListener(mouseListener); - decrButton.setEnabled(false); - - panel = new ScrollingPanel(); - panel.setSize(Integer.MAX_VALUE, Integer.MAX_VALUE); - panel.addMouseListener(mouseListener); - panel.addFocusListener(focusListener); - - viewport = new ScrollingViewport(); - viewport.setBackground(Color.LIGHT_GRAY); - viewport.setView(panel); - viewport.setLayout(null); - - tabPane.add(incrButton); - tabPane.add(decrButton); - tabPane.add(viewport); - - return new TabbedPaneScrollLayout(); - } - } - - /** - * This method installs components for this JTabbedPane. - */ - protected void installComponents() - { - // Nothing to be done. - } - - /** - * This method uninstalls components for this JTabbedPane. - */ - protected void uninstallComponents() - { - if (incrButton != null) - tabPane.remove(incrButton); - - if (decrButton != null) - tabPane.remove(decrButton); - - if (viewport != null) - tabPane.remove(viewport); - } - - /** - * This method installs defaults for the Look and Feel. - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(tabPane, "TabbedPane.background", - "TabbedPane.foreground", - "TabbedPane.font"); - tabPane.setOpaque(false); - - lightHighlight = UIManager.getColor("TabbedPane.highlight"); - highlight = UIManager.getColor("TabbedPane.light"); - - shadow = UIManager.getColor("TabbedPane.shadow"); - darkShadow = UIManager.getColor("TabbedPane.darkShadow"); - - focus = UIManager.getColor("TabbedPane.focus"); - - textIconGap = UIManager.getInt("TabbedPane.textIconGap"); - tabRunOverlay = UIManager.getInt("TabbedPane.tabRunOverlay"); - - tabInsets = UIManager.getInsets("TabbedPane.tabInsets"); - selectedTabPadInsets - = UIManager.getInsets("TabbedPane.selectedTabPadInsets"); - tabAreaInsets = UIManager.getInsets("TabbedPane.tabAreaInsets"); - contentBorderInsets - = UIManager.getInsets("TabbedPane.contentBorderInsets"); - tabsOpaque = UIManager.getBoolean("TabbedPane.tabsOpaque"); - - // Although 'TabbedPane.contentAreaColor' is not defined in the defaults - // of BasicLookAndFeel it is used by this class. - selectedColor = UIManager.getColor("TabbedPane.contentAreaColor"); - if (selectedColor == null) - selectedColor = UIManager.getColor("control"); - - calcRect = new Rectangle(); - tabRuns = new int[10]; - tabAreaRect = new Rectangle(); - contentRect = new Rectangle(); - } - - /** - * This method uninstalls defaults for the Look and Feel. - */ - protected void uninstallDefaults() - { - calcRect = null; - tabAreaRect = null; - contentRect = null; - tabRuns = null; - - tempIconRect = null; - tempTextRect = null; - - contentBorderInsets = null; - tabAreaInsets = null; - selectedTabPadInsets = null; - tabInsets = null; - - focus = null; - darkShadow = null; - shadow = null; - lightHighlight = null; - highlight = null; - - selectedColor = null; - } - - /** - * This method creates and installs the listeners for this UI. - */ - protected void installListeners() - { - mouseListener = createMouseListener(); - tabChangeListener = createChangeListener(); - propertyChangeListener = createPropertyChangeListener(); - focusListener = createFocusListener(); - - tabPane.addMouseListener(mouseListener); - tabPane.addChangeListener(tabChangeListener); - tabPane.addPropertyChangeListener(propertyChangeListener); - tabPane.addFocusListener(focusListener); - } - - /** - * This method removes and nulls the listeners for this UI. - */ - protected void uninstallListeners() - { - tabPane.removeFocusListener(focusListener); - tabPane.removePropertyChangeListener(propertyChangeListener); - tabPane.removeChangeListener(tabChangeListener); - tabPane.removeMouseListener(mouseListener); - - if (incrButton != null) - incrButton.removeMouseListener(mouseListener); - - if (decrButton != null) - decrButton.removeMouseListener(mouseListener); - - if (panel != null) - { - panel.removeMouseListener(mouseListener); - panel.removeFocusListener(focusListener); - } - - focusListener = null; - propertyChangeListener = null; - tabChangeListener = null; - mouseListener = null; - } - - /** - * This method creates a new MouseListener. - * - * @return A new MouseListener. - */ - protected MouseListener createMouseListener() - { - return new MouseHandler(); - } - - /** - * This method creates a new FocusListener. - * - * @return A new FocusListener. - */ - protected FocusListener createFocusListener() - { - return new FocusHandler(); - } - - /** - * This method creates a new ChangeListener. - * - * @return A new ChangeListener. - */ - protected ChangeListener createChangeListener() - { - return new TabSelectionHandler(); - } - - /** - * This method creates a new PropertyChangeListener. - * - * @return A new PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * This method installs keyboard actions for the JTabbedPane. - */ - protected void installKeyboardActions() - { - InputMap keyMap = (InputMap) UIManager.get("TabbedPane.focusInputMap"); - SwingUtilities.replaceUIInputMap(tabPane, JComponent.WHEN_FOCUSED, keyMap); - - keyMap = (InputMap) UIManager.get("TabbedPane.ancestorInputMap"); - SwingUtilities - .replaceUIInputMap(tabPane, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, - keyMap); - - ActionMap map = getActionMap(); - SwingUtilities.replaceUIActionMap(tabPane, map); - } - - /** - * This method uninstalls keyboard actions for the JTabbedPane. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIActionMap(tabPane, null); - SwingUtilities.replaceUIInputMap(tabPane, JComponent.WHEN_FOCUSED, null); - SwingUtilities - .replaceUIInputMap(tabPane, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, - null); - } - - /** - * This method returns the minimum size of the JTabbedPane. - * - * @param c The JComponent to find a size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return layoutManager.minimumLayoutSize(tabPane); - } - - /** - * This method returns the maximum size of the JTabbedPane. - * - * @param c The JComponent to find a size for. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE); - } - - /** - * This method paints the JTabbedPane. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - if (!tabPane.isValid()) - tabPane.validate(); - - if (tabPane.getTabCount() == 0) - return; - - int index = tabPane.getSelectedIndex(); - if (index < 0) - index = 0; - - int tabPlacement = tabPane.getTabPlacement(); - - // Paint the tab area only in WRAP_TAB_LAYOUT Mode from this method - // because it is done through the ScrollingViewport.paint() method - // for the SCROLL_TAB_LAYOUT mode. - if (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT) - { - g.setColor(highlight); - g.fillRect(tabAreaRect.x, tabAreaRect.y, - tabAreaRect.width, tabAreaRect.height); - paintTabArea(g, tabPlacement, index); - } - - paintContentBorder(g, tabPlacement, index); - } - - /** - * This method paints the tab area. This includes painting the rectangles - * that make up the tabs. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedIndex The selected index. - */ - protected void paintTabArea(Graphics g, int tabPlacement, int selectedIndex) - { - // Please note: the ordering of the painting is important. - // we WANT to paint the outermost run first and then work our way in. - - // The following drawing code works for both tab layouts. - int tabCount = tabPane.getTabCount(); - - for (int i = runCount - 1; i >= 0; --i) - { - int start = tabRuns[i]; - int next; - if (i == runCount - 1) - next = tabRuns[0]; - else - next = tabRuns[i + 1]; - int end = next != 0 ? next - 1 : tabCount - 1; - for (int j = start; j <= end; ++j) - { - if (j != selectedIndex) - { - paintTab(g, tabPlacement, rects, j, - tempIconRect, tempTextRect); - } - } - } - - // Paint selected tab in front of every other tab. - if (selectedIndex >= 0) - paintTab(g, tabPlacement, rects, selectedIndex, - tempIconRect, tempTextRect); - } - - /** - * This method paints an individual tab. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param rects The array of rectangles that keep the size and position of - * the tabs. - * @param tabIndex The tab index to paint. - * @param iconRect The rectangle to use for the icon. - * @param textRect The rectangle to use for the text. - */ - protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, - int tabIndex, Rectangle iconRect, Rectangle textRect) - { - Rectangle rect = rects[tabIndex]; - boolean isSelected = tabIndex == tabPane.getSelectedIndex(); - // Paint background if necessary. - if (tabsOpaque || tabPane.isOpaque()) - { - paintTabBackground(g, tabPlacement, tabIndex, rect.x, rect.y, - rect.width, rect.height, isSelected); - } - - // Paint border. - paintTabBorder(g, tabPlacement, tabIndex, rect.x, rect.y, rect.width, - rect.height, isSelected); - - // Layout label. - FontMetrics fm = getFontMetrics(); - Icon icon = getIconForTab(tabIndex); - String title = tabPane.getTitleAt(tabIndex); - layoutLabel(tabPlacement, fm, tabIndex, title, icon, rect, iconRect, - textRect, isSelected); - // Paint the text. - paintText(g, tabPlacement, tabPane.getFont(), fm, tabIndex, title, - textRect, isSelected); - - // Paint icon if necessary. - paintIcon(g, tabPlacement, tabIndex, icon, iconRect, isSelected); - - // Paint focus indicator. - paintFocusIndicator(g, tabPlacement, rects, tabIndex, iconRect, textRect, - isSelected); - } - - /** - * This method lays out the tab and finds the location to paint the icon - * and text. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param metrics The font metrics for the font to paint with. - * @param tabIndex The tab index to paint. - * @param title The string painted. - * @param icon The icon painted. - * @param tabRect The tab bounds. - * @param iconRect The calculated icon bounds. - * @param textRect The calculated text bounds. - * @param isSelected Whether this tab is selected. - */ - protected void layoutLabel(int tabPlacement, FontMetrics metrics, - int tabIndex, String title, Icon icon, - Rectangle tabRect, Rectangle iconRect, - Rectangle textRect, boolean isSelected) - { - // Reset the icon and text rectangles, as the result is not specified - // when the locations are not (0,0). - textRect.x = 0; - textRect.y = 0; - textRect.width = 0; - textRect.height = 0; - iconRect.x = 0; - iconRect.y = 0; - iconRect.width = 0; - iconRect.height = 0; - SwingUtilities.layoutCompoundLabel(tabPane, metrics, title, icon, - SwingConstants.CENTER, - SwingConstants.CENTER, - SwingConstants.CENTER, - SwingConstants.RIGHT, tabRect, - iconRect, textRect, textIconGap); - - int shiftX = getTabLabelShiftX(tabPlacement, tabIndex, isSelected); - int shiftY = getTabLabelShiftY(tabPlacement, tabIndex, isSelected); - - iconRect.x += shiftX; - iconRect.y += shiftY; - - textRect.x += shiftX; - textRect.y += shiftY; - } - - /** - * This method paints the icon. - * - * @param g The Graphics object to paint. - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index to paint. - * @param icon The icon to paint. - * @param iconRect The bounds of the icon. - * @param isSelected Whether this tab is selected. - */ - protected void paintIcon(Graphics g, int tabPlacement, int tabIndex, - Icon icon, Rectangle iconRect, boolean isSelected) - { - if (icon != null) - icon.paintIcon(tabPane, g, iconRect.x, iconRect.y); - } - - /** - * This method paints the text for the given tab. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param font The font to paint with. - * @param metrics The fontmetrics of the given font. - * @param tabIndex The tab index. - * @param title The string to paint. - * @param textRect The bounds of the string. - * @param isSelected Whether this tab is selected. - */ - protected void paintText(Graphics g, int tabPlacement, Font font, - FontMetrics metrics, int tabIndex, String title, - Rectangle textRect, boolean isSelected) - { - g.setFont(font); - View textView = getTextViewForTab(tabIndex); - if (textView != null) - { - textView.paint(g, textRect); - return; - } - - int ascent = metrics.getAscent(); - - int mnemIndex = tabPane.getDisplayedMnemonicIndexAt(tabIndex); - if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) - { - Color fg = tabPane.getForegroundAt(tabIndex); - if (isSelected && (fg instanceof UIResource)) - { - Color selectionForeground = - UIManager.getColor("TabbedPane.selectionForeground"); - if (selectionForeground != null) - fg = selectionForeground; - } - g.setColor(fg); - - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex, - textRect.x, - textRect.y + ascent); - else - g.drawString(title, textRect.x, textRect.y + ascent); - } - else - { - Color bg = tabPane.getBackgroundAt(tabIndex); - g.setColor(bg.brighter()); - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex, - textRect.x, textRect.y - + ascent); - else - g.drawString(title, textRect.x, textRect.y + ascent); - - g.setColor(bg.darker()); - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, title, mnemIndex, - textRect.x + 1, - textRect.y + 1 - + ascent); - else - g.drawString(title, textRect.x + 1, textRect.y + 1 + ascent); - } - } - - /** - * This method returns how much the label for the tab should shift in the X - * direction. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index being painted. - * @param isSelected Whether this tab is selected. - * - * @return The amount the label should shift by in the X direction. - */ - protected int getTabLabelShiftX(int tabPlacement, int tabIndex, - boolean isSelected) - { - switch (tabPlacement) - { - default: - case SwingUtilities.TOP: - case SwingUtilities.BOTTOM: - return 1; - case SwingUtilities.LEFT: - return (isSelected) ? -1 : 1; - case SwingUtilities.RIGHT: - return (isSelected) ? 1 : -1; - } - } - - /** - * This method returns how much the label for the tab should shift in the Y - * direction. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index being painted. - * @param isSelected Whether this tab is selected. - * - * @return The amount the label should shift by in the Y direction. - */ - protected int getTabLabelShiftY(int tabPlacement, int tabIndex, - boolean isSelected) - { - switch (tabPlacement) - { - default: - case SwingUtilities.TOP: - return (isSelected) ? -1 : 1; - case SwingUtilities.BOTTOM: - return (isSelected) ? 1 : -1; - case SwingUtilities.LEFT: - case SwingUtilities.RIGHT: - return 0; - } - } - - /** - * This method paints the focus rectangle around the selected tab. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param rects The array of rectangles keeping track of size and position. - * @param tabIndex The tab index. - * @param iconRect The icon bounds. - * @param textRect The text bounds. - * @param isSelected Whether this tab is selected. - */ - protected void paintFocusIndicator(Graphics g, int tabPlacement, - Rectangle[] rects, int tabIndex, - Rectangle iconRect, Rectangle textRect, - boolean isSelected) - { - if (tabPane.hasFocus() && isSelected) - { - Rectangle rect = rects[tabIndex]; - // The focus rectangle. - int x; - int y; - int w; - int h; - - g.setColor(focus); - switch (tabPlacement) - { - case LEFT: - x = rect.x + 3; - y = rect.y + 3; - w = rect.width - 5; - h = rect.height - 6; - break; - case RIGHT: - x = rect.x + 2; - y = rect.y + 3; - w = rect.width - 6; - h = rect.height - 5; - break; - case BOTTOM: - x = rect.x + 3; - y = rect.y + 2; - w = rect.width - 6; - h = rect.height - 5; - break; - case TOP: - default: - x = rect.x + 3; - y = rect.y + 3; - w = rect.width - 6; - h = rect.height - 5; - } - - BasicGraphicsUtils.drawDashedRect(g, x, y, w, h); - } - } - - /** - * This method paints the border for an individual tab. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index. - * @param x The x position of the tab. - * @param y The y position of the tab. - * @param w The width of the tab. - * @param h The height of the tab. - * @param isSelected Whether the tab is selected. - */ - protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex, - int x, int y, int w, int h, boolean isSelected) - { - Color saved = g.getColor(); - - switch (tabPlacement) - { - case SwingConstants.TOP: - g.setColor(shadow); - // Inner right line. - g.drawLine(x + w - 2, y + 2, x + w - 2, y + h); - - g.setColor(darkShadow); - // Outer right line. - g.drawLine(x + w - 1, y + 2, x + w - 1, y + h); - - // Upper right corner. - g.drawLine(x + w - 2, y + 1, x + w - 1, y + 2); - - g.setColor(lightHighlight); - - // Left line. - g.drawLine(x, y + 3, x, y + h); - - // Upper line. - g.drawLine(x + 3, y, x + w - 3, y); - - // Upper left corner. - g.drawLine(x, y + 2, x + 2, y); - - break; - case SwingConstants.LEFT: - g.setColor(lightHighlight); - // Top line. - g.drawLine(x + 3, y, x + w - 1, y); - - // Top left border. - g.drawLine(x + 2, y, x, y + 2); - - // Left line. - g.drawLine(x, y + 3, x, y + h - 4); - - // Bottom left corner. - g.drawLine(x, y + h - 3, x + 1, y + h - 2); - - g.setColor(darkShadow); - // Outer bottom line. - g.drawLine(x + 2, y + h - 1, x + w - 1, y + h - 1); - - g.setColor(shadow); - // Inner bottom line. - g.drawLine(x + 2, y + h - 2, x + w - 1, y + h - 2); - - break; - case SwingConstants.BOTTOM: - g.setColor(shadow); - // Inner right line. - g.drawLine(x + w - 2, y, x + w - 2, y + h - 2); - - // Inner bottom line. - g.drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); - - g.setColor(darkShadow); - // Outer right line. - g.drawLine(x + w - 1, y, x + w - 1, y + h - 3); - - // Bottom right corner. - g.drawLine(x + w - 1, y + h - 2, x + w - 3, y + h); - - // Bottom line. - g.drawLine(x + 2, y + h, x + w - 4, y + h); - - g.setColor(lightHighlight); - // Left line. - g.drawLine(x, y, x, y + h - 3); - - // Bottom left corner. - g.drawLine(x, y + h - 2, x + 1, y + h - 1); - break; - case SwingConstants.RIGHT: - g.setColor(lightHighlight); - // Top line. - g.drawLine(x, y, x + w - 3, y); - - g.setColor(darkShadow); - // Top right corner. - g.drawLine(x + w - 2, y + 1, x + w - 1, y + 2); - - // Outer right line. - g.drawLine(x + w - 1, y + 3, x + w - 1, y + h - 3); - - // Bottom right corner. - g.drawLine(x + w - 2, y + h - 2, x + w - 3, y + h - 1); - - // Bottom line. - g.drawLine(x, y + h - 1, x + w - 4, y + h - 1); - - g.setColor(shadow); - - // Inner right line. - g.drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); - - // Inner bottom line. - g.drawLine(x, y + h - 2, x + w - 3, y + h - 2); - - break; - } - - g.setColor(saved); - } - - /** - * This method paints the background for an individual tab. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index. - * @param x The x position of the tab. - * @param y The y position of the tab. - * @param w The width of the tab. - * @param h The height of the tab. - * @param isSelected Whether the tab is selected. - */ - protected void paintTabBackground(Graphics g, int tabPlacement, - int tabIndex, int x, int y, int w, int h, - boolean isSelected) - { - Color saved = g.getColor(); - - if (isSelected) - g.setColor(selectedColor); - else - { - Color bg = tabPane.getBackgroundAt(tabIndex); - if (bg == null) - bg = Color.LIGHT_GRAY; - g.setColor(bg); - } - - switch (tabPlacement) - { - case SwingConstants.TOP: - g.fillRect(x + 1, y + 1, w - 1, h - 1); - break; - case SwingConstants.BOTTOM: - g.fillRect(x, y, w - 1, h - 1); - break; - case SwingConstants.LEFT: - g.fillRect(x + 1, y + 1, w - 1, h - 2); - break; - case SwingConstants.RIGHT: - g.fillRect(x, y + 1, w - 1, h - 2); - break; - } - - g.setColor(saved); - } - - /** - * This method paints the border around the content area. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedIndex The index of the selected tab. - */ - protected void paintContentBorder(Graphics g, int tabPlacement, - int selectedIndex) - { - int width = tabPane.getWidth(); - int height = tabPane.getHeight(); - Insets insets = tabPane.getInsets(); - - // Calculate coordinates of content area. - int x = insets.left; - int y = insets.top; - int w = width - insets.left - insets.right; - int h = height - insets.top - insets.bottom; - - switch (tabPlacement) - { - case LEFT: - x += calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth); - w -= x - insets.left; - break; - case RIGHT: - w -= calculateTabAreaWidth(tabPlacement, runCount, maxTabWidth); - break; - case BOTTOM: - h -= calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight); - break; - case TOP: - default: - y += calculateTabAreaHeight(tabPlacement, runCount, maxTabHeight); - h -= y - insets.top; - } - - // Fill background if necessary. - if (tabPane.isOpaque()) - { - Color bg = UIManager.getColor("TabbedPane.contentAreaColor"); - g.setColor(bg); - g.fillRect(x, y, w, h); - } - - // Paint border. - paintContentBorderTopEdge(g, tabPlacement, selectedIndex, x, y, w, h); - paintContentBorderLeftEdge(g, tabPlacement, selectedIndex, x, y, w, h); - paintContentBorderBottomEdge(g, tabPlacement, selectedIndex, x, y, w, h); - paintContentBorderRightEdge(g, tabPlacement, selectedIndex, x, y, w, h); - } - - /** - * This method paints the top edge of the content border. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedIndex The selected tab index. - * @param x The x coordinate for the content area. - * @param y The y coordinate for the content area. - * @param w The width of the content area. - * @param h The height of the content area. - */ - protected void paintContentBorderTopEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - Color saved = g.getColor(); - g.setColor(lightHighlight); - - int startgap = rects[selectedIndex].x - currentScrollOffset; - int endgap = rects[selectedIndex].x + rects[selectedIndex].width - - currentScrollOffset; - - // Paint the highlight line with a gap if the tabs are at the top - // and the selected tab is inside the visible area. - if (tabPlacement == SwingConstants.TOP && startgap >= 0) - { - g.drawLine(x, y, startgap, y); - g.drawLine(endgap, y, x + w - 1, y); - - g.setColor(selectedColor); - g.drawLine(startgap, y, endgap - 1, y); - } - else - g.drawLine(x, y, x + w, y); - - g.setColor(selectedColor); - g.drawLine(x, y + 1, x + w - 1, y + 1); - g.drawLine(x, y + 2, x + w - 1, y + 2); - - g.setColor(saved); - } - - /** - * This method paints the left edge of the content border. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedIndex The selected tab index. - * @param x The x coordinate for the content area. - * @param y The y coordinate for the content area. - * @param w The width of the content area. - * @param h The height of the content area. - */ - protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - Color saved = g.getColor(); - g.setColor(lightHighlight); - - int startgap = rects[selectedIndex].y - currentScrollOffset; - int endgap = rects[selectedIndex].y + rects[selectedIndex].height - - currentScrollOffset; - - if (tabPlacement == SwingConstants.LEFT && startgap >= 0) - { - g.drawLine(x, y, x, startgap); - g.drawLine(x, endgap, x, y + h - 1); - - g.setColor(selectedColor); - g.drawLine(x, startgap, x, endgap - 1); - } - else - g.drawLine(x, y, x, y + h - 1); - - g.setColor(selectedColor); - g.drawLine(x + 1, y + 1, x + 1, y + h - 4); - - g.setColor(saved); - } - - /** - * This method paints the bottom edge of the content border. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedIndex The selected tab index. - * @param x The x coordinate for the content area. - * @param y The y coordinate for the content area. - * @param w The width of the content area. - * @param h The height of the content area. - */ - protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - Color saved = g.getColor(); - - int startgap = rects[selectedIndex].x - currentScrollOffset; - int endgap = rects[selectedIndex].x + rects[selectedIndex].width - - currentScrollOffset; - - if (tabPlacement == SwingConstants.BOTTOM && startgap >= 0) - { - g.setColor(shadow); - g.drawLine(x + 1, y + h - 2, startgap, y + h - 2); - g.drawLine(endgap, y + h - 2, x + w - 2, y + h - 2); - - g.setColor(darkShadow); - g.drawLine(x, y + h - 1, startgap , y + h - 1); - g.drawLine(endgap, y + h - 1, x + w - 1, y + h - 1); - - g.setColor(selectedColor); - g.drawLine(startgap, y + h - 1, endgap - 1, y + h - 1); - g.drawLine(startgap, y + h - 2, endgap - 1, y + h - 2); - } - else - { - g.setColor(shadow); - g.drawLine(x + 1, y + h - 2, x + w - 1, y + h - 2); - g.setColor(darkShadow); - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - } - - g.setColor(selectedColor); - g.drawLine(x + 1, y + h - 3, x + w - 2, y + h - 3); - - g.setColor(saved); - } - - /** - * This method paints the right edge of the content border. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param selectedIndex The selected tab index. - * @param x The x coordinate for the content area. - * @param y The y coordinate for the content area. - * @param w The width of the content area. - * @param h The height of the content area. - */ - protected void paintContentBorderRightEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - Color saved = g.getColor(); - int startgap = rects[selectedIndex].y - currentScrollOffset; - int endgap = rects[selectedIndex].y + rects[selectedIndex].height - - currentScrollOffset; - - if (tabPlacement == SwingConstants.RIGHT && startgap >= 0) - { - g.setColor(shadow); - g.drawLine(x + w - 2, y + 1, x + w - 2, startgap); - g.drawLine(x + w - 2, endgap, x + w - 2, y + h - 2); - - g.setColor(darkShadow); - g.drawLine(x + w - 1, y, x + w - 1, startgap); - g.drawLine(x + w - 1, endgap, x + w - 1, y + h - 2); - - g.setColor(selectedColor); - g.drawLine(x + w - 2, startgap, x + w - 2, endgap - 1); - g.drawLine(x + w - 1, startgap, x + w - 1, endgap - 1); - } - else - { - g.setColor(shadow); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + h - 2); - g.setColor(darkShadow); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 2); - } - - g.setColor(selectedColor); - g.drawLine(x + w - 3, y + 1, x + w - 3, y + h - 4); - - g.setColor(saved); - } - - /** - * <p>This method returns the bounds of a tab for the given index - * and shifts it by the current scrolling offset if the tabbed - * pane is in scrolling tab layout mode.</p> - * - * <p>Subclassses should retrievs a tab's bounds by this method - * if they want to find out whether the tab is currently visible.</p> - * - * @param pane The JTabbedPane. - * @param i The index to look for. - * - * @return The bounds of the tab with the given index. - */ - public Rectangle getTabBounds(JTabbedPane pane, int i) - { - // Need to re-layout container if tab does not exist. - if (i >= rects.length) - layoutManager.layoutContainer(pane); - - // Properly shift coordinates if scrolling has taken - // place. - if (pane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) - { - Rectangle r = new Rectangle(rects[i]); - - switch(pane.getTabPlacement()) - { - case SwingConstants.TOP: - case SwingConstants.BOTTOM: - r.x -= currentScrollOffset; - break; - default: - r.y -= currentScrollOffset; - } - - return r; - } - - return rects[i]; - } - - /** - * This method returns the number of runs. - * - * @param pane The JTabbedPane. - * - * @return The number of runs. - */ - public int getTabRunCount(JTabbedPane pane) - { - return runCount; - } - - /** - * This method returns the tab index given a coordinate. - * - * @param pane The JTabbedPane. - * @param x The x coordinate. - * @param y The y coordinate. - * - * @return The tab index that the coordinate lands in. - */ - public int tabForCoordinate(JTabbedPane pane, int x, int y) - { - // Note: This code is tab layout mode agnostic. - if (! tabPane.isValid()) - tabPane.validate(); - - int tabCount = tabPane.getTabCount(); - - // If the user clicked outside of any tab rect the - // selection should not change. - int index = tabPane.getSelectedIndex(); - for (int i = 0; i < tabCount; ++i) - { - if (rects[i].contains(x, y)) - { - index = i; - break; - } - } - - return index; - } - - /** - * <p>This method returns the tab bounds in the given rectangle.</p> - * - * <p>The returned rectangle will be shifted by the current scroll - * offset if the tabbed pane is in scrolling tab layout mode.</p>. - * - * @param tabIndex The index to get bounds for. - * @param dest The rectangle to store bounds in. - * - * @return The rectangle passed in. - */ - protected Rectangle getTabBounds(int tabIndex, Rectangle dest) - { - dest.setBounds(getTabBounds(tabPane, tabIndex)); - return dest; - } - - /** - * This method returns the component that is shown in the content area. - * - * @return The component that is shown in the content area. - */ - protected Component getVisibleComponent() - { - return visibleComponent; - } - - /** - * This method sets the visible component. - * - * @param component The component to be set visible. - */ - protected void setVisibleComponent(Component component) - { - // Make old component invisible. - if (visibleComponent != null && visibleComponent != component - && visibleComponent.getParent() == tabPane) - { - visibleComponent.setVisible(false); - } - - // Make new component visible. - if (component != null && ! component.isVisible()) - { - component.setVisible(true); - } - visibleComponent = component; - } - - /** - * This method assures that enough rectangles are created given the - * tabCount. The old array is copied to the new one. - * - * @param tabCount The number of tabs. - */ - protected void assureRectsCreated(int tabCount) - { - if (rects.length < tabCount) - { - Rectangle[] old = rects; - rects = new Rectangle[tabCount]; - System.arraycopy(old, 0, rects, 0, old.length); - for (int i = old.length; i < rects.length; i++) - rects[i] = new Rectangle(); - } - } - - /** - * This method expands the tabRuns array to give it more room. The old array - * is copied to the new one. - */ - protected void expandTabRunsArray() - { - // This method adds another 10 index positions to the tabRuns array. - if (tabRuns == null) - tabRuns = new int[10]; - else - { - int[] newRuns = new int[tabRuns.length + 10]; - System.arraycopy(tabRuns, 0, newRuns, 0, tabRuns.length); - tabRuns = newRuns; - } - } - - /** - * This method returns which run a particular tab belongs to. - * - * @param tabCount The number of tabs. - * @param tabIndex The tab to find. - * - * @return The tabRuns index that it belongs to. - */ - protected int getRunForTab(int tabCount, int tabIndex) - { - if (runCount == 1 && tabIndex < tabCount && tabIndex >= 0) - return 0; - for (int i = 0; i < runCount; i++) - { - int first = lastTabInRun(tabCount, getPreviousTabRun(i)) + 1; - if (first == tabCount) - first = 0; - int last = lastTabInRun(tabCount, i); - if (last >= tabIndex && first <= tabIndex) - return i; - } - return -1; - } - - /** - * This method returns the index of the last tab in a run. - * - * @param tabCount The number of tabs. - * @param run The run to check. - * - * @return The last tab in the given run. - */ - protected int lastTabInRun(int tabCount, int run) - { - int lastTab; - if (runCount == 1) - lastTab = tabCount - 1; - else - { - int nextRun; - if (run == runCount - 1) - nextRun = 0; - else - nextRun = run + 1; - - if (tabRuns[nextRun] == 0) - lastTab = tabCount - 1; - else - lastTab = tabRuns[nextRun] - 1; - } - return lastTab; - } - - /** - * This method returns the tab run overlay. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return The tab run overlay. - */ - protected int getTabRunOverlay(int tabPlacement) - { - return tabRunOverlay; - } - - /** - * This method returns the tab run indent. It is used in WRAP_TAB_LAYOUT and - * makes each tab run start indented by a certain amount. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param run The run to get indent for. - * - * @return The amount a run should be indented. - */ - protected int getTabRunIndent(int tabPlacement, int run) - { - return 0; - } - - /** - * This method returns whether a tab run should be padded. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param run The run to check. - * - * @return Whether the given run should be padded. - */ - protected boolean shouldPadTabRun(int tabPlacement, int run) - { - return true; - } - - /** - * This method returns whether the tab runs should be rotated. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return Whether runs should be rotated. - */ - protected boolean shouldRotateTabRuns(int tabPlacement) - { - return true; - } - - /** - * This method returns an icon for the tab. If the tab is disabled, it - * should return the disabledIcon. If it is enabled, then it should return - * the default icon. - * - * @param tabIndex The tab index to get an icon for. - * - * @return The icon for the tab index. - */ - protected Icon getIconForTab(int tabIndex) - { - if (tabPane.isEnabledAt(tabIndex)) - return tabPane.getIconAt(tabIndex); - else - return tabPane.getDisabledIconAt(tabIndex); - } - - /** - * This method returns a view that can paint the text for the label. - * - * @param tabIndex The tab index to get a view for. - * - * @return The view for the tab index. - */ - protected View getTextViewForTab(int tabIndex) - { - // FIXME: When the label contains HTML this should return something - // non-null. - return null; - } - - /** - * This method returns the tab height, including insets, for the given index - * and fontheight. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The index of the tab to calculate. - * @param fontHeight The font height. - * - * @return This tab's height. - */ - protected int calculateTabHeight(int tabPlacement, int tabIndex, - int fontHeight) - { - // FIXME: Handle HTML by using the view (see getTextViewForTab). - - int height = fontHeight; - Icon icon = getIconForTab(tabIndex); - Insets tabInsets = getTabInsets(tabPlacement, tabIndex); - if (icon != null) - height = Math.max(height, icon.getIconHeight()); - height += tabInsets.top + tabInsets.bottom + 2; - return height; - } - - /** - * This method returns the max tab height. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return The maximum tab height. - */ - protected int calculateMaxTabHeight(int tabPlacement) - { - maxTabHeight = 0; - - FontMetrics fm = getFontMetrics(); - int fontHeight = fm.getHeight(); - - for (int i = 0; i < tabPane.getTabCount(); i++) - maxTabHeight = Math.max(calculateTabHeight(tabPlacement, i, fontHeight), - maxTabHeight); - - return maxTabHeight; - } - - /** - * This method calculates the tab width, including insets, for the given tab - * index and font metrics. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index to calculate for. - * @param metrics The font's metrics. - * - * @return The tab width for the given index. - */ - protected int calculateTabWidth(int tabPlacement, int tabIndex, - FontMetrics metrics) - { - Icon icon = getIconForTab(tabIndex); - Insets insets = getTabInsets(tabPlacement, tabIndex); - - int width = insets.bottom + insets.right + 3; - if (icon != null) - { - width += icon.getIconWidth() + textIconGap; - } - - View v = getTextViewForTab(tabIndex); - if (v != null) - width += v.getPreferredSpan(View.X_AXIS); - else - { - String label = tabPane.getTitleAt(tabIndex); - width += metrics.stringWidth(label); - } - return width; - } - - /** - * This method calculates the max tab width. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return The maximum tab width. - */ - protected int calculateMaxTabWidth(int tabPlacement) - { - maxTabWidth = 0; - - FontMetrics fm = getFontMetrics(); - - for (int i = 0; i < tabPane.getTabCount(); i++) - maxTabWidth = Math.max(calculateTabWidth(tabPlacement, i, fm), - maxTabWidth); - - return maxTabWidth; - } - - /** - * This method calculates the tab area height, including insets, for the - * given amount of runs and tab height. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param horizRunCount The number of runs. - * @param maxTabHeight The max tab height. - * - * @return The tab area height. - */ - protected int calculateTabAreaHeight(int tabPlacement, int horizRunCount, - int maxTabHeight) - { - Insets insets = getTabAreaInsets(tabPlacement); - int tabAreaHeight = horizRunCount * maxTabHeight - - (horizRunCount - 1) - * getTabRunOverlay(tabPlacement); - - tabAreaHeight += insets.top + insets.bottom; - - return tabAreaHeight; - } - - /** - * This method calculates the tab area width, including insets, for the - * given amount of runs and tab width. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param vertRunCount The number of runs. - * @param maxTabWidth The max tab width. - * - * @return The tab area width. - */ - protected int calculateTabAreaWidth(int tabPlacement, int vertRunCount, - int maxTabWidth) - { - Insets insets = getTabAreaInsets(tabPlacement); - int tabAreaWidth = vertRunCount * maxTabWidth - - (vertRunCount - 1) - * getTabRunOverlay(tabPlacement); - - tabAreaWidth += insets.left + insets.right; - - return tabAreaWidth; - } - - /** - * This method returns the tab insets appropriately rotated. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab index. - * - * @return The tab insets for the given index. - */ - protected Insets getTabInsets(int tabPlacement, int tabIndex) - { - return tabInsets; - } - - /** - * This method returns the selected tab pad insets appropriately rotated. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return The selected tab pad insets. - */ - protected Insets getSelectedTabPadInsets(int tabPlacement) - { - Insets target = new Insets(0, 0, 0, 0); - rotateInsets(selectedTabPadInsets, target, tabPlacement); - return target; - } - - /** - * This method returns the tab area insets appropriately rotated. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return The tab area insets. - */ - protected Insets getTabAreaInsets(int tabPlacement) - { - Insets target = new Insets(0, 0, 0, 0); - rotateInsets(tabAreaInsets, target, tabPlacement); - return target; - } - - /** - * This method returns the content border insets appropriately rotated. - * - * @param tabPlacement The JTabbedPane's tab placement. - * - * @return The content border insets. - */ - protected Insets getContentBorderInsets(int tabPlacement) - { - Insets target = new Insets(0, 0, 0, 0); - rotateInsets(contentBorderInsets, target, tabPlacement); - return target; - } - - /** - * This method returns the fontmetrics for the font of the JTabbedPane. - * - * @return The font metrics for the JTabbedPane. - */ - protected FontMetrics getFontMetrics() - { - FontMetrics fm = tabPane.getFontMetrics(tabPane.getFont()); - return fm; - } - - /** - * This method navigates from the selected tab into the given direction. As - * a result, a new tab will be selected (if possible). - * - * @param direction The direction to navigate in. - */ - protected void navigateSelectedTab(int direction) - { - int tabPlacement = tabPane.getTabPlacement(); - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - { - if (direction == SwingConstants.WEST) - selectPreviousTabInRun(tabPane.getSelectedIndex()); - else if (direction == SwingConstants.EAST) - selectNextTabInRun(tabPane.getSelectedIndex()); - - else - { - int offset = getTabRunOffset(tabPlacement, tabPane.getTabCount(), - tabPane.getSelectedIndex(), - (tabPlacement == SwingConstants.TOP) - ? direction == SwingConstants.NORTH - : direction == SwingConstants.SOUTH); - selectAdjacentRunTab(tabPlacement, tabPane.getSelectedIndex(), - offset); - } - } - if (tabPlacement == SwingConstants.LEFT - || tabPlacement == SwingConstants.RIGHT) - { - if (direction == SwingConstants.NORTH) - selectPreviousTabInRun(tabPane.getSelectedIndex()); - else if (direction == SwingConstants.SOUTH) - selectNextTabInRun(tabPane.getSelectedIndex()); - else - { - int offset = getTabRunOffset(tabPlacement, tabPane.getTabCount(), - tabPane.getSelectedIndex(), - (tabPlacement == SwingConstants.LEFT) - ? direction == SwingConstants.WEST - : direction == SwingConstants.EAST); - selectAdjacentRunTab(tabPlacement, tabPane.getSelectedIndex(), - offset); - } - } - } - - /** - * This method selects the next tab in the run. - * - * @param current The current selected index. - */ - protected void selectNextTabInRun(int current) - { - current = getNextTabIndexInRun(tabPane.getTabCount(), - current); - - if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) - scrollTab(current, tabPane.getTabPlacement()); - - tabPane.setSelectedIndex(current); - } - - /** - * This method selects the previous tab in the run. - * - * @param current The current selected index. - */ - protected void selectPreviousTabInRun(int current) - { - current = getPreviousTabIndexInRun(tabPane.getTabCount(), - current); - - if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) - scrollTab(current, tabPane.getTabPlacement()); - - tabPane.setSelectedIndex(current); - } - - /** - * This method selects the next tab (regardless of runs). - * - * @param current The current selected index. - */ - protected void selectNextTab(int current) - { - current = getNextTabIndex(current); - - if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) - scrollTab(current, tabPane.getTabPlacement()); - - tabPane.setSelectedIndex(current); - } - - /** - * This method selects the previous tab (regardless of runs). - * - * @param current The current selected index. - */ - protected void selectPreviousTab(int current) - { - current = getPreviousTabIndex(current); - - if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) - scrollTab(current, tabPane.getTabPlacement()); - - tabPane.setSelectedIndex(current); - } - - /** - * This method selects the correct tab given an offset from the current tab - * index. If the tab placement is TOP or BOTTOM, the offset will be in the - * y direction, otherwise, it will be in the x direction. A new coordinate - * will be found by adding the offset to the current location of the tab. - * The tab that the new location will be selected. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabIndex The tab to start from. - * @param offset The coordinate offset. - */ - protected void selectAdjacentRunTab(int tabPlacement, int tabIndex, - int offset) - { - int x = rects[tabIndex].x + rects[tabIndex].width / 2; - int y = rects[tabIndex].y + rects[tabIndex].height / 2; - - switch (tabPlacement) - { - case SwingConstants.TOP: - case SwingConstants.BOTTOM: - y += offset; - break; - case SwingConstants.RIGHT: - case SwingConstants.LEFT: - x += offset; - break; - } - - int index = tabForCoordinate(tabPane, x, y); - if (index != -1) - { - if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) - scrollTab(index, tabPlacement); - tabPane.setSelectedIndex(index); - } - } - - // This method is called when you press up/down to cycle through tab runs. - // it returns the distance (between the two runs' x/y position. - // where one run is the current selected run and the other run is the run in the - // direction of the scroll (dictated by the forward flag) - // the offset is an absolute value of the difference - - /** - * This method calculates the offset distance for use in - * selectAdjacentRunTab. The offset returned will be a difference in the y - * coordinate between the run in the desired direction and the current run - * (for tabPlacement in TOP or BOTTOM). Use x coordinate for LEFT and - * RIGHT. - * - * @param tabPlacement The JTabbedPane's tab placement. - * @param tabCount The number of tabs. - * @param tabIndex The starting index. - * @param forward If forward, the run in the desired direction will be the - * next run. - * - * @return The offset between the two runs. - */ - protected int getTabRunOffset(int tabPlacement, int tabCount, int tabIndex, - boolean forward) - { - int currRun = getRunForTab(tabCount, tabIndex); - int offset; - int nextRun = forward ? getNextTabRun(currRun) : getPreviousTabRun(currRun); - if (tabPlacement == SwingConstants.TOP - || tabPlacement == SwingConstants.BOTTOM) - offset = rects[lastTabInRun(tabCount, nextRun)].y - - rects[lastTabInRun(tabCount, currRun)].y; - else - offset = rects[lastTabInRun(tabCount, nextRun)].x - - rects[lastTabInRun(tabCount, currRun)].x; - - return offset; - } - - /** - * This method returns the previous tab index. - * - * @param base The index to start from. - * - * @return The previous tab index. - */ - protected int getPreviousTabIndex(int base) - { - base--; - if (base < 0) - return tabPane.getTabCount() - 1; - return base; - } - - /** - * This method returns the next tab index. - * - * @param base The index to start from. - * - * @return The next tab index. - */ - protected int getNextTabIndex(int base) - { - base++; - if (base == tabPane.getTabCount()) - return 0; - return base; - } - - /** - * This method returns the next tab index in the run. If the next index is - * out of this run, it will return the starting tab index for the run. - * - * @param tabCount The number of tabs. - * @param base The index to start from. - * - * @return The next tab index in the run. - */ - protected int getNextTabIndexInRun(int tabCount, int base) - { - int index = getNextTabIndex(base); - int run = getRunForTab(tabCount, base); - if (base == lastTabInRun(tabCount, run)) - index = (run > 0) - ? lastTabInRun(tabCount, getPreviousTabRun(run)) + 1 - : 0; - - return index; - } - - /** - * This method returns the previous tab index in the run. If the previous - * index is out of this run, it will return the last index for the run. - * - * @param tabCount The number of tabs. - * @param base The index to start from. - * - * @return The previous tab index in the run. - */ - protected int getPreviousTabIndexInRun(int tabCount, int base) - { - int index = getPreviousTabIndex(base); - int run = getRunForTab(tabCount, base); - if (index == lastTabInRun(tabCount, getPreviousTabRun(run))) - index = lastTabInRun(tabCount, run); - - return index; - } - - /** - * This method returns the index of the previous run. - * - * @param baseRun The run to start from. - * - * @return The index of the previous run. - */ - protected int getPreviousTabRun(int baseRun) - { - if (getTabRunCount(tabPane) == 1) - return 1; - - int prevRun = --baseRun; - if (prevRun < 0) - prevRun = getTabRunCount(tabPane) - 1; - return prevRun; - } - - /** - * This method returns the index of the next run. - * - * @param baseRun The run to start from. - * - * @return The index of the next run. - */ - protected int getNextTabRun(int baseRun) - { - if (getTabRunCount(tabPane) == 1) - return 1; - - int nextRun = ++baseRun; - if (nextRun == getTabRunCount(tabPane)) - nextRun = 0; - return nextRun; - } - - /** - * This method rotates the insets given a direction to rotate them in. - * Target placement should be one of TOP, LEFT, BOTTOM, RIGHT. The rotated - * insets will be stored in targetInsets. Passing in TOP as the direction - * does nothing. Passing in LEFT switches top and left, right and bottom. - * Passing in BOTTOM switches top and bottom. Passing in RIGHT switches top - * for left, left for bottom, bottom for right, and right for top. - * - * @param topInsets The reference insets. - * @param targetInsets An Insets object to store the new insets. - * @param targetPlacement The rotation direction. - */ - protected static void rotateInsets(Insets topInsets, Insets targetInsets, - int targetPlacement) - { - // Sun's version will happily throw an NPE if params are null, - // so I won't check it either. - switch (targetPlacement) - { - default: - case SwingConstants.TOP: - targetInsets.top = topInsets.top; - targetInsets.left = topInsets.left; - targetInsets.right = topInsets.right; - targetInsets.bottom = topInsets.bottom; - break; - case SwingConstants.LEFT: - targetInsets.left = topInsets.top; - targetInsets.top = topInsets.left; - targetInsets.right = topInsets.bottom; - targetInsets.bottom = topInsets.right; - break; - case SwingConstants.BOTTOM: - targetInsets.top = topInsets.bottom; - targetInsets.bottom = topInsets.top; - targetInsets.left = topInsets.left; - targetInsets.right = topInsets.right; - break; - case SwingConstants.RIGHT: - targetInsets.top = topInsets.left; - targetInsets.left = topInsets.bottom; - targetInsets.bottom = topInsets.right; - targetInsets.right = topInsets.top; - break; - } - } - - ActionMap getActionMap() - { - ActionMap map = (ActionMap) UIManager.get("TabbedPane.actionMap"); - - if (map == null) // first time here - { - map = createActionMap(); - if (map != null) - UIManager.put("TabbedPane.actionMap", map); - } - return map; - } - - ActionMap createActionMap() - { - ActionMap map = new ActionMapUIResource(); - - map.put("navigatePageDown", new NavigatePageDownAction()); - map.put("navigatePageUp", new NavigatePageUpAction()); - map.put("navigateDown", - new NavigateAction("navigateDown", SwingConstants.SOUTH)); - - map.put("navigateUp", - new NavigateAction("navigateUp", SwingConstants.NORTH)); - - map.put("navigateLeft", - new NavigateAction("navigateLeft", SwingConstants.WEST)); - - map.put("navigateRight", - new NavigateAction("navigateRight", SwingConstants.EAST)); - - map.put("requestFocusForVisibleComponent", - new RequestFocusForVisibleComponentAction()); - map.put("requestFocus", new RequestFocusAction()); - - return map; - } - - /** - * Sets the tab which should be highlighted when in rollover mode. And - * <code>index</code> of <code>-1</code> means that the rollover tab - * is deselected (i.e. the mouse is outside of the tabarea). - * - * @param index the index of the tab that is under the mouse, <code>-1</code> - * for no tab - * - * @since 1.5 - */ - protected void setRolloverTab(int index) - { - rolloverTab = index; - } - - /** - * Retunrs the index of the tab over which the mouse is currently moving, - * or <code>-1</code> for no tab. - * - * @return the index of the tab over which the mouse is currently moving, - * or <code>-1</code> for no tab - * - * @since 1.5 - */ - protected int getRolloverTab() - { - return rolloverTab; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java deleted file mode 100644 index 7ff234e..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTableHeaderUI.java +++ /dev/null @@ -1,566 +0,0 @@ -/* BasicTableHeaderUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; - -import javax.swing.CellRendererPane; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TableHeaderUI; -import javax.swing.table.JTableHeader; -import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableColumn; -import javax.swing.table.TableColumnModel; - -/** - * Basic pluggable look and feel interface for JTableHeader. - */ -public class BasicTableHeaderUI extends TableHeaderUI -{ - /** - * The width of the space (in both direction) around the column boundary, - * where mouse cursor changes shape into "resize" - */ - static int COLUMN_BOUNDARY_TOLERANCE = 3; - - public static ComponentUI createUI(JComponent h) - { - return new BasicTableHeaderUI(); - } - - /** - * The table header that is using this interface. - */ - protected JTableHeader header; - - /** - * The mouse input listener, responsible for mouse manipulations with - * the table header. - */ - protected MouseInputListener mouseInputListener; - - /** - * Paint the header cell. - */ - protected CellRendererPane rendererPane; - - /** - * The header cell border. - */ - private Border cellBorder; - - /** - * Original mouse cursor prior to resizing. - */ - private Cursor originalCursor; - - /** - * If not null, one of the columns is currently being dragged. - */ - Rectangle draggingHeaderRect; - - /** - * Handles column movement and rearrangement by mouse. The same instance works - * both as mouse listener and the mouse motion listner. - */ - public class MouseInputHandler - implements MouseInputListener - { - /** - * If true, the cursor is being already shown in the alternative "resize" - * shape. - */ - boolean showingResizeCursor; - - /** - * The position, from where the cursor is dragged during resizing. Double - * purpose field (absolute value during resizing and relative offset during - * column dragging). - */ - int draggingFrom = - 1; - - /** - * The number of the column being dragged. - */ - int draggingColumnNumber; - - /** - * The previous preferred width of the column. - */ - int prevPrefWidth = - 1; - - /** - * The timer to coalesce column resizing events. - */ - Timer timer; - - /** - * Returns without action, part of the MouseInputListener interface. - */ - public void mouseClicked(MouseEvent e) - { - // Nothing to do. - } - - /** - * If being in the resizing mode, handle resizing. - */ - public void mouseDragged(MouseEvent e) - { - TableColumn resizeIt = header.getResizingColumn(); - if (resizeIt != null && header.getResizingAllowed()) - { - // The timer is intialised on demand. - if (timer == null) - { - // The purpose of timer is to coalesce events. If the queue - // is free, the repaint event is fired immediately. - timer = new Timer(1, new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - header.getTable().doLayout(); - } - }); - timer.setRepeats(false); - timer.setCoalesce(true); - } - resizeIt.setPreferredWidth(prevPrefWidth + e.getX() - draggingFrom); - timer.restart(); - } - else if (draggingHeaderRect != null && header.getReorderingAllowed()) - { - draggingHeaderRect.x = e.getX() + draggingFrom; - header.repaint(); - } - } - - /** - * Returns without action, part of the MouseInputListener interface. - */ - public void mouseEntered(MouseEvent e) - { - // Nothing to do. - } - - /** - * Reset drag information of the column resizing. - */ - public void mouseExited(MouseEvent e) - { - // Nothing to do. - } - - /** - * Change the mouse cursor if the mouse if above the column boundary. - */ - public void mouseMoved(MouseEvent e) - { - // When dragging, the functionality is handled by the mouseDragged. - if (e.getButton() == 0 && header.getResizingAllowed()) - { - TableColumnModel model = header.getColumnModel(); - int n = model.getColumnCount(); - if (n < 2) - // It must be at least two columns to have at least one boundary. - // Otherwise, nothing to do. - return; - - boolean onBoundary = false; - - int x = e.getX(); - int a = x - COLUMN_BOUNDARY_TOLERANCE; - int b = x + COLUMN_BOUNDARY_TOLERANCE; - - int p = 0; - - Scan: for (int i = 0; i < n - 1; i++) - { - p += model.getColumn(i).getWidth(); - - if (p >= a && p <= b) - { - TableColumn column = model.getColumn(i); - onBoundary = true; - - draggingFrom = x; - prevPrefWidth = column.getWidth(); - header.setResizingColumn(column); - break Scan; - } - } - - if (onBoundary != showingResizeCursor) - { - // Change the cursor shape, if needed. - if (onBoundary) - { - - originalCursor = header.getCursor(); - if (p < x) - header.setCursor(Cursor.getPredefinedCursor( - Cursor.W_RESIZE_CURSOR)); - else - header.setCursor(Cursor.getPredefinedCursor( - Cursor.E_RESIZE_CURSOR)); - } - else - { - header.setCursor(originalCursor); - header.setResizingColumn(null); - } - - showingResizeCursor = onBoundary; - } - } - } - - /** - * Starts the dragging/resizing procedure. - */ - public void mousePressed(MouseEvent e) - { - if (header.getResizingAllowed()) - { - TableColumn resizingColumn = header.getResizingColumn(); - if (resizingColumn != null) - { - resizingColumn.setPreferredWidth(resizingColumn.getWidth()); - return; - } - } - - if (header.getReorderingAllowed()) - { - TableColumnModel model = header.getColumnModel(); - int n = model.getColumnCount(); - if (n < 2) - // It must be at least two columns to change the column location. - return; - - boolean onBoundary = false; - - int x = e.getX(); - int p = 0; - int col = - 1; - - Scan: for (int i = 0; i < n; i++) - { - p += model.getColumn(i).getWidth(); - if (p > x) - { - col = i; - break Scan; - } - } - if (col < 0) - return; - - TableColumn dragIt = model.getColumn(col); - header.setDraggedColumn(dragIt); - - draggingFrom = (p - dragIt.getWidth()) - x; - draggingHeaderRect = new Rectangle(header.getHeaderRect(col)); - draggingColumnNumber = col; - } - } - - /** - * Set all column preferred width to the current width to prevend abrupt - * width changes during the next resize. - */ - public void mouseReleased(MouseEvent e) - { - if (header.getResizingColumn() != null && header.getResizingAllowed()) - endResizing(); - if (header.getDraggedColumn() != null && header.getReorderingAllowed()) - endDragging(e); - } - - /** - * Stop resizing session. - */ - void endResizing() - { - TableColumnModel model = header.getColumnModel(); - int n = model.getColumnCount(); - if (n > 2) - { - TableColumn c; - for (int i = 0; i < n; i++) - { - c = model.getColumn(i); - c.setPreferredWidth(c.getWidth()); - } - } - header.setResizingColumn(null); - showingResizeCursor = false; - if (timer != null) - timer.stop(); - header.setCursor(originalCursor); - } - - /** - * Stop the dragging session. - * - * @param e the "mouse release" mouse event, needed to determing the final - * location for the dragged column. - */ - void endDragging(MouseEvent e) - { - header.setDraggedColumn(null); - draggingHeaderRect = null; - - TableColumnModel model = header.getColumnModel(); - - // Find where have we dragged the column. - int x = e.getX(); - int p = 0; - - int col = model.getColumnCount() - 1; - int n = model.getColumnCount(); - - // This loop does not find the column if the mouse if out of the - // right boundary of the table header. Then we make this column the - // rightmost column. - Scan: for (int i = 0; i < n; i++) - { - p += model.getColumn(i).getWidth(); - if (p > x) - { - col = i; - break Scan; - } - } - - header.getTable().moveColumn(draggingColumnNumber, col); - } - } - - /** - * Create and return the mouse input listener. - * - * @return the mouse listener ({@link MouseInputHandler}, if not overridden. - */ - protected MouseInputListener createMouseInputListener() - { - return new MouseInputHandler(); - } - - /** - * Construct a new BasicTableHeaderUI, create mouse listeners. - */ - public BasicTableHeaderUI() - { - mouseInputListener = createMouseInputListener(); - } - - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(header, "TableHeader.background", - "TableHeader.foreground", - "TableHeader.font"); - cellBorder = UIManager.getBorder("TableHeader.cellBorder"); - } - - protected void installKeyboardActions() - { - // AFAICS, the RI does nothing here. - } - - /** - * Add the mouse listener and the mouse motion listener to the table - * header. The listeners support table column resizing and rearrangement - * by mouse. - */ - protected void installListeners() - { - header.addMouseListener(mouseInputListener); - header.addMouseMotionListener(mouseInputListener); - } - - public void installUI(JComponent c) - { - header = (JTableHeader) c; - rendererPane = new CellRendererPane(); - installDefaults(); - installKeyboardActions(); - installListeners(); - } - - protected void uninstallDefaults() - { - header.setBackground(null); - header.setForeground(null); - header.setFont(null); - } - - protected void uninstallKeyboardActions() - { - // AFAICS, the RI does nothing here. - } - - /** - * Remove the previously installed listeners. - */ - protected void uninstallListeners() - { - header.removeMouseListener(mouseInputListener); - header.removeMouseMotionListener(mouseInputListener); - } - - public void uninstallUI(JComponent c) - { - uninstallListeners(); - uninstallKeyboardActions(); - uninstallDefaults(); - } - - /** - * Repaint the table header. - */ - public void paint(Graphics gfx, JComponent c) - { - TableColumnModel cmod = header.getColumnModel(); - int ncols = cmod.getColumnCount(); - if (ncols == 0) - return; - - Rectangle clip = gfx.getClipBounds(); - TableCellRenderer defaultRend = header.getDefaultRenderer(); - - for (int i = 0; i < ncols; ++i) - { - Rectangle bounds = header.getHeaderRect(i); - if (bounds.intersects(clip)) - { - Rectangle oldClip = gfx.getClipBounds(); - TableColumn col = cmod.getColumn(i); - TableCellRenderer rend = col.getHeaderRenderer(); - if (rend == null) - rend = defaultRend; - Object val = col.getHeaderValue(); - Component comp = rend.getTableCellRendererComponent(header.getTable(), - val, - false, // isSelected - false, // isFocused - -1, i); - // FIXME: The following settings should be performed in - // rend.getTableCellRendererComponent(). - comp.setFont(header.getFont()); - comp.setBackground(header.getBackground()); - comp.setForeground(header.getForeground()); - if (comp instanceof JComponent) - ((JComponent) comp).setBorder(cellBorder); - rendererPane.paintComponent(gfx, comp, header, bounds.x, bounds.y, - bounds.width, bounds.height); - } - } - - // This displays a running rectangle that is much simplier than the total - // animation, as it is seen in Sun's application. - // TODO animate the collumn dragging like in Sun's jre. - if (draggingHeaderRect != null) - { - gfx.setColor(header.getForeground()); - gfx.drawRect(draggingHeaderRect.x, draggingHeaderRect.y + 2, - draggingHeaderRect.width - 1, draggingHeaderRect.height - 6); - } - } - - /** - * Get the preferred header size. - * - * @param ignored unused - * - * @return the preferred size of the associated header. - */ - public Dimension getPreferredSize(JComponent ignored) - { - TableColumnModel cmod = header.getColumnModel(); - TableCellRenderer defaultRend = header.getDefaultRenderer(); - int ncols = cmod.getColumnCount(); - Dimension ret = new Dimension(0, 0); - int spacing = 0; - - if (header.getTable() != null - && header.getTable().getIntercellSpacing() != null) - spacing = header.getTable().getIntercellSpacing().width; - - for (int i = 0; i < ncols; ++i) - { - TableColumn col = cmod.getColumn(i); - TableCellRenderer rend = col.getHeaderRenderer(); - if (rend == null) - rend = defaultRend; - Object val = col.getHeaderValue(); - Component comp = rend.getTableCellRendererComponent(header.getTable(), - val, - false, // isSelected - false, // isFocused - -1, i); - comp.setFont(header.getFont()); - comp.setBackground(header.getBackground()); - comp.setForeground(header.getForeground()); - if (comp instanceof JComponent) - ((JComponent) comp).setBorder(cellBorder); - - Dimension d = comp.getPreferredSize(); - ret.width += spacing; - ret.height = Math.max(d.height, ret.height); - } - ret.width = cmod.getTotalColumnWidth(); - return ret; - } - - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java deleted file mode 100644 index f5a4bcb..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTableUI.java +++ /dev/null @@ -1,1410 +0,0 @@ -/* BasicTableUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Color; -import java.awt.Component; -import java.awt.ComponentOrientation; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.CellRendererPane; -import javax.swing.DefaultCellEditor; -import javax.swing.DefaultListSelectionModel; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JTable; -import javax.swing.ListSelectionModel; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.TransferHandler; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.event.ChangeEvent; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TableUI; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableColumn; -import javax.swing.table.TableColumnModel; -import javax.swing.table.TableModel; - -public class BasicTableUI extends TableUI -{ - public static ComponentUI createUI(JComponent comp) - { - return new BasicTableUI(); - } - - protected FocusListener focusListener; - protected KeyListener keyListener; - protected MouseInputListener mouseInputListener; - protected CellRendererPane rendererPane; - protected JTable table; - - /** The normal cell border. */ - Border cellBorder; - - /** The action bound to KeyStrokes. */ - TableAction action; - - /** - * Listens for changes to the tables properties. - */ - private PropertyChangeListener propertyChangeListener; - - /** - * Handles key events for the JTable. Key events should be handled through - * the InputMap/ActionMap mechanism since JDK1.3. This class is only there - * for backwards compatibility. - * - * @author Roman Kennke (kennke@aicas.com) - */ - public class KeyHandler implements KeyListener - { - - /** - * Receives notification that a key has been pressed and released. - * Activates the editing session for the focused cell by pressing the - * character keys. - * - * @param event the key event - */ - public void keyTyped(KeyEvent event) - { - // Key events should be handled through the InputMap/ActionMap mechanism - // since JDK1.3. This class is only there for backwards compatibility. - - // Editor activation is a specific kind of response to ''any'' - // character key. Hence it is handled here. - if (!table.isEditing() && table.isEnabled()) - { - int r = table.getSelectedRow(); - int c = table.getSelectedColumn(); - if (table.isCellEditable(r, c)) - table.editCellAt(r, c); - } - } - - /** - * Receives notification that a key has been pressed. - * - * @param event the key event - */ - public void keyPressed(KeyEvent event) - { - // Key events should be handled through the InputMap/ActionMap mechanism - // since JDK1.3. This class is only there for backwards compatibility. - } - - /** - * Receives notification that a key has been released. - * - * @param event the key event - */ - public void keyReleased(KeyEvent event) - { - // Key events should be handled through the InputMap/ActionMap mechanism - // since JDK1.3. This class is only there for backwards compatibility. - } - } - - public class FocusHandler implements FocusListener - { - public void focusGained(FocusEvent e) - { - // The only thing that is affected by a focus change seems to be - // how the lead cell is painted. So we repaint this cell. - repaintLeadCell(); - } - - public void focusLost(FocusEvent e) - { - // The only thing that is affected by a focus change seems to be - // how the lead cell is painted. So we repaint this cell. - repaintLeadCell(); - } - - /** - * Repaints the lead cell in response to a focus change, to refresh - * the display of the focus indicator. - */ - private void repaintLeadCell() - { - int rowCount = table.getRowCount(); - int columnCount = table.getColumnCount(); - int rowLead = table.getSelectionModel().getLeadSelectionIndex(); - int columnLead = table.getColumnModel().getSelectionModel(). - getLeadSelectionIndex(); - if (rowLead >= 0 && rowLead < rowCount && columnLead >= 0 - && columnLead < columnCount) - { - Rectangle dirtyRect = table.getCellRect(rowLead, columnLead, false); - table.repaint(dirtyRect); - } - } - } - - public class MouseInputHandler implements MouseInputListener - { - Point begin, curr; - - private void updateSelection(boolean controlPressed) - { - // Update the rows - int lo_row = table.rowAtPoint(begin); - int hi_row = table.rowAtPoint(curr); - ListSelectionModel rowModel = table.getSelectionModel(); - if (lo_row != -1 && hi_row != -1) - { - if (controlPressed && rowModel.getSelectionMode() - != ListSelectionModel.SINGLE_SELECTION) - rowModel.addSelectionInterval(lo_row, hi_row); - else - rowModel.setSelectionInterval(lo_row, hi_row); - } - - // Update the columns - int lo_col = table.columnAtPoint(begin); - int hi_col = table.columnAtPoint(curr); - ListSelectionModel colModel = table.getColumnModel(). - getSelectionModel(); - if (lo_col != -1 && hi_col != -1) - { - if (controlPressed && colModel.getSelectionMode() != - ListSelectionModel.SINGLE_SELECTION) - colModel.addSelectionInterval(lo_col, hi_col); - else - colModel.setSelectionInterval(lo_col, hi_col); - } - } - - /** - * For the double click, start the cell editor. - */ - public void mouseClicked(MouseEvent e) - { - Point p = e.getPoint(); - int row = table.rowAtPoint(p); - int col = table.columnAtPoint(p); - if (table.isCellEditable(row, col)) - { - // If the cell editor is the default editor, we request the - // number of the required clicks from it. Otherwise, - // require two clicks (double click). - TableCellEditor editor = table.getCellEditor(row, col); - if (editor instanceof DefaultCellEditor) - { - DefaultCellEditor ce = (DefaultCellEditor) editor; - if (e.getClickCount() < ce.getClickCountToStart()) - return; - } - table.editCellAt(row, col); - } - } - - public void mouseDragged(MouseEvent e) - { - if (table.isEnabled()) - { - curr = new Point(e.getX(), e.getY()); - updateSelection(e.isControlDown()); - } - } - - public void mouseEntered(MouseEvent e) - { - // Nothing to do here. - } - - public void mouseExited(MouseEvent e) - { - // Nothing to do here. - } - - public void mouseMoved(MouseEvent e) - { - // Nothing to do here. - } - - public void mousePressed(MouseEvent e) - { - if (table.isEnabled()) - { - ListSelectionModel rowModel = table.getSelectionModel(); - ListSelectionModel colModel = table.getColumnModel().getSelectionModel(); - int rowLead = rowModel.getLeadSelectionIndex(); - int colLead = colModel.getLeadSelectionIndex(); - - begin = new Point(e.getX(), e.getY()); - curr = new Point(e.getX(), e.getY()); - //if control is pressed and the cell is already selected, deselect it - if (e.isControlDown() && table.isCellSelected( - table.rowAtPoint(begin), table.columnAtPoint(begin))) - { - table.getSelectionModel(). - removeSelectionInterval(table.rowAtPoint(begin), - table.rowAtPoint(begin)); - table.getColumnModel().getSelectionModel(). - removeSelectionInterval(table.columnAtPoint(begin), - table.columnAtPoint(begin)); - } - else - updateSelection(e.isControlDown()); - - // If we were editing, but the moved to another cell, stop editing - if (rowLead != rowModel.getLeadSelectionIndex() || - colLead != colModel.getLeadSelectionIndex()) - if (table.isEditing()) - table.editingStopped(new ChangeEvent(e)); - - // Must request focus explicitly. - table.requestFocusInWindow(); - } - } - - public void mouseReleased(MouseEvent e) - { - if (table.isEnabled()) - { - begin = null; - curr = null; - } - } - } - - /** - * Listens for changes to the model property of the JTable and adjusts some - * settings. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class PropertyChangeHandler implements PropertyChangeListener - { - /** - * Receives notification if one of the JTable's properties changes. - * - * @param ev the property change event - */ - public void propertyChange(PropertyChangeEvent ev) - { - String propName = ev.getPropertyName(); - if (propName.equals("model")) - { - ListSelectionModel rowSel = table.getSelectionModel(); - rowSel.clearSelection(); - ListSelectionModel colSel = table.getColumnModel().getSelectionModel(); - colSel.clearSelection(); - TableModel model = table.getModel(); - - // Adjust lead and anchor selection indices of the row and column - // selection models. - if (model.getRowCount() > 0) - { - rowSel.setAnchorSelectionIndex(0); - rowSel.setLeadSelectionIndex(0); - } - else - { - rowSel.setAnchorSelectionIndex(-1); - rowSel.setLeadSelectionIndex(-1); - } - if (model.getColumnCount() > 0) - { - colSel.setAnchorSelectionIndex(0); - colSel.setLeadSelectionIndex(0); - } - else - { - colSel.setAnchorSelectionIndex(-1); - colSel.setLeadSelectionIndex(-1); - } - } - } - } - - protected FocusListener createFocusListener() - { - return new FocusHandler(); - } - - protected MouseInputListener createMouseInputListener() - { - return new MouseInputHandler(); - } - - - /** - * Creates and returns a key listener for the JTable. - * - * @return a key listener for the JTable - */ - protected KeyListener createKeyListener() - { - return new KeyHandler(); - } - - /** - * Return the maximum size of the table. The maximum height is the row - * height times the number of rows. The maximum width is the sum of - * the maximum widths of each column. - * - * @param comp the component whose maximum size is being queried, - * this is ignored. - * @return a Dimension object representing the maximum size of the table, - * or null if the table has no elements. - */ - public Dimension getMaximumSize(JComponent comp) - { - int maxTotalColumnWidth = 0; - for (int i = 0; i < table.getColumnCount(); i++) - maxTotalColumnWidth += table.getColumnModel().getColumn(i).getMaxWidth(); - - return new Dimension(maxTotalColumnWidth, getHeight()); - } - - /** - * Return the minimum size of the table. The minimum height is the row - * height times the number of rows. The minimum width is the sum of - * the minimum widths of each column. - * - * @param comp the component whose minimum size is being queried, - * this is ignored. - * @return a Dimension object representing the minimum size of the table, - * or null if the table has no elements. - */ - public Dimension getMinimumSize(JComponent comp) - { - int minTotalColumnWidth = 0; - for (int i = 0; i < table.getColumnCount(); i++) - minTotalColumnWidth += table.getColumnModel().getColumn(i).getMinWidth(); - - return new Dimension(minTotalColumnWidth, getHeight()); - } - - /** - * Returns the preferred size for the table of that UI. - * - * @param comp ignored, the <code>table</code> field is used instead - * - * @return the preferred size for the table of that UI - */ - public Dimension getPreferredSize(JComponent comp) - { - int prefTotalColumnWidth = 0; - TableColumnModel tcm = table.getColumnModel(); - - for (int i = 0; i < tcm.getColumnCount(); i++) - { - TableColumn col = tcm.getColumn(i); - prefTotalColumnWidth += col.getPreferredWidth(); - } - - return new Dimension(prefTotalColumnWidth, getHeight()); - } - - /** - * Returns the table height. This helper method is used by - * {@link #getMinimumSize(JComponent)}, {@link #getPreferredSize(JComponent)} - * and {@link #getMaximumSize(JComponent)} to determine the table height. - * - * @return the table height - */ - private int getHeight() - { - int height = 0; - int rowCount = table.getRowCount(); - if (rowCount > 0 && table.getColumnCount() > 0) - { - Rectangle r = table.getCellRect(rowCount - 1, 0, true); - height = r.y + r.height; - } - return height; - } - - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(table, "Table.background", - "Table.foreground", "Table.font"); - table.setGridColor(UIManager.getColor("Table.gridColor")); - table.setSelectionForeground(UIManager.getColor("Table.selectionForeground")); - table.setSelectionBackground(UIManager.getColor("Table.selectionBackground")); - table.setOpaque(true); - } - - /** - * Installs keyboard actions on the table. - */ - protected void installKeyboardActions() - { - // Install the input map. - InputMap inputMap = - (InputMap) SharedUIDefaults.get("Table.ancestorInputMap"); - SwingUtilities.replaceUIInputMap(table, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, - inputMap); - - // FIXME: The JDK uses a LazyActionMap for parentActionMap - SwingUtilities.replaceUIActionMap(table, getActionMap()); - - } - - /** - * Fetches the action map from the UI defaults, or create a new one - * if the action map hasn't been initialized. - * - * @return the action map - */ - private ActionMap getActionMap() - { - ActionMap am = (ActionMap) UIManager.get("Table.actionMap"); - if (am == null) - { - am = createDefaultActions(); - UIManager.getLookAndFeelDefaults().put("Table.actionMap", am); - } - return am; - } - - private ActionMap createDefaultActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - Action action = new TableAction(); - - am.put("cut", TransferHandler.getCutAction()); - am.put("copy", TransferHandler.getCopyAction()); - am.put("paste", TransferHandler.getPasteAction()); - - am.put("cancel", action); - am.put("selectAll", action); - am.put("clearSelection", action); - am.put("startEditing", action); - - am.put("selectNextRow", action); - am.put("selectNextRowCell", action); - am.put("selectNextRowExtendSelection", action); - am.put("selectNextRowChangeLead", action); - - am.put("selectPreviousRow", action); - am.put("selectPreviousRowCell", action); - am.put("selectPreviousRowExtendSelection", action); - am.put("selectPreviousRowChangeLead", action); - - am.put("selectNextColumn", action); - am.put("selectNextColumnCell", action); - am.put("selectNextColumnExtendSelection", action); - am.put("selectNextColumnChangeLead", action); - - am.put("selectPreviousColumn", action); - am.put("selectPreviousColumnCell", action); - am.put("selectPreviousColumnExtendSelection", action); - am.put("selectPreviousColumnChangeLead", action); - - am.put("scrollLeftChangeSelection", action); - am.put("scrollLeftExtendSelection", action); - am.put("scrollRightChangeSelection", action); - am.put("scrollRightExtendSelection", action); - - am.put("scrollUpChangeSelection", action); - am.put("scrollUpExtendSelection", action); - am.put("scrollDownChangeSelection", action); - am.put("scrolldownExtendSelection", action); - - am.put("selectFirstColumn", action); - am.put("selectFirstColumnExtendSelection", action); - am.put("selectLastColumn", action); - am.put("selectLastColumnExtendSelection", action); - - am.put("selectFirstRow", action); - am.put("selectFirstRowExtendSelection", action); - am.put("selectLastRow", action); - am.put("selectLastRowExtendSelection", action); - - am.put("addToSelection", action); - am.put("toggleAndAnchor", action); - am.put("extendTo", action); - am.put("moveSelectionTo", action); - - return am; - } - - /** - * This class implements the actions that we want to happen - * when specific keys are pressed for the JTable. The actionPerformed - * method is called when a key that has been registered for the JTable - * is received. - */ - private static class TableAction - extends AbstractAction - { - /** - * What to do when this action is called. - * - * @param e the ActionEvent that caused this action. - */ - public void actionPerformed(ActionEvent e) - { - JTable table = (JTable) e.getSource(); - - DefaultListSelectionModel rowModel - = (DefaultListSelectionModel) table.getSelectionModel(); - DefaultListSelectionModel colModel - = (DefaultListSelectionModel) table.getColumnModel().getSelectionModel(); - - int rowLead = rowModel.getLeadSelectionIndex(); - int rowMax = table.getModel().getRowCount() - 1; - - int colLead = colModel.getLeadSelectionIndex(); - int colMax = table.getModel().getColumnCount() - 1; - - // The command with which the action has been called is stored - // in this undocumented action value. This allows us to have only - // one Action instance to serve all keyboard input for JTable. - String command = (String) getValue("__command__"); - if (command.equals("selectPreviousRowExtendSelection")) - { - rowModel.setLeadSelectionIndex(Math.max(rowLead - 1, 0)); - } - else if (command.equals("selectLastColumn")) - { - colModel.setSelectionInterval(colMax, colMax); - } - else if (command.equals("startEditing")) - { - if (table.isCellEditable(rowLead, colLead)) - table.editCellAt(rowLead, colLead); - } - else if (command.equals("selectFirstRowExtendSelection")) - { - rowModel.setLeadSelectionIndex(0); - } - else if (command.equals("selectFirstColumn")) - { - colModel.setSelectionInterval(0, 0); - } - else if (command.equals("selectFirstColumnExtendSelection")) - { - colModel.setLeadSelectionIndex(0); - } - else if (command.equals("selectLastRow")) - { - rowModel.setSelectionInterval(rowMax, rowMax); - } - else if (command.equals("selectNextRowExtendSelection")) - { - rowModel.setLeadSelectionIndex(Math.min(rowLead + 1, rowMax)); - } - else if (command.equals("selectFirstRow")) - { - rowModel.setSelectionInterval(0, 0); - } - else if (command.equals("selectNextColumnExtendSelection")) - { - colModel.setLeadSelectionIndex(Math.min(colLead + 1, colMax)); - } - else if (command.equals("selectLastColumnExtendSelection")) - { - colModel.setLeadSelectionIndex(colMax); - } - else if (command.equals("selectPreviousColumnExtendSelection")) - { - colModel.setLeadSelectionIndex(Math.max(colLead - 1, 0)); - } - else if (command.equals("selectNextRow")) - { - rowModel.setSelectionInterval(Math.min(rowLead + 1, rowMax), - Math.min(rowLead + 1, rowMax)); - } - else if (command.equals("scrollUpExtendSelection")) - { - int target; - if (rowLead == getFirstVisibleRowIndex(table)) - target = Math.max(0, rowLead - (getLastVisibleRowIndex(table) - - getFirstVisibleRowIndex(table) + 1)); - else - target = getFirstVisibleRowIndex(table); - - rowModel.setLeadSelectionIndex(target); - colModel.setLeadSelectionIndex(colLead); - } - else if (command.equals("selectPreviousRow")) - { - rowModel.setSelectionInterval(Math.max(rowLead - 1, 0), - Math.max(rowLead - 1, 0)); - } - else if (command.equals("scrollRightChangeSelection")) - { - int target; - if (colLead == getLastVisibleColumnIndex(table)) - target = Math.min(colMax, colLead - + (getLastVisibleColumnIndex(table) - - getFirstVisibleColumnIndex(table) + 1)); - else - target = getLastVisibleColumnIndex(table); - - colModel.setSelectionInterval(target, target); - rowModel.setSelectionInterval(rowLead, rowLead); - } - else if (command.equals("selectPreviousColumn")) - { - colModel.setSelectionInterval(Math.max(colLead - 1, 0), - Math.max(colLead - 1, 0)); - } - else if (command.equals("scrollLeftChangeSelection")) - { - int target; - if (colLead == getFirstVisibleColumnIndex(table)) - target = Math.max(0, colLead - (getLastVisibleColumnIndex(table) - - getFirstVisibleColumnIndex(table) + 1)); - else - target = getFirstVisibleColumnIndex(table); - - colModel.setSelectionInterval(target, target); - rowModel.setSelectionInterval(rowLead, rowLead); - } - else if (command.equals("clearSelection")) - { - table.clearSelection(); - } - else if (command.equals("cancel")) - { - // FIXME: implement other parts of "cancel" like undo-ing last - // selection. Right now it just calls editingCancelled if - // we're currently editing. - if (table.isEditing()) - table.editingCanceled(new ChangeEvent("cancel")); - } - else if (command.equals("selectNextRowCell") - || command.equals("selectPreviousRowCell") - || command.equals("selectNextColumnCell") - || command.equals("selectPreviousColumnCell")) - { - // If nothing is selected, select the first cell in the table - if (table.getSelectedRowCount() == 0 && - table.getSelectedColumnCount() == 0) - { - rowModel.setSelectionInterval(0, 0); - colModel.setSelectionInterval(0, 0); - return; - } - - // If the lead selection index isn't selected (ie a remove operation - // happened, then set the lead to the first selected cell in the - // table - if (!table.isCellSelected(rowLead, colLead)) - { - rowModel.addSelectionInterval(rowModel.getMinSelectionIndex(), - rowModel.getMinSelectionIndex()); - colModel.addSelectionInterval(colModel.getMinSelectionIndex(), - colModel.getMinSelectionIndex()); - return; - } - - // multRowsSelected and multColsSelected tell us if multiple rows or - // columns are selected, respectively - boolean multRowsSelected, multColsSelected; - multRowsSelected = table.getSelectedRowCount() > 1 && - table.getRowSelectionAllowed(); - - multColsSelected = table.getSelectedColumnCount() > 1 && - table.getColumnSelectionAllowed(); - - // If there is just one selection, select the next cell, and wrap - // when you get to the edges of the table. - if (!multColsSelected && !multRowsSelected) - { - if (command.indexOf("Column") != -1) - advanceSingleSelection(colModel, colMax, rowModel, rowMax, - command.equals("selectPreviousColumnCell")); - else - advanceSingleSelection(rowModel, rowMax, colModel, colMax, - command.equals("selectPreviousRowCell")); - return; - } - - - // rowMinSelected and rowMaxSelected are the minimum and maximum - // values respectively of selected cells in the row selection model - // Similarly for colMinSelected and colMaxSelected. - int rowMaxSelected = table.getRowSelectionAllowed() ? - rowModel.getMaxSelectionIndex() : table.getModel().getRowCount() - 1; - int rowMinSelected = table.getRowSelectionAllowed() ? - rowModel.getMinSelectionIndex() : 0; - int colMaxSelected = table.getColumnSelectionAllowed() ? - colModel.getMaxSelectionIndex() : - table.getModel().getColumnCount() - 1; - int colMinSelected = table.getColumnSelectionAllowed() ? - colModel.getMinSelectionIndex() : 0; - - // If there are multiple rows and columns selected, select the next - // cell and wrap at the edges of the selection. - if (command.indexOf("Column") != -1) - advanceMultipleSelection(table, colModel, colMinSelected, - colMaxSelected, rowModel, rowMinSelected, - rowMaxSelected, - command.equals("selectPreviousColumnCell"), - true); - - else - advanceMultipleSelection(table, rowModel, rowMinSelected, - rowMaxSelected, colModel, colMinSelected, - colMaxSelected, - command.equals("selectPreviousRowCell"), - false); - } - else if (command.equals("selectNextColumn")) - { - colModel.setSelectionInterval(Math.min(colLead + 1, colMax), - Math.min(colLead + 1, colMax)); - } - else if (command.equals("scrollLeftExtendSelection")) - { - int target; - if (colLead == getFirstVisibleColumnIndex(table)) - target = Math.max(0, colLead - (getLastVisibleColumnIndex(table) - - getFirstVisibleColumnIndex(table) + 1)); - else - target = getFirstVisibleColumnIndex(table); - - colModel.setLeadSelectionIndex(target); - rowModel.setLeadSelectionIndex(rowLead); - } - else if (command.equals("scrollDownChangeSelection")) - { - int target; - if (rowLead == getLastVisibleRowIndex(table)) - target = Math.min(rowMax, rowLead + (getLastVisibleRowIndex(table) - - getFirstVisibleRowIndex(table) + 1)); - else - target = getLastVisibleRowIndex(table); - - rowModel.setSelectionInterval(target, target); - colModel.setSelectionInterval(colLead, colLead); - } - else if (command.equals("scrollRightExtendSelection")) - { - int target; - if (colLead == getLastVisibleColumnIndex(table)) - target = Math.min(colMax, colLead + (getLastVisibleColumnIndex(table) - - getFirstVisibleColumnIndex(table) + 1)); - else - target = getLastVisibleColumnIndex(table); - - colModel.setLeadSelectionIndex(target); - rowModel.setLeadSelectionIndex(rowLead); - } - else if (command.equals("selectAll")) - { - table.selectAll(); - } - else if (command.equals("selectLastRowExtendSelection")) - { - rowModel.setLeadSelectionIndex(rowMax); - colModel.setLeadSelectionIndex(colLead); - } - else if (command.equals("scrollDownExtendSelection")) - { - int target; - if (rowLead == getLastVisibleRowIndex(table)) - target = Math.min(rowMax, rowLead + (getLastVisibleRowIndex(table) - - getFirstVisibleRowIndex(table) + 1)); - else - target = getLastVisibleRowIndex(table); - - rowModel.setLeadSelectionIndex(target); - colModel.setLeadSelectionIndex(colLead); - } - else if (command.equals("scrollUpChangeSelection")) - { - int target; - if (rowLead == getFirstVisibleRowIndex(table)) - target = Math.max(0, rowLead - (getLastVisibleRowIndex(table) - - getFirstVisibleRowIndex(table) + 1)); - else - target = getFirstVisibleRowIndex(table); - - rowModel.setSelectionInterval(target, target); - colModel.setSelectionInterval(colLead, colLead); - } - else if (command.equals("selectNextRowChangeLead")) - { - if (rowModel.getSelectionMode() - != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) - { - // just "selectNextRow" - rowModel.setSelectionInterval(Math.min(rowLead + 1, rowMax), - Math.min(rowLead + 1, rowMax)); - colModel.setSelectionInterval(colLead, colLead); - } - else - rowModel.moveLeadSelectionIndex(Math.min(rowLead + 1, rowMax)); - } - else if (command.equals("selectPreviousRowChangeLead")) - { - if (rowModel.getSelectionMode() - != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) - { - // just selectPreviousRow - rowModel.setSelectionInterval(Math.max(rowLead - 1, 0), - Math.min(rowLead - 1, 0)); - colModel.setSelectionInterval(colLead, colLead); - } - else - rowModel.moveLeadSelectionIndex(Math.max(rowLead - 1, 0)); - } - else if (command.equals("selectNextColumnChangeLead")) - { - if (colModel.getSelectionMode() - != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) - { - // just selectNextColumn - rowModel.setSelectionInterval(rowLead, rowLead); - colModel.setSelectionInterval(Math.min(colLead + 1, colMax), - Math.min(colLead + 1, colMax)); - } - else - colModel.moveLeadSelectionIndex(Math.min(colLead + 1, colMax)); - } - else if (command.equals("selectPreviousColumnChangeLead")) - { - if (colModel.getSelectionMode() - != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) - { - // just selectPreviousColumn - rowModel.setSelectionInterval(rowLead, rowLead); - colModel.setSelectionInterval(Math.max(colLead - 1, 0), - Math.max(colLead - 1, 0)); - - } - else - colModel.moveLeadSelectionIndex(Math.max(colLead - 1, 0)); - } - else if (command.equals("addToSelection")) - { - if (!table.isEditing()) - { - int oldRowAnchor = rowModel.getAnchorSelectionIndex(); - int oldColAnchor = colModel.getAnchorSelectionIndex(); - rowModel.addSelectionInterval(rowLead, rowLead); - colModel.addSelectionInterval(colLead, colLead); - rowModel.setAnchorSelectionIndex(oldRowAnchor); - colModel.setAnchorSelectionIndex(oldColAnchor); - } - } - else if (command.equals("extendTo")) - { - rowModel.setSelectionInterval(rowModel.getAnchorSelectionIndex(), - rowLead); - colModel.setSelectionInterval(colModel.getAnchorSelectionIndex(), - colLead); - } - else if (command.equals("toggleAndAnchor")) - { - if (rowModel.isSelectedIndex(rowLead)) - rowModel.removeSelectionInterval(rowLead, rowLead); - else - rowModel.addSelectionInterval(rowLead, rowLead); - - if (colModel.isSelectedIndex(colLead)) - colModel.removeSelectionInterval(colLead, colLead); - else - colModel.addSelectionInterval(colLead, colLead); - - rowModel.setAnchorSelectionIndex(rowLead); - colModel.setAnchorSelectionIndex(colLead); - } - else if (command.equals("stopEditing")) - { - table.editingStopped(new ChangeEvent(command)); - } - else - { - // If we're here that means we bound this TableAction class - // to a keyboard input but we either want to ignore that input - // or we just haven't implemented its action yet. - - // Uncomment the following line to print the names of unused bindings - // when their keys are pressed - - // System.out.println ("not implemented: "+e.getActionCommand()); - } - - // Any commands whose keyStrokes should be used by the Editor should not - // cause editing to be stopped: ie, the SPACE sends "addToSelection" but - // if the table is in editing mode, the space should not cause us to stop - // editing because it should be used by the Editor. - if (table.isEditing() && command != "startEditing" - && command != "addToSelection") - table.editingStopped(new ChangeEvent("update")); - - table.scrollRectToVisible(table.getCellRect( - rowModel.getLeadSelectionIndex(), colModel.getLeadSelectionIndex(), - false)); - } - - /** - * Returns the column index of the first visible column. - * @return the column index of the first visible column. - */ - int getFirstVisibleColumnIndex(JTable table) - { - ComponentOrientation or = table.getComponentOrientation(); - Rectangle r = table.getVisibleRect(); - if (!or.isLeftToRight()) - r.translate((int) r.getWidth() - 1, 0); - return table.columnAtPoint(r.getLocation()); - } - - /** - * Returns the column index of the last visible column. - * - */ - int getLastVisibleColumnIndex(JTable table) - { - ComponentOrientation or = table.getComponentOrientation(); - Rectangle r = table.getVisibleRect(); - if (or.isLeftToRight()) - r.translate((int) r.getWidth() - 1, 0); - return table.columnAtPoint(r.getLocation()); - } - - /** - * Returns the row index of the first visible row. - * - */ - int getFirstVisibleRowIndex(JTable table) - { - ComponentOrientation or = table.getComponentOrientation(); - Rectangle r = table.getVisibleRect(); - if (!or.isLeftToRight()) - r.translate((int) r.getWidth() - 1, 0); - return table.rowAtPoint(r.getLocation()); - } - - /** - * Returns the row index of the last visible row. - * - */ - int getLastVisibleRowIndex(JTable table) - { - ComponentOrientation or = table.getComponentOrientation(); - Rectangle r = table.getVisibleRect(); - r.translate(0, (int) r.getHeight() - 1); - if (or.isLeftToRight()) - r.translate((int) r.getWidth() - 1, 0); - // The next if makes sure that we don't return -1 simply because - // there is white space at the bottom of the table (ie, the display - // area is larger than the table) - if (table.rowAtPoint(r.getLocation()) == -1) - { - if (getFirstVisibleRowIndex(table) == -1) - return -1; - else - return table.getModel().getRowCount() - 1; - } - return table.rowAtPoint(r.getLocation()); - } - - /** - * A helper method for the key bindings. Used because the actions - * for TAB, SHIFT-TAB, ENTER, and SHIFT-ENTER are very similar. - * - * Selects the next (previous if SHIFT pressed) column for TAB, or row for - * ENTER from within the currently selected cells. - * - * @param firstModel the ListSelectionModel for columns (TAB) or - * rows (ENTER) - * @param firstMin the first selected index in firstModel - * @param firstMax the last selected index in firstModel - * @param secondModel the ListSelectionModel for rows (TAB) or - * columns (ENTER) - * @param secondMin the first selected index in secondModel - * @param secondMax the last selected index in secondModel - * @param reverse true if shift was held for the event - * @param eventIsTab true if TAB was pressed, false if ENTER pressed - */ - void advanceMultipleSelection(JTable table, ListSelectionModel firstModel, - int firstMin, - int firstMax, ListSelectionModel secondModel, - int secondMin, int secondMax, boolean reverse, - boolean eventIsTab) - { - // If eventIsTab, all the "firsts" correspond to columns, otherwise, to - // rows "seconds" correspond to the opposite - int firstLead = firstModel.getLeadSelectionIndex(); - int secondLead = secondModel.getLeadSelectionIndex(); - int numFirsts = eventIsTab ? - table.getModel().getColumnCount() : table.getModel().getRowCount(); - int numSeconds = eventIsTab ? - table.getModel().getRowCount() : table.getModel().getColumnCount(); - - // check if we have to wrap the "firsts" around, going to the other side - if ((firstLead == firstMax && !reverse) || - (reverse && firstLead == firstMin)) - { - firstModel.addSelectionInterval(reverse ? firstMax : firstMin, - reverse ? firstMax : firstMin); - - // check if we have to wrap the "seconds" - if ((secondLead == secondMax && !reverse) || - (reverse && secondLead == secondMin)) - secondModel.addSelectionInterval(reverse ? secondMax : secondMin, - reverse ? secondMax : secondMin); - - // if we're not wrapping the seconds, we have to find out where we - // are within the secondModel and advance to the next cell (or - // go back to the previous cell if reverse == true) - else - { - int[] secondsSelected; - if (eventIsTab && table.getRowSelectionAllowed() || - !eventIsTab && table.getColumnSelectionAllowed()) - secondsSelected = eventIsTab ? - table.getSelectedRows() : table.getSelectedColumns(); - else - { - // if row selection is not allowed, then the entire column gets - // selected when you click on it, so consider ALL rows selected - secondsSelected = new int[numSeconds]; - for (int i = 0; i < numSeconds; i++) - secondsSelected[i] = i; - } - - // and now find the "next" index within the model - int secondIndex = reverse ? secondsSelected.length - 1 : 0; - if (!reverse) - while (secondsSelected[secondIndex] <= secondLead) - secondIndex++; - else - while (secondsSelected[secondIndex] >= secondLead) - secondIndex--; - - // and select it - updating the lead selection index - secondModel.addSelectionInterval(secondsSelected[secondIndex], - secondsSelected[secondIndex]); - } - } - // We didn't have to wrap the firsts, so just find the "next" first - // and select it, we don't have to change "seconds" - else - { - int[] firstsSelected; - if (eventIsTab && table.getColumnSelectionAllowed() || - !eventIsTab && table.getRowSelectionAllowed()) - firstsSelected = eventIsTab ? - table.getSelectedColumns() : table.getSelectedRows(); - else - { - // if selection not allowed, consider ALL firsts to be selected - firstsSelected = new int[numFirsts]; - for (int i = 0; i < numFirsts; i++) - firstsSelected[i] = i; - } - int firstIndex = reverse ? firstsSelected.length - 1 : 0; - if (!reverse) - while (firstsSelected[firstIndex] <= firstLead) - firstIndex++; - else - while (firstsSelected[firstIndex] >= firstLead) - firstIndex--; - firstModel.addSelectionInterval(firstsSelected[firstIndex], - firstsSelected[firstIndex]); - secondModel.addSelectionInterval(secondLead, secondLead); - } - } - - /** - * A helper method for the key bindings. Used because the actions - * for TAB, SHIFT-TAB, ENTER, and SHIFT-ENTER are very similar. - * - * Selects the next (previous if SHIFT pressed) column (TAB) or row (ENTER) - * in the table, changing the current selection. All cells in the table - * are eligible, not just the ones that are currently selected. - * @param firstModel the ListSelectionModel for columns (TAB) or rows - * (ENTER) - * @param firstMax the last index in firstModel - * @param secondModel the ListSelectionModel for rows (TAB) or columns - * (ENTER) - * @param secondMax the last index in secondModel - * @param reverse true if SHIFT was pressed for the event - */ - - void advanceSingleSelection(ListSelectionModel firstModel, int firstMax, - ListSelectionModel secondModel, int secondMax, - boolean reverse) - { - // for TABs, "first" corresponds to columns and "seconds" to rows. - // the opposite is true for ENTERs - int firstLead = firstModel.getLeadSelectionIndex(); - int secondLead = secondModel.getLeadSelectionIndex(); - - // if we are going backwards subtract 2 because we later add 1 - // for a net change of -1 - if (reverse && (firstLead == 0)) - { - // check if we have to wrap around - if (secondLead == 0) - secondLead += secondMax + 1; - secondLead -= 2; - } - - // do we have to wrap the "seconds"? - if (reverse && (firstLead == 0) || !reverse && (firstLead == firstMax)) - secondModel.setSelectionInterval((secondLead + 1) % (secondMax + 1), - (secondLead + 1) % (secondMax + 1)); - // if not, just reselect the current lead - else - secondModel.setSelectionInterval(secondLead, secondLead); - - // if we are going backwards, subtract 2 because we add 1 later - // for net change of -1 - if (reverse) - { - // check for wraparound - if (firstLead == 0) - firstLead += firstMax + 1; - firstLead -= 2; - } - // select the next "first" - firstModel.setSelectionInterval((firstLead + 1) % (firstMax + 1), - (firstLead + 1) % (firstMax + 1)); - } - } - - protected void installListeners() - { - if (focusListener == null) - focusListener = createFocusListener(); - table.addFocusListener(focusListener); - if (keyListener == null) - keyListener = createKeyListener(); - table.addKeyListener(keyListener); - if (mouseInputListener == null) - mouseInputListener = createMouseInputListener(); - table.addMouseListener(mouseInputListener); - table.addMouseMotionListener(mouseInputListener); - if (propertyChangeListener == null) - propertyChangeListener = new PropertyChangeHandler(); - table.addPropertyChangeListener(propertyChangeListener); - } - - /** - * Uninstalls UI defaults that have been installed by - * {@link #installDefaults()}. - */ - protected void uninstallDefaults() - { - // Nothing to do here for now. - } - - /** - * Uninstalls the keyboard actions that have been installed by - * {@link #installKeyboardActions()}. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(table, JComponent. - WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - SwingUtilities.replaceUIActionMap(table, null); - } - - protected void uninstallListeners() - { - table.removeFocusListener(focusListener); - table.removeKeyListener(keyListener); - table.removeMouseListener(mouseInputListener); - table.removeMouseMotionListener(mouseInputListener); - table.removePropertyChangeListener(propertyChangeListener); - propertyChangeListener = null; - } - - public void installUI(JComponent comp) - { - table = (JTable) comp; - rendererPane = new CellRendererPane(); - table.add(rendererPane); - - installDefaults(); - installKeyboardActions(); - installListeners(); - } - - public void uninstallUI(JComponent c) - { - uninstallListeners(); - uninstallKeyboardActions(); - uninstallDefaults(); - - table.remove(rendererPane); - rendererPane = null; - table = null; - } - - /** - * Paints a single cell in the table. - * - * @param g The graphics context to paint in - * @param row The row number to paint - * @param col The column number to paint - * @param bounds The bounds of the cell to paint, assuming a coordinate - * system beginning at <code>(0,0)</code> in the upper left corner of the - * table - * @param rend A cell renderer to paint with - */ - void paintCell(Graphics g, int row, int col, Rectangle bounds, - TableCellRenderer rend) - { - Component comp = table.prepareRenderer(rend, row, col); - rendererPane.paintComponent(g, comp, table, bounds); - } - - /** - * Paint the associated table. - */ - public void paint(Graphics gfx, JComponent ignored) - { - int ncols = table.getColumnCount(); - int nrows = table.getRowCount(); - if (nrows == 0 || ncols == 0) - return; - - Rectangle clip = gfx.getClipBounds(); - - // Determine the range of cells that are within the clip bounds. - Point p1 = new Point(clip.x, clip.y); - int c0 = table.columnAtPoint(p1); - if (c0 == -1) - c0 = 0; - int r0 = table.rowAtPoint(p1); - if (r0 == -1) - r0 = 0; - Point p2 = new Point(clip.x + clip.width, clip.y + clip.height); - int cn = table.columnAtPoint(p2); - if (cn == -1) - cn = table.getColumnCount() - 1; - int rn = table.rowAtPoint(p2); - if (rn == -1) - rn = table.getRowCount() - 1; - - int columnMargin = table.getColumnModel().getColumnMargin(); - int rowMargin = table.getRowMargin(); - - TableColumnModel cmodel = table.getColumnModel(); - int[] widths = new int[cn + 1]; - for (int i = c0; i <= cn; i++) - { - widths[i] = cmodel.getColumn(i).getWidth() - columnMargin; - } - - Rectangle bounds = table.getCellRect(r0, c0, false); - // The left boundary of the area being repainted. - int left = bounds.x; - - // The top boundary of the area being repainted. - int top = bounds.y; - - // The bottom boundary of the area being repainted. - int bottom; - - // paint the cell contents - Color grid = table.getGridColor(); - for (int r = r0; r <= rn; ++r) - { - for (int c = c0; c <= cn; ++c) - { - bounds.width = widths[c]; - paintCell(gfx, r, c, bounds, table.getCellRenderer(r, c)); - bounds.x += widths[c] + columnMargin; - } - bounds.x = left; - bounds.y += table.getRowHeight(r); - // Update row height for tables with custom heights. - bounds.height = table.getRowHeight(r + 1) - rowMargin; - } - - bottom = bounds.y - rowMargin; - - // paint vertical grid lines - if (grid != null && table.getShowVerticalLines()) - { - Color save = gfx.getColor(); - gfx.setColor(grid); - int x = left - columnMargin; - for (int c = c0; c <= cn; ++c) - { - // The vertical grid is draw right from the cells, so we - // add before drawing. - x += widths[c] + columnMargin; - gfx.drawLine(x, top, x, bottom); - } - gfx.setColor(save); - } - - // paint horizontal grid lines - if (grid != null && table.getShowHorizontalLines()) - { - Color save = gfx.getColor(); - gfx.setColor(grid); - int y = top - rowMargin; - for (int r = r0; r <= rn; ++r) - { - // The horizontal grid is draw below the cells, so we - // add before drawing. - y += table.getRowHeight(r); - gfx.drawLine(left, y, p2.x, y); - } - gfx.setColor(save); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java deleted file mode 100644 index b2541b4..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTextAreaUI.java +++ /dev/null @@ -1,116 +0,0 @@ -/* BasicTextAreaUI.java -- - Copyright (C) 2004, 2006, 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.plaf.basic; - - -import java.beans.PropertyChangeEvent; - -import javax.swing.JComponent; -import javax.swing.JTextArea; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.Element; -import javax.swing.text.PlainView; -import javax.swing.text.View; -import javax.swing.text.WrappedPlainView; - -public class BasicTextAreaUI extends BasicTextUI -{ - public static ComponentUI createUI(JComponent comp) - { - return new BasicTextAreaUI(); - } - - public BasicTextAreaUI() - { - // Nothing to do here. - } - - /** - * Create the view. Returns a WrappedPlainView if the text area - * has lineWrap set to true, otherwise returns a PlainView. If - * lineWrap is true has to check whether the wrap style is word - * or character and return an appropriate WrappedPlainView. - * - * @param elem the element to create a View for - * @return an appropriate View for the element - */ - public View create(Element elem) - { - JTextArea comp = (JTextArea) getComponent(); - if (comp.getLineWrap()) - { - if (comp.getWrapStyleWord()) - return new WrappedPlainView(elem, true); - else - return new WrappedPlainView(elem, false); - } - else - return new PlainView(elem); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "TextArea" - */ - protected String getPropertyPrefix() - { - return "TextArea"; - } - - /** - * Receives notification whenever one of the text component's bound - * properties changes. This changes the view to WrappedPlainView - * if setLineWrap(true) is called, and back to PlainView if - * setLineWrap(false) is called. - * - * @param ev the property change event - */ - protected void propertyChange(PropertyChangeEvent ev) - { - JTextArea comp = (JTextArea) getComponent(); - if (ev.getPropertyName() == "lineWrap" - || ev.getPropertyName() == "wrapStyleWord") - { - // Changes the View (without modifying the document or it's listeners). - setView(create(textComponent.getDocument().getDefaultRootElement())); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java deleted file mode 100644 index 5f6a927..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTextFieldUI.java +++ /dev/null @@ -1,118 +0,0 @@ -/* BasicTextFieldUI.java - Copyright (C) 2004, 2006, 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.plaf.basic; - -import java.awt.Color; -import java.beans.PropertyChangeEvent; - -import javax.swing.JComponent; -import javax.swing.UIDefaults; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.Element; -import javax.swing.text.FieldView; -import javax.swing.text.View; - -public class BasicTextFieldUI extends BasicTextUI -{ - public BasicTextFieldUI() - { - super(); - } - - public View create(Element elem) - { - return new FieldView(elem); - } - - public static ComponentUI createUI(JComponent c) - { - return new BasicTextFieldUI(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "TextField" - */ - protected String getPropertyPrefix() - { - return "TextField"; - } - - public void installUI(JComponent c) - { - super.installUI(c); - } - - /** - * Receives notification whenever one of the text component's bound - * properties changes. Here we check for the editable and enabled - * properties and adjust the background color accordingly. - * - * <p>The colors are only changed if they are not a - * <code>ColorUIResource</code>.</p> - * - * @param event the property change event - */ - protected void propertyChange(PropertyChangeEvent event) - { - if (event.getPropertyName().equals("editable")) - { - // Changing the color only if the current background is an instance of - // ColorUIResource is the behavior of the RI. - if (textComponent.getBackground() instanceof ColorUIResource) - { - Color c = null; - Color old = textComponent.getBackground(); - String prefix = getPropertyPrefix(); - if (! textComponent.isEnabled()) - c = SharedUIDefaults.getColor(prefix + ".disabledBackground"); - if (c == null && ! textComponent.isEditable()) - c = SharedUIDefaults.getColor(prefix + ".inactiveBackground"); - if (c == null) - c = SharedUIDefaults.getColor(prefix + ".background"); - if (c != null && c != old) - { - textComponent.setBackground(c); - } - } - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextPaneUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextPaneUI.java deleted file mode 100644 index 507e0a1..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTextPaneUI.java +++ /dev/null @@ -1,92 +0,0 @@ -/* BasicTextPaneUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Color; - -import javax.swing.JComponent; -import javax.swing.JTextPane; -import javax.swing.plaf.ColorUIResource; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.Style; -import javax.swing.text.StyleConstants; -import javax.swing.text.StyleContext; - -public class BasicTextPaneUI extends BasicEditorPaneUI -{ - public BasicTextPaneUI() - { - // Do nothing here. - } - - public static ComponentUI createUI(JComponent comp) - { - return new BasicTextPaneUI(); - } - - /** - * Returns the prefix for entries in the {@link UIDefaults} table. - * - * @return "TextPane" - */ - protected String getPropertyPrefix() - { - return "TextPane"; - } - - /** - * Installs this UI on the specified <code>JTextPane</code>. This calls the - * super implementation and then adds a default style to the text pane. - * - * @param c the text pane to install the UI to - */ - public void installUI(JComponent c) - { - super.installUI(c); - JTextPane tp = (JTextPane) c; - Style defaultStyle = tp.getStyle(StyleContext.DEFAULT_STYLE); - defaultStyle.addAttribute(StyleConstants.Foreground, - new ColorUIResource(Color.BLACK)); - defaultStyle.addAttribute(StyleConstants.FontFamily, "Serif"); - defaultStyle.addAttribute(StyleConstants.Italic, Boolean.FALSE); - defaultStyle.addAttribute(StyleConstants.Bold, Boolean.FALSE); - defaultStyle.addAttribute(StyleConstants.FontSize, new Integer(12)); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java deleted file mode 100644 index bd7cc48..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTextUI.java +++ /dev/null @@ -1,1538 +0,0 @@ -/* BasicTextUI.java -- - Copyright (C) 2002, 2003, 2004, 2005, 2006 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.plaf.basic; - -import gnu.classpath.SystemProperties; - -import java.awt.Color; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.HeadlessException; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.Toolkit; -import java.awt.datatransfer.Clipboard; -import java.awt.datatransfer.StringSelection; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.TransferHandler; -import javax.swing.UIManager; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.InputMapUIResource; -import javax.swing.plaf.TextUI; -import javax.swing.plaf.UIResource; -import javax.swing.text.AbstractDocument; -import javax.swing.text.AttributeSet; -import javax.swing.text.BadLocationException; -import javax.swing.text.Caret; -import javax.swing.text.DefaultCaret; -import javax.swing.text.DefaultEditorKit; -import javax.swing.text.DefaultHighlighter; -import javax.swing.text.Document; -import javax.swing.text.EditorKit; -import javax.swing.text.Element; -import javax.swing.text.Highlighter; -import javax.swing.text.JTextComponent; -import javax.swing.text.Keymap; -import javax.swing.text.Position; -import javax.swing.text.View; -import javax.swing.text.ViewFactory; - -/** - * The abstract base class from which the UI classes for Swings text - * components are derived. This provides most of the functionality for - * the UI classes. - * - * @author original author unknown - * @author Roman Kennke (roman@kennke.org) - */ -public abstract class BasicTextUI extends TextUI - implements ViewFactory -{ - /** - * A {@link DefaultCaret} that implements {@link UIResource}. - */ - public static class BasicCaret extends DefaultCaret implements UIResource - { - public BasicCaret() - { - // Nothing to do here. - } - } - - /** - * A {@link DefaultHighlighter} that implements {@link UIResource}. - */ - public static class BasicHighlighter extends DefaultHighlighter - implements UIResource - { - public BasicHighlighter() - { - // Nothing to do here. - } - } - - private static class FocusHandler - implements FocusListener - { - public void focusGained(FocusEvent e) - { - // Nothing to do here. - } - public void focusLost(FocusEvent e) - { - JTextComponent textComponent = (JTextComponent) e.getComponent(); - // Integrates Swing text components with the system clipboard: - // The idea is that if one wants to copy text around X11-style - // (select text and middle-click in the target component) the focus - // will move to the new component which gives the old focus owner the - // possibility to paste its selection into the clipboard. - if (!e.isTemporary() - && textComponent.getSelectionStart() - != textComponent.getSelectionEnd()) - { - SecurityManager sm = System.getSecurityManager(); - try - { - if (sm != null) - sm.checkSystemClipboardAccess(); - - Clipboard cb = Toolkit.getDefaultToolkit().getSystemSelection(); - if (cb != null) - { - StringSelection selection = new StringSelection( - textComponent.getSelectedText()); - cb.setContents(selection, selection); - } - } - catch (SecurityException se) - { - // Not allowed to access the clipboard: Ignore and - // do not access it. - } - catch (HeadlessException he) - { - // There is no AWT: Ignore and do not access the - // clipboard. - } - catch (IllegalStateException ise) - { - // Clipboard is currently unavaible. - } - } - } - } - - /** - * This FocusListener triggers repaints on focus shift. - */ - private static FocusListener focusListener; - - /** - * Receives notifications when properties of the text component change. - */ - private class Handler - implements PropertyChangeListener, DocumentListener - { - /** - * Notifies when a property of the text component changes. - * - * @param event the PropertyChangeEvent describing the change - */ - public void propertyChange(PropertyChangeEvent event) - { - if (event.getPropertyName().equals("document")) - { - // Document changed. - Object oldValue = event.getOldValue(); - if (oldValue != null) - { - Document oldDoc = (Document) oldValue; - oldDoc.removeDocumentListener(handler); - } - Object newValue = event.getNewValue(); - if (newValue != null) - { - Document newDoc = (Document) newValue; - newDoc.addDocumentListener(handler); - } - modelChanged(); - } - - BasicTextUI.this.propertyChange(event); - } - - /** - * Notification about a document change event. - * - * @param ev the DocumentEvent describing the change - */ - public void changedUpdate(DocumentEvent ev) - { - // Updates are forwarded to the View even if 'getVisibleEditorRect' - // method returns null. This means the View classes have to be - // aware of that possibility. - rootView.changedUpdate(ev, getVisibleEditorRect(), - rootView.getViewFactory()); - } - - /** - * Notification about a document insert event. - * - * @param ev the DocumentEvent describing the insertion - */ - public void insertUpdate(DocumentEvent ev) - { - // Updates are forwarded to the View even if 'getVisibleEditorRect' - // method returns null. This means the View classes have to be - // aware of that possibility. - rootView.insertUpdate(ev, getVisibleEditorRect(), - rootView.getViewFactory()); - } - - /** - * Notification about a document removal event. - * - * @param ev the DocumentEvent describing the removal - */ - public void removeUpdate(DocumentEvent ev) - { - // Updates are forwarded to the View even if 'getVisibleEditorRect' - // method returns null. This means the View classes have to be - // aware of that possibility. - rootView.removeUpdate(ev, getVisibleEditorRect(), - rootView.getViewFactory()); - } - - } - - /** - * This view forms the root of the View hierarchy. However, it delegates - * most calls to another View which is the real root of the hierarchy. - * The purpose is to make sure that all Views in the hierarchy, including - * the (real) root have a well-defined parent to which they can delegate - * calls like {@link #preferenceChanged}, {@link #getViewFactory} and - * {@link #getContainer}. - */ - private class RootView extends View - { - /** The real root view. */ - private View view; - - /** - * Creates a new RootView. - */ - public RootView() - { - super(null); - } - - /** - * Returns the ViewFactory for this RootView. If the current EditorKit - * provides a ViewFactory, this is used. Otherwise the TextUI itself - * is returned as a ViewFactory. - * - * @return the ViewFactory for this RootView - */ - public ViewFactory getViewFactory() - { - ViewFactory factory = null; - EditorKit editorKit = BasicTextUI.this.getEditorKit(getComponent()); - factory = editorKit.getViewFactory(); - if (factory == null) - factory = BasicTextUI.this; - return factory; - } - - /** - * Indicates that the preferences of one of the child view has changed. - * This calls revalidate on the text component. - * - * @param v the child view which's preference has changed - * @param width <code>true</code> if the width preference has changed - * @param height <code>true</code> if the height preference has changed - */ - public void preferenceChanged(View v, boolean width, boolean height) - { - textComponent.revalidate(); - } - - /** - * Sets the real root view. - * - * @param v the root view to set - */ - public void setView(View v) - { - if (view != null) - view.setParent(null); - - if (v != null) - v.setParent(this); - - view = v; - } - - /** - * Returns the real root view, regardless of the index. - * - * @param index not used here - * - * @return the real root view, regardless of the index. - */ - public View getView(int index) - { - return view; - } - - /** - * Returns <code>1</code> since the RootView always contains one - * child, that is the real root of the View hierarchy. - * - * @return <code>1</code> since the RootView always contains one - * child, that is the real root of the View hierarchy - */ - public int getViewCount() - { - int count = 0; - if (view != null) - count = 1; - return count; - } - - /** - * Returns the <code>Container</code> that contains this view. This - * normally will be the text component that is managed by this TextUI. - * - * @return the <code>Container</code> that contains this view - */ - public Container getContainer() - { - return textComponent; - } - - /** - * Sets the size of the renderer. This is synchronized because that - * potentially triggers layout and we don't want more than one thread - * playing with the layout information. - */ - public synchronized void setSize(float w, float h) - { - if (view != null) - view.setSize(w, h); - } - - /** - * Paints the view. This is delegated to the real root view. - * - * @param g the <code>Graphics</code> context to paint to - * @param s the allocation for the View - */ - public void paint(Graphics g, Shape s) - { - if (view != null) - { - Rectangle b = s instanceof Rectangle ? (Rectangle) s : s.getBounds(); - setSize(b.width, b.height); - view.paint(g, s); - } - } - - - /** - * Maps a position in the document into the coordinate space of the View. - * The output rectangle usually reflects the font height but has a width - * of zero. - * - * This is delegated to the real root view. - * - * @param position the position of the character in the model - * @param a the area that is occupied by the view - * @param bias either {@link Position.Bias#Forward} or - * {@link Position.Bias#Backward} depending on the preferred - * direction bias. If <code>null</code> this defaults to - * <code>Position.Bias.Forward</code> - * - * @return a rectangle that gives the location of the document position - * inside the view coordinate space - * - * @throws BadLocationException if <code>pos</code> is invalid - * @throws IllegalArgumentException if b is not one of the above listed - * valid values - */ - public Shape modelToView(int position, Shape a, Position.Bias bias) - throws BadLocationException - { - return view.modelToView(position, a, bias); - } - - /** - * Maps coordinates from the <code>View</code>'s space into a position - * in the document model. - * - * @param x the x coordinate in the view space - * @param y the y coordinate in the view space - * @param a the allocation of this <code>View</code> - * @param b the bias to use - * - * @return the position in the document that corresponds to the screen - * coordinates <code>x, y</code> - */ - public int viewToModel(float x, float y, Shape a, Position.Bias[] b) - { - return view.viewToModel(x, y, a, b); - } - - /** - * Notification about text insertions. These are forwarded to the - * real root view. - * - * @param ev the DocumentEvent describing the change - * @param shape the current allocation of the view's display - * @param vf the ViewFactory to use for creating new Views - */ - public void insertUpdate(DocumentEvent ev, Shape shape, ViewFactory vf) - { - if (view != null) - view.insertUpdate(ev, shape, vf); - } - - /** - * Notification about text removals. These are forwarded to the - * real root view. - * - * @param ev the DocumentEvent describing the change - * @param shape the current allocation of the view's display - * @param vf the ViewFactory to use for creating new Views - */ - public void removeUpdate(DocumentEvent ev, Shape shape, ViewFactory vf) - { - if (view != null) - view.removeUpdate(ev, shape, vf); - } - - /** - * Notification about text changes. These are forwarded to the - * real root view. - * - * @param ev the DocumentEvent describing the change - * @param shape the current allocation of the view's display - * @param vf the ViewFactory to use for creating new Views - */ - public void changedUpdate(DocumentEvent ev, Shape shape, ViewFactory vf) - { - if (view != null) - view.changedUpdate(ev, shape, vf); - } - - /** - * Returns the document position that is (visually) nearest to the given - * document position <code>pos</code> in the given direction <code>d</code>. - * - * @param pos the document position - * @param b the bias for <code>pos</code> - * @param a the allocation for the view - * @param d the direction, must be either {@link SwingConstants#NORTH}, - * {@link SwingConstants#SOUTH}, {@link SwingConstants#WEST} or - * {@link SwingConstants#EAST} - * @param biasRet an array of {@link Position.Bias} that can hold at least - * one element, which is filled with the bias of the return position - * on method exit - * - * @return the document position that is (visually) nearest to the given - * document position <code>pos</code> in the given direction - * <code>d</code> - * - * @throws BadLocationException if <code>pos</code> is not a valid offset in - * the document model - */ - public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, - int d, Position.Bias[] biasRet) - throws BadLocationException - { - return view.getNextVisualPositionFrom(pos, b, a, d, biasRet); - } - - /** - * Returns the startOffset of this view, which is always the beginning - * of the document. - * - * @return the startOffset of this view - */ - public int getStartOffset() - { - return 0; - } - - /** - * Returns the endOffset of this view, which is always the end - * of the document. - * - * @return the endOffset of this view - */ - public int getEndOffset() - { - return getDocument().getLength(); - } - - /** - * Returns the document associated with this view. - * - * @return the document associated with this view - */ - public Document getDocument() - { - return textComponent.getDocument(); - } - - /** - * Returns the attributes, which is null for the RootView. - */ - public AttributeSet getAttributes() - { - return null; - } - - /** - * Overridden to forward to the view. - */ - public float getPreferredSpan(int axis) - { - // The RI returns 10 in the degenerate case. - float span = 10; - if (view != null) - span = view.getPreferredSpan(axis); - return span; - } - - /** - * Overridden to forward to the real view. - */ - public float getMinimumSpan(int axis) - { - // The RI returns 10 in the degenerate case. - float span = 10; - if (view != null) - span = view.getMinimumSpan(axis); - return span; - } - - /** - * Overridden to return Integer.MAX_VALUE. - */ - public float getMaximumSpan(int axis) - { - // The RI returns Integer.MAX_VALUE here, regardless of the real view's - // maximum size. - return Integer.MAX_VALUE; - } - } - - /** - * The EditorKit used by this TextUI. - */ - private static EditorKit kit; - - /** - * The combined event handler for text components. - * - * This is package private to avoid accessor methods. - */ - Handler handler; - - /** - * The root view. - * - * This is package private to avoid accessor methods. - */ - RootView rootView; - - /** - * The text component that we handle. - */ - JTextComponent textComponent; - - /** - * Creates a new <code>BasicTextUI</code> instance. - */ - public BasicTextUI() - { - // Nothing to do here. - } - - /** - * Creates a {@link Caret} that should be installed into the text component. - * - * @return a caret that should be installed into the text component - */ - protected Caret createCaret() - { - return new BasicCaret(); - } - - /** - * Creates a {@link Highlighter} that should be installed into the text - * component. - * - * @return a <code>Highlighter</code> for the text component - */ - protected Highlighter createHighlighter() - { - return new BasicHighlighter(); - } - - /** - * The text component that is managed by this UI. - * - * @return the text component that is managed by this UI - */ - protected final JTextComponent getComponent() - { - return textComponent; - } - - /** - * Installs this UI on the text component. - * - * @param c the text component on which to install the UI - */ - public void installUI(final JComponent c) - { - textComponent = (JTextComponent) c; - - if (rootView == null) - rootView = new RootView(); - - installDefaults(); - installFixedDefaults(); - - // These listeners must be installed outside of installListeners(), - // because overriding installListeners() doesn't prevent installing - // these in the RI, but overriding isntallUI() does. - if (handler == null) - handler = new Handler(); - textComponent.addPropertyChangeListener(handler); - Document doc = textComponent.getDocument(); - if (doc == null) - { - // The Handler takes care of installing the necessary listeners - // on the document here. - doc = getEditorKit(textComponent).createDefaultDocument(); - textComponent.setDocument(doc); - } - else - { - // Must install the document listener. - doc.addDocumentListener(handler); - modelChanged(); - } - - installListeners(); - installKeyboardActions(); - } - - /** - * Installs UI defaults on the text components. - */ - protected void installDefaults() - { - String prefix = getPropertyPrefix(); - // Install the standard properties. - LookAndFeel.installColorsAndFont(textComponent, prefix + ".background", - prefix + ".foreground", prefix + ".font"); - LookAndFeel.installBorder(textComponent, prefix + ".border"); - - // Some additional text component only properties. - Color color = textComponent.getCaretColor(); - if (color == null || color instanceof UIResource) - { - color = UIManager.getColor(prefix + ".caretForeground"); - textComponent.setCaretColor(color); - } - - // Fetch the colors for enabled/disabled text components. - color = textComponent.getDisabledTextColor(); - if (color == null || color instanceof UIResource) - { - color = UIManager.getColor(prefix + ".inactiveForeground"); - textComponent.setDisabledTextColor(color); - } - color = textComponent.getSelectedTextColor(); - if (color == null || color instanceof UIResource) - { - color = UIManager.getColor(prefix + ".selectionForeground"); - textComponent.setSelectedTextColor(color); - } - color = textComponent.getSelectionColor(); - if (color == null || color instanceof UIResource) - { - color = UIManager.getColor(prefix + ".selectionBackground"); - textComponent.setSelectionColor(color); - } - - Insets margin = textComponent.getMargin(); - if (margin == null || margin instanceof UIResource) - { - margin = UIManager.getInsets(prefix + ".margin"); - textComponent.setMargin(margin); - } - - } - - /** - * Installs defaults that can't be overridden by overriding - * installDefaults(). - */ - private void installFixedDefaults() - { - String prefix = getPropertyPrefix(); - Caret caret = textComponent.getCaret(); - if (caret == null || caret instanceof UIResource) - { - caret = createCaret(); - textComponent.setCaret(caret); - caret.setBlinkRate(UIManager.getInt(prefix + ".caretBlinkRate")); - } - - Highlighter highlighter = textComponent.getHighlighter(); - if (highlighter == null || highlighter instanceof UIResource) - textComponent.setHighlighter(createHighlighter()); - - } - - /** - * Install all listeners on the text component. - */ - protected void installListeners() - { - // - if (SystemProperties.getProperty("gnu.swing.text.no-xlike-clipboard") - == null) - { - if (focusListener == null) - focusListener = new FocusHandler(); - textComponent.addFocusListener(focusListener); - } - } - - /** - * Returns the name of the keymap for this type of TextUI. - * - * This is implemented so that the classname of this TextUI - * without the package prefix is returned. This way subclasses - * don't have to override this method. - * - * @return the name of the keymap for this TextUI - */ - protected String getKeymapName() - { - String fullClassName = getClass().getName(); - int index = fullClassName.lastIndexOf('.'); - String className = fullClassName.substring(index + 1); - return className; - } - - /** - * Creates the {@link Keymap} that is installed on the text component. - * - * @return the {@link Keymap} that is installed on the text component - */ - protected Keymap createKeymap() - { - String keymapName = getKeymapName(); - Keymap keymap = JTextComponent.getKeymap(keymapName); - if (keymap == null) - { - Keymap parentMap = - JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP); - keymap = JTextComponent.addKeymap(keymapName, parentMap); - Object val = UIManager.get(getPropertyPrefix() + ".keyBindings"); - if (val != null && val instanceof JTextComponent.KeyBinding[]) - { - JTextComponent.KeyBinding[] bindings = - (JTextComponent.KeyBinding[]) val; - JTextComponent.loadKeymap(keymap, bindings, - getComponent().getActions()); - } - } - return keymap; - } - - /** - * Installs the keyboard actions on the text components. - */ - protected void installKeyboardActions() - { - // This is only there for backwards compatibility. - textComponent.setKeymap(createKeymap()); - - // load any bindings for the newer InputMap / ActionMap interface - SwingUtilities.replaceUIInputMap(textComponent, JComponent.WHEN_FOCUSED, - getInputMap()); - SwingUtilities.replaceUIActionMap(textComponent, getActionMap()); - } - - /** - * Creates an ActionMap to be installed on the text component. - * - * @return an ActionMap to be installed on the text component - */ - private ActionMap getActionMap() - { - // Note: There are no .actionMap entries in the standard L&Fs. However, - // with the RI it is possible to install action maps via such keys, so - // we must load them too. It can be observed that when there is no - // .actionMap entry in the UIManager, one gets installed after a text - // component of that type has been loaded. - String prefix = getPropertyPrefix(); - String amName = prefix + ".actionMap"; - ActionMap am = (ActionMap) UIManager.get(amName); - if (am == null) - { - am = createActionMap(); - UIManager.put(amName, am); - } - - ActionMap map = new ActionMapUIResource(); - map.setParent(am); - - return map; - } - - /** - * Creates a default ActionMap for text components that have no UI default - * for this (the standard for the built-in L&Fs). The ActionMap is copied - * from the text component's getActions() method. - * - * @returna default ActionMap - */ - private ActionMap createActionMap() - { - ActionMap am = new ActionMapUIResource(); - Action[] actions = textComponent.getActions(); - for (int i = actions.length - 1; i >= 0; i--) - { - Action action = actions[i]; - am.put(action.getValue(Action.NAME), action); - } - // Add TransferHandler's actions here. They don't seem to be in the - // JTextComponent's default actions, and I can't make up a better place - // to add them. - Action copyAction = TransferHandler.getCopyAction(); - am.put(copyAction.getValue(Action.NAME), copyAction); - Action cutAction = TransferHandler.getCutAction(); - am.put(cutAction.getValue(Action.NAME), cutAction); - Action pasteAction = TransferHandler.getPasteAction(); - am.put(pasteAction.getValue(Action.NAME), pasteAction); - - return am; - } - - /** - * Gets the input map for the specified <code>condition</code>. - * - * @return the InputMap for the specified condition - */ - private InputMap getInputMap() - { - InputMap im = new InputMapUIResource(); - String prefix = getPropertyPrefix(); - InputMap shared = - (InputMap) SharedUIDefaults.get(prefix + ".focusInputMap"); - if (shared != null) - im.setParent(shared); - return im; - } - - /** - * Uninstalls this TextUI from the text component. - * - * @param component the text component to uninstall the UI from - */ - public void uninstallUI(final JComponent component) - { - textComponent.removePropertyChangeListener(handler); - textComponent.getDocument().removeDocumentListener(handler); - rootView.setView(null); - - uninstallDefaults(); - uninstallFixedDefaults(); - uninstallListeners(); - uninstallKeyboardActions(); - - textComponent = null; - } - - /** - * Uninstalls all default properties that have previously been installed by - * this UI. - */ - protected void uninstallDefaults() - { - if (textComponent.getCaretColor() instanceof UIResource) - textComponent.setCaretColor(null); - if (textComponent.getSelectionColor() instanceof UIResource) - textComponent.setSelectionColor(null); - if (textComponent.getDisabledTextColor() instanceof UIResource) - textComponent.setDisabledTextColor(null); - if (textComponent.getSelectedTextColor() instanceof UIResource) - textComponent.setSelectedTextColor(null); - LookAndFeel.uninstallBorder(textComponent); - if (textComponent.getMargin() instanceof UIResource) - textComponent.setMargin(null); - } - - /** - * Uninstalls additional fixed defaults that were installed - * by installFixedDefaults(). - */ - private void uninstallFixedDefaults() - { - if (textComponent.getCaret() instanceof UIResource) - textComponent.setCaret(null); - if (textComponent.getHighlighter() instanceof UIResource) - textComponent.setHighlighter(null); - } - - /** - * Uninstalls all listeners that have previously been installed by - * this UI. - */ - protected void uninstallListeners() - { - // Don't nullify the focusListener field, as it is static and shared - // between components. - if (focusListener != null) - textComponent.removeFocusListener(focusListener); - } - - /** - * Uninstalls all keyboard actions that have previously been installed by - * this UI. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(textComponent, JComponent.WHEN_FOCUSED, - null); - SwingUtilities.replaceUIActionMap(textComponent, null); - } - - /** - * Returns the property prefix by which the text component's UIDefaults - * are looked up. - * - * @return the property prefix by which the text component's UIDefaults - * are looked up - */ - protected abstract String getPropertyPrefix(); - - /** - * Returns the preferred size of the text component. - * - * @param c not used here - * - * @return the preferred size of the text component - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension d = c.getSize(); - Insets i = c.getInsets(); - // We need to lock here, since we require the view hierarchy to _not_ - // change in between. - float w; - float h; - Document doc = textComponent.getDocument(); - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - try - { - if (d.width > (i.left + i.right) && d.height > (i.top + i.bottom)) - { - rootView.setSize(d.width - i.left - i.right, - d.height - i.top - i.bottom); - } - else - { - // Not laid out yet. Force some pseudo size. - rootView.setSize(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - w = rootView.getPreferredSpan(View.X_AXIS); - h = rootView.getPreferredSpan(View.Y_AXIS); - } - finally - { - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - Dimension size = new Dimension((int) w + i.left + i.right, - (int) h + i.top + i.bottom); - return size; - } - - /** - * Returns the maximum size for text components that use this UI. - * - * This returns (Integer.MAX_VALUE, Integer.MAX_VALUE). - * - * @param c not used here - * - * @return the maximum size for text components that use this UI - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension d = new Dimension(); - Insets i = c.getInsets(); - Document doc = textComponent.getDocument(); - // We need to lock here, since we require the view hierarchy to _not_ - // change in between. - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - try - { - // Check for overflow here. - d.width = (int) Math.min((long) rootView.getMaximumSpan(View.X_AXIS) - + i.left + i.right, Integer.MAX_VALUE); - d.height = (int) Math.min((long) rootView.getMaximumSpan(View.Y_AXIS) - + i.top + i.bottom, Integer.MAX_VALUE); - } - finally - { - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - return d; - } - - /** - * Returns the minimum size for text components. This returns the size - * of the component's insets. - * - * @return the minimum size for text components - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension d = new Dimension(); - Document doc = textComponent.getDocument(); - // We need to lock here, since we require the view hierarchy to _not_ - // change in between. - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - try - { - d.width = (int) rootView.getMinimumSpan(View.X_AXIS); - d.height = (int) rootView.getMinimumSpan(View.Y_AXIS); - } - finally - { - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - Insets i = c.getInsets(); - d.width += i.left + i.right; - d.height += i.top + i.bottom; - return d; - } - - /** - * Paints the text component. This acquires a read lock on the model and then - * calls {@link #paintSafely(Graphics)} in order to actually perform the - * painting. - * - * @param g the <code>Graphics</code> context to paint to - * @param c not used here - */ - public final void paint(Graphics g, JComponent c) - { - try - { - Document doc = textComponent.getDocument(); - if (doc instanceof AbstractDocument) - { - AbstractDocument aDoc = (AbstractDocument) doc; - aDoc.readLock(); - } - paintSafely(g); - } - finally - { - Document doc = textComponent.getDocument(); - if (doc instanceof AbstractDocument) - { - AbstractDocument aDoc = (AbstractDocument) doc; - aDoc.readUnlock(); - } - } - } - - /** - * This paints the text component while beeing sure that the model is not - * modified while painting. - * - * The following is performed in this order: - * <ol> - * <li>If the text component is opaque, the background is painted by - * calling {@link #paintBackground(Graphics)}.</li> - * <li>If there is a highlighter, the highlighter is painted.</li> - * <li>The view hierarchy is painted.</li> - * <li>The Caret is painter.</li> - * </ol> - * - * @param g the <code>Graphics</code> context to paint to - */ - protected void paintSafely(Graphics g) - { - Caret caret = textComponent.getCaret(); - Highlighter highlighter = textComponent.getHighlighter(); - - if (textComponent.isOpaque()) - paintBackground(g); - - // Try painting with the highlighter without checking whether there - // is a selection because a highlighter can be used to do more than - // marking selected text. - if (highlighter != null) - { - // Handle restoring of the color here to prevent - // drawing problems when the Highlighter implementor - // forgets to restore it. - Color oldColor = g.getColor(); - highlighter.paint(g); - g.setColor(oldColor); - } - - rootView.paint(g, getVisibleEditorRect()); - - if (caret != null && textComponent.hasFocus()) - caret.paint(g); - } - - /** - * Paints the background of the text component. - * - * @param g the <code>Graphics</code> context to paint to - */ - protected void paintBackground(Graphics g) - { - Color old = g.getColor(); - g.setColor(textComponent.getBackground()); - g.fillRect(0, 0, textComponent.getWidth(), textComponent.getHeight()); - g.setColor(old); - } - - /** - * Overridden for better control over background painting. This now simply - * calls {@link #paint} and this delegates the background painting to - * {@link #paintBackground}. - * - * @param g the graphics to use - * @param c the component to be painted - */ - public void update(Graphics g, JComponent c) - { - paint(g, c); - } - - /** - * Marks the specified range inside the text component's model as - * damaged and queues a repaint request. - * - * @param t the text component - * @param p0 the start location inside the document model of the range that - * is damaged - * @param p1 the end location inside the document model of the range that - * is damaged - */ - public void damageRange(JTextComponent t, int p0, int p1) - { - damageRange(t, p0, p1, Position.Bias.Forward, Position.Bias.Backward); - } - - /** - * Marks the specified range inside the text component's model as - * damaged and queues a repaint request. This variant of this method - * allows a {@link Position.Bias} object to be specified for the start - * and end location of the range. - * - * @param t the text component - * @param p0 the start location inside the document model of the range that - * is damaged - * @param p1 the end location inside the document model of the range that - * is damaged - * @param firstBias the bias for the start location - * @param secondBias the bias for the end location - */ - public void damageRange(JTextComponent t, int p0, int p1, - Position.Bias firstBias, Position.Bias secondBias) - { - Rectangle alloc = getVisibleEditorRect(); - if (alloc != null) - { - Document doc = t.getDocument(); - - // Acquire lock here to avoid structural changes in between. - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - try - { - rootView.setSize(alloc.width, alloc.height); - Shape damage = rootView.modelToView(p0, firstBias, p1, secondBias, - alloc); - Rectangle r = damage instanceof Rectangle ? (Rectangle) damage - : damage.getBounds(); - textComponent.repaint(r.x, r.y, r.width, r.height); - } - catch (BadLocationException ex) - { - // Lets ignore this as it causes no serious problems. - // For debugging, comment this out. - // ex.printStackTrace(); - } - finally - { - // Release lock. - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - } - } - - /** - * Returns the {@link EditorKit} used for the text component that is managed - * by this UI. - * - * @param t the text component - * - * @return the {@link EditorKit} used for the text component that is managed - * by this UI - */ - public EditorKit getEditorKit(JTextComponent t) - { - if (kit == null) - kit = new DefaultEditorKit(); - return kit; - } - - /** - * Gets the next position inside the document model that is visible on - * screen, starting from <code>pos</code>. - * - * @param t the text component - * @param pos the start positionn - * @param b the bias for pos - * @param direction the search direction - * @param biasRet filled by the method to indicate the bias of the return - * value - * - * @return the next position inside the document model that is visible on - * screen - */ - public int getNextVisualPositionFrom(JTextComponent t, int pos, - Position.Bias b, int direction, - Position.Bias[] biasRet) - throws BadLocationException - { - int offset = -1; - Document doc = textComponent.getDocument(); - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - try - { - Rectangle alloc = getVisibleEditorRect(); - if (alloc != null) - { - rootView.setSize(alloc.width, alloc.height); - offset = rootView.getNextVisualPositionFrom(pos, b, alloc, - direction, biasRet); - } - } - finally - { - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - return offset; - } - - /** - * Returns the root {@link View} of a text component. - * - * @return the root {@link View} of a text component - */ - public View getRootView(JTextComponent t) - { - return rootView; - } - - /** - * Maps a position in the document into the coordinate space of the View. - * The output rectangle usually reflects the font height but has a width - * of zero. A bias of {@link Position.Bias#Forward} is used in this method. - * - * @param t the text component - * @param pos the position of the character in the model - * - * @return a rectangle that gives the location of the document position - * inside the view coordinate space - * - * @throws BadLocationException if <code>pos</code> is invalid - * @throws IllegalArgumentException if b is not one of the above listed - * valid values - */ - public Rectangle modelToView(JTextComponent t, int pos) - throws BadLocationException - { - return modelToView(t, pos, Position.Bias.Forward); - } - - /** - * Maps a position in the document into the coordinate space of the View. - * The output rectangle usually reflects the font height but has a width - * of zero. - * - * @param t the text component - * @param pos the position of the character in the model - * @param bias either {@link Position.Bias#Forward} or - * {@link Position.Bias#Backward} depending on the preferred - * direction bias. If <code>null</code> this defaults to - * <code>Position.Bias.Forward</code> - * - * @return a rectangle that gives the location of the document position - * inside the view coordinate space - * - * @throws BadLocationException if <code>pos</code> is invalid - * @throws IllegalArgumentException if b is not one of the above listed - * valid values - */ - public Rectangle modelToView(JTextComponent t, int pos, Position.Bias bias) - throws BadLocationException - { - // We need to read-lock here because we depend on the document - // structure not beeing changed in between. - Document doc = textComponent.getDocument(); - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - Rectangle rect = null; - try - { - Rectangle r = getVisibleEditorRect(); - if (r != null) - { - rootView.setSize(r.width, r.height); - Shape s = rootView.modelToView(pos, r, bias); - if (s != null) - rect = s.getBounds(); - } - } - finally - { - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - return rect; - } - - /** - * Maps a point in the <code>View</code> coordinate space to a position - * inside a document model. - * - * @param t the text component - * @param pt the point to be mapped - * - * @return the position inside the document model that corresponds to - * <code>pt</code> - */ - public int viewToModel(JTextComponent t, Point pt) - { - return viewToModel(t, pt, new Position.Bias[1]); - } - - /** - * Maps a point in the <code>View</code> coordinate space to a position - * inside a document model. - * - * @param t the text component - * @param pt the point to be mapped - * @param biasReturn filled in by the method to indicate the bias of the - * return value - * - * @return the position inside the document model that corresponds to - * <code>pt</code> - */ - public int viewToModel(JTextComponent t, Point pt, Position.Bias[] biasReturn) - { - int offset = -1; - Document doc = textComponent.getDocument(); - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readLock(); - try - { - Rectangle alloc = getVisibleEditorRect(); - if (alloc != null) - { - rootView.setSize(alloc.width, alloc.height); - offset = rootView.viewToModel(pt.x, pt.y, alloc, biasReturn); - } - } - finally - { - if (doc instanceof AbstractDocument) - ((AbstractDocument) doc).readUnlock(); - } - return offset; - } - - /** - * Creates a {@link View} for the specified {@link Element}. - * - * @param elem the <code>Element</code> to create a <code>View</code> for - * - * @see ViewFactory - */ - public View create(Element elem) - { - // Subclasses have to implement this to get this functionality. - return null; - } - - /** - * Creates a {@link View} for the specified {@link Element}. - * - * @param elem the <code>Element</code> to create a <code>View</code> for - * @param p0 the start offset - * @param p1 the end offset - * - * @see ViewFactory - */ - public View create(Element elem, int p0, int p1) - { - // Subclasses have to implement this to get this functionality. - return null; - } - - /** - * A cached Insets instance to be reused below. - */ - private Insets cachedInsets; - - /** - * Returns the allocation to give the root view. - * - * @return the allocation to give the root view - * - * @specnote The allocation has nothing to do with visibility. According - * to the specs the naming of this method is unfortunate and - * has historical reasons - */ - protected Rectangle getVisibleEditorRect() - { - int width = textComponent.getWidth(); - int height = textComponent.getHeight(); - - // Return null if the component has no valid size. - if (width <= 0 || height <= 0) - return null; - - Insets insets = textComponent.getInsets(cachedInsets); - return new Rectangle(insets.left, insets.top, - width - insets.left - insets.right, - height - insets.top - insets.bottom); - } - - /** - * Sets the root view for the text component. - * - * @param view the <code>View</code> to be set as root view - */ - protected final void setView(View view) - { - rootView.setView(view); - textComponent.revalidate(); - textComponent.repaint(); - } - - /** - * Indicates that the model of a text component has changed. This - * triggers a rebuild of the view hierarchy. - */ - protected void modelChanged() - { - if (textComponent == null || rootView == null) - return; - ViewFactory factory = rootView.getViewFactory(); - if (factory == null) - return; - Document doc = textComponent.getDocument(); - if (doc == null) - return; - Element elem = doc.getDefaultRootElement(); - if (elem == null) - return; - View view = factory.create(elem); - setView(view); - } - - /** - * Receives notification whenever one of the text component's bound - * properties changes. This default implementation does nothing. - * It is a hook that enables subclasses to react to property changes - * on the text component. - * - * @param ev the property change event - */ - protected void propertyChange(PropertyChangeEvent ev) - { - // The default implementation does nothing. - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicToggleButtonUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicToggleButtonUI.java deleted file mode 100644 index 4550f08..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicToggleButtonUI.java +++ /dev/null @@ -1,134 +0,0 @@ -/* BasicToggleButtonUI.java - Copyright (C) 2002, 2004, 2005, 2006, 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.plaf.basic; - -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.AbstractButton; -import javax.swing.JComponent; -import javax.swing.JToggleButton; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate for the {@link JToggleButton} component. - */ -public class BasicToggleButtonUI extends BasicButtonUI -{ - - /** - * Returns a UI delegate for the specified component. - * - * @param component the component (should be an instance of - * {@link JToggleButton}). - * - * @return An instance of <code>BasicToggleButtonUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new BasicToggleButtonUI(); - } - - /** - * Returns the prefix for entries in the {@link UIManager} defaults table - * (<code>"ToggleButton."</code> in this case). - * - * @return <code>"ToggleButton."</code> - */ - protected String getPropertyPrefix() - { - return "ToggleButton."; - } - - /** - * Paint the component, which is an {@link AbstractButton}, according to - * its current state. - * - * @param g The graphics context to paint with - * @param c The component to paint the state of - */ - public void paint(Graphics g, JComponent c) - { - AbstractButton b = (AbstractButton) c; - - Rectangle tr = new Rectangle(); - Rectangle ir = new Rectangle(); - Rectangle vr = new Rectangle(); - - Font f = c.getFont(); - - g.setFont(f); - - if (b.isBorderPainted()) - SwingUtilities.calculateInnerArea(b, vr); - else - vr = SwingUtilities.getLocalBounds(b); - String text = SwingUtilities.layoutCompoundLabel(c, g.getFontMetrics(f), - b.getText(), currentIcon(b), b.getVerticalAlignment(), - b.getHorizontalAlignment(), b.getVerticalTextPosition(), - b.getHorizontalTextPosition(), vr, ir, tr, b.getIconTextGap() - + defaultTextShiftOffset); - - if ((b.getModel().isArmed() && b.getModel().isPressed()) - || b.isSelected()) - paintButtonPressed(g, b); - - paintIcon(g, b, ir); - if (text != null) - paintText(g, b, tr, text); - if (b.isFocusOwner() && b.isFocusPainted()) - paintFocus(g, b, vr, tr, ir); - } - - /** - * Paints the icon for the toggle button. This delegates to - * {@link BasicButtonUI#paintIcon(Graphics, JComponent, Rectangle)}. - * - * @param g the graphics context - * @param b the button to paint the icon for - * @param iconRect the area allocated for the icon - */ - protected void paintIcon(Graphics g, AbstractButton b, Rectangle iconRect) - { - super.paintIcon(g, b, iconRect); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java deleted file mode 100644 index 79cf0b0..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicToolBarSeparatorUI.java +++ /dev/null @@ -1,124 +0,0 @@ -/* BasicToolBarSeparatorUI.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.Dimension; -import java.awt.Graphics; - -import javax.swing.JComponent; -import javax.swing.JSeparator; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; - -/** - * The Basic Look and Feel UI delegate for Separator. - */ -public class BasicToolBarSeparatorUI extends BasicSeparatorUI -{ - private transient Dimension size; - - /** - * Creates a new UI delegate for the given JComponent. - * - * @param c The JComponent to create a delegate for. - * - * @return A new BasicToolBarSeparatorUI. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicToolBarSeparatorUI(); - } - - /** - * This method installs the defaults that are given by the Basic L&F. - * - * @param s The Separator that is being installed. - */ - protected void installDefaults(JSeparator s) - { - size = UIManager.getDimension("ToolBar.separatorSize"); - } - - /** - * This method does nothing as a Separator is just blank space. - * - * @param g The Graphics object to paint with - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - // Do nothing. - } - - /** - * This method returns the preferred size of the JComponent. - * - * @param c The JComponent to measure. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - return size; - } - - /** - * This method returns the minimum size of the JComponent. - * - * @param c The JComponent to measure. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - return size; - } - - /** - * This method returns the maximum size of the JComponent. - * - * @param c The JComponent to measure. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return size; - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java deleted file mode 100644 index f5b2b2d..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicToolBarUI.java +++ /dev/null @@ -1,1610 +0,0 @@ -/* BasicToolBarUI.java -- - Copyright (C) 2004, 2005, 2006 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.plaf.basic; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.ContainerEvent; -import java.awt.event.ContainerListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Hashtable; - -import javax.swing.AbstractAction; -import javax.swing.AbstractButton; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JToolBar; -import javax.swing.KeyStroke; -import javax.swing.LookAndFeel; -import javax.swing.RootPaneContainer; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.border.CompoundBorder; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ToolBarUI; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicBorders.ButtonBorder; - -/** - * This is the Basic Look and Feel UI class for JToolBar. - */ -public class BasicToolBarUI extends ToolBarUI implements SwingConstants -{ - - /** - * Implements the keyboard actions for JToolBar. - */ - static class ToolBarAction - extends AbstractAction - { - /** - * Performs the action. - */ - public void actionPerformed(ActionEvent event) - { - Object cmd = getValue("__command__"); - JToolBar toolBar = (JToolBar) event.getSource(); - BasicToolBarUI ui = (BasicToolBarUI) toolBar.getUI(); - - if (cmd.equals("navigateRight")) - ui.navigateFocusedComp(EAST); - else if (cmd.equals("navigateLeft")) - ui.navigateFocusedComp(WEST); - else if (cmd.equals("navigateUp")) - ui.navigateFocusedComp(NORTH); - else if (cmd.equals("navigateDown")) - ui.navigateFocusedComp(SOUTH); - else - assert false : "Shouldn't reach here"; - } - } - - /** Static owner of all DragWindows. - * This is package-private to avoid an accessor method. */ - static JFrame owner = new JFrame(); - - /** The border used when the JToolBar is in nonrollover mode. */ - private static Border nonRolloverBorder; - - /** The border used when the JToolBar is in rollover mode. */ - private static Border rolloverBorder; - - /** The last known BorderLayout constraint before floating. */ - protected String constraintBeforeFloating; - - /** The last known orientation of the JToolBar before floating. - * This is package-private to avoid an accessor method. */ - int lastGoodOrientation; - - /** The color of the border when it is dockable. */ - protected Color dockingBorderColor; - - /** The background color of the JToolBar when it is dockable. */ - protected Color dockingColor; - - /** The docking listener responsible for mouse events on the JToolBar. */ - protected MouseInputListener dockingListener; - - /** The window used for dragging the JToolBar. */ - protected BasicToolBarUI.DragWindow dragWindow; - - /** The color of the border when it is not dockable. */ - protected Color floatingBorderColor; - - /** The background color of the JToolBar when it is not dockable. */ - protected Color floatingColor; - - /** The index of the focused component. */ - protected int focusedCompIndex; - - /** The PropertyChangeListener for the JToolBar. */ - protected PropertyChangeListener propertyListener; - - /** The JToolBar this UI delegate is responsible for. */ - protected JToolBar toolBar; - - /** The Container listener for the JToolBar. */ - protected ContainerListener toolBarContListener; - - /** The Focus listener for the JToolBar. */ - protected FocusListener toolBarFocusListener; - - /** - * @deprecated since JDK1.3. - */ - protected KeyStroke leftKey; - - /** - * @deprecated since JDK1.3. - */ - protected KeyStroke rightKey; - - /** - * @deprecated since JDK1.3. - */ - protected KeyStroke upKey; - - /** - * @deprecated since JDK1.3. - */ - protected KeyStroke downKey; - - /** - * The floating window that is responsible for holding the JToolBar when it - * is dragged outside of its original parent. - */ - private transient Window floatFrame; - - /** The original parent of the JToolBar. - * This is package-private to avoid an accessor method. */ - transient Container origParent; - - /** A hashtable of components and their original borders. - * This is package-private to avoid an accessor method. */ - transient Hashtable borders; - - /** A window listener for the floatable frame. */ - private transient WindowListener windowListener; - - /** A set of cached bounds of the JToolBar. - * This is package-private to avoid an accessor method. */ - transient Dimension cachedBounds; - - /** The cached orientation of the JToolBar. - * This is package-private to avoid an accessor method. */ - transient int cachedOrientation; - - /** - * This method creates a new <code>BasicToolBarUI</code> object for the given JToolBar. - */ - public BasicToolBarUI() - { - // Do nothing here. - } - - /** - * This method returns whether the JToolBar can dock at the given position. - * - * @param c The component to try to dock in. - * @param p The position of the mouse cursor relative to the given - * component. - * - * @return Whether the JToolBar can dock. - */ - public boolean canDock(Component c, Point p) - { - return areaOfClick(c, p) != -1; - } - - /** - * This helper method returns the position of the JToolBar if it can dock. - * - * @param c The component to try to dock in. - * @param p The position of the mouse cursor relative to the given - * component. - * - * @return One of the SwingConstants directions or -1 if the JToolBar can't - * dock. - */ - private int areaOfClick(Component c, Point p) - { - // Has to dock in immediate parent, not eventual root container. - Rectangle pBounds = c.getBounds(); - - // XXX: In Sun's implementation, the space the toolbar has to dock is dependent on the size it had last. - Dimension d = toolBar.getSize(); - int limit = Math.min(d.width, d.height); - - // The order of checking is 1. top 2. bottom 3. left 4. right - if (! pBounds.contains(p)) - return -1; - - if (p.y < limit) - return SwingConstants.NORTH; - - if (p.y > (pBounds.height - limit)) - return SwingConstants.SOUTH; - - if (p.x < limit) - return SwingConstants.WEST; - - if (p.x > (pBounds.width - limit)) - return SwingConstants.EAST; - - return -1; - } - - /** - * This method creates a new DockingListener for the JToolBar. - * - * @return A new DockingListener for the JToolBar. - */ - protected MouseInputListener createDockingListener() - { - return new DockingListener(toolBar); - } - - /** - * This method creates a new DragWindow for the given JToolBar. - * - * @param toolbar The JToolBar to create a DragWindow for. - * - * @return A new DragWindow. - */ - protected BasicToolBarUI.DragWindow createDragWindow(JToolBar toolbar) - { - return new DragWindow(); - } - - /** - * This method creates a new floating frame for the JToolBar. By default, - * this UI uses createFloatingWindow instead. This method of creating a - * floating frame is deprecated. - * - * @param toolbar The JToolBar to create a floating frame for. - * - * @return A new floating frame. - */ - protected JFrame createFloatingFrame(JToolBar toolbar) - { - // FIXME: Though deprecated, this should still work. - return null; - } - - /** - * This method creates a new floating window for the JToolBar. This is the - * method used by default to create a floating container for the JToolBar. - * - * @param toolbar The JToolBar to create a floating window for. - * - * @return A new floating window. - */ - protected RootPaneContainer createFloatingWindow(JToolBar toolbar) - { - // This one is used by default though. - return new ToolBarDialog(); - } - - /** - * This method creates a new WindowListener for the JToolBar. - * - * @return A new WindowListener. - */ - protected WindowListener createFrameListener() - { - return new FrameListener(); - } - - /** - * This method creates a new nonRolloverBorder for JButtons when the - * JToolBar's rollover property is set to false. - * - * @return A new NonRolloverBorder. - */ - protected Border createNonRolloverBorder() - { - Border b = UIManager.getBorder("ToolBar.nonrolloverBorder"); - - if (b == null) - { - b = new CompoundBorder( - new ButtonBorder(UIManager.getColor("Button.shadow"), - UIManager.getColor("Button.darkShadow"), - UIManager.getColor("Button.light"), - UIManager.getColor("Button.highlight")), - BasicBorders.getMarginBorder()); - } - - return b; } - - /** - * This method creates a new PropertyChangeListener for the JToolBar. - * - * @return A new PropertyChangeListener. - */ - protected PropertyChangeListener createPropertyListener() - { - return new PropertyListener(); - } - - /** - * This method creates a new rollover border for JButtons when the - * JToolBar's rollover property is set to true. - * - * @return A new rollover border. - */ - protected Border createRolloverBorder() - { - Border b = UIManager.getBorder("ToolBar.rolloverBorder"); - - if (b == null) - { - b = new CompoundBorder( - new ButtonBorder(UIManager.getColor("Button.shadow"), - UIManager.getColor("Button.darkShadow"), - UIManager.getColor("Button.light"), - UIManager.getColor("Button.highlight")), - BasicBorders.getMarginBorder()); - } - - return b; - } - - /** - * This method creates a new Container listener for the JToolBar. - * - * @return A new Container listener. - */ - protected ContainerListener createToolBarContListener() - { - return new ToolBarContListener(); - } - - /** - * This method creates a new FocusListener for the JToolBar. - * - * @return A new FocusListener for the JToolBar. - */ - protected FocusListener createToolBarFocusListener() - { - return new ToolBarFocusListener(); - } - - /** - * This method creates a new UI delegate for the given JComponent. - * - * @param c The JComponent to create a UI delegate for. - * - * @return A new UI delegate. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicToolBarUI(); - } - - /** - * This method is called to drag the DragWindow around when the JToolBar is - * being dragged around. - * - * @param position The mouse cursor coordinates relative to the JToolBar. - * @param origin The screen position of the JToolBar. - */ - protected void dragTo(Point position, Point origin) - { - int loc = areaOfClick(origParent, - SwingUtilities.convertPoint(toolBar, position, - origParent)); - - if (loc != -1) - { - dragWindow.setBorderColor(dockingBorderColor); - dragWindow.setBackground(dockingColor); - } - else - { - dragWindow.setBorderColor(floatingBorderColor); - dragWindow.setBackground(floatingColor); - } - - int w = 0; - int h = 0; - - boolean tmp = (loc == SwingConstants.NORTH) - || (loc == SwingConstants.SOUTH) || (loc == -1); - - cachedOrientation = toolBar.getOrientation(); - cachedBounds = toolBar.getSize(); - if (((cachedOrientation == SwingConstants.HORIZONTAL) && tmp) - || ((cachedOrientation == VERTICAL) && ! tmp)) - { - w = cachedBounds.width; - h = cachedBounds.height; - } - else - { - w = cachedBounds.height; - h = cachedBounds.width; - } - - Point p = dragWindow.getOffset(); - Insets insets = toolBar.getInsets(); - - dragWindow.setBounds((origin.x + position.x) - p.x - - ((insets.left + insets.right) / 2), - (origin.y + position.y) - p.y - - ((insets.top + insets.bottom) / 2), w, h); - - if (! dragWindow.isVisible()) - dragWindow.show(); - } - - /** - * This method is used at the end of a drag session to place the frame in - * either its original parent as a docked JToolBar or in its floating - * frame. - * - * @param position The position of the mouse cursor relative to the - * JToolBar. - * @param origin The screen position of the JToolBar before the drag session - * started. - */ - protected void floatAt(Point position, Point origin) - { - Point p = new Point(position); - int aoc = areaOfClick(origParent, - SwingUtilities.convertPoint(toolBar, p, origParent)); - - Container oldParent = toolBar.getParent(); - - oldParent.remove(toolBar); - oldParent.doLayout(); - oldParent.repaint(); - - Container newParent; - - if (aoc == -1) - newParent = ((RootPaneContainer) floatFrame).getContentPane(); - else - { - floatFrame.hide(); - newParent = origParent; - } - - String constraint; - switch (aoc) - { - case SwingConstants.EAST: - constraint = BorderLayout.EAST; - break; - case SwingConstants.NORTH: - constraint = BorderLayout.NORTH; - break; - case SwingConstants.SOUTH: - constraint = BorderLayout.SOUTH; - break; - case SwingConstants.WEST: - constraint = BorderLayout.WEST; - break; - default: - constraint = BorderLayout.CENTER; - break; - } - - int newOrientation = SwingConstants.HORIZONTAL; - if ((aoc != -1) - && ((aoc == SwingConstants.EAST) || (aoc == SwingConstants.WEST))) - newOrientation = SwingConstants.VERTICAL; - - if (aoc != -1) - { - constraintBeforeFloating = constraint; - lastGoodOrientation = newOrientation; - } - - newParent.add(toolBar, constraint); - - setFloating(aoc == -1, null); - toolBar.setOrientation(newOrientation); - - Insets insets = floatFrame.getInsets(); - Dimension dims = toolBar.getPreferredSize(); - p = dragWindow.getOffset(); - setFloatingLocation((position.x + origin.x) - p.x - - ((insets.left + insets.right) / 2), - (position.y + origin.y) - p.y - - ((insets.top + insets.bottom) / 2)); - - if (aoc == -1) - { - floatFrame.pack(); - floatFrame.setSize(dims.width + insets.left + insets.right, - dims.height + insets.top + insets.bottom); - floatFrame.show(); - } - - newParent.invalidate(); - newParent.validate(); - newParent.repaint(); - } - - /** - * This method returns the docking color. - * - * @return The docking color. - */ - public Color getDockingColor() - { - return dockingColor; - } - - /** - * This method returns the Color which is displayed when over a floating - * area. - * - * @return The color which is displayed when over a floating area. - */ - public Color getFloatingColor() - { - return floatingColor; - } - - /** - * This method returns the maximum size of the given JComponent for this UI. - * - * @param c The JComponent to find the maximum size for. - * - * @return The maximum size for this UI. - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method returns the minimum size of the given JComponent for this UI. - * - * @param c The JComponent to find a minimum size for. - * - * @return The minimum size for this UI. - */ - public Dimension getMinimumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * This method installs the needed components for the JToolBar. - */ - protected void installComponents() - { - floatFrame = (Window) createFloatingWindow(toolBar); - - dragWindow = createDragWindow(toolBar); - - nonRolloverBorder = createNonRolloverBorder(); - rolloverBorder = createRolloverBorder(); - - borders = new Hashtable(); - setRolloverBorders(toolBar.isRollover()); - - fillHashtable(); - } - - /** - * This method installs the defaults as specified by the look and feel. - */ - protected void installDefaults() - { - LookAndFeel.installBorder(toolBar, "ToolBar.border"); - LookAndFeel.installColorsAndFont(toolBar, "ToolBar.background", - "ToolBar.foreground", "ToolBar.font"); - - dockingBorderColor = UIManager.getColor("ToolBar.dockingForeground"); - dockingColor = UIManager.getColor("ToolBar.dockingBackground"); - - floatingBorderColor = UIManager.getColor("ToolBar.floatingForeground"); - floatingColor = UIManager.getColor("ToolBar.floatingBackground"); - } - - /** - * This method installs the keyboard actions for the JToolBar as specified - * by the look and feel. - */ - protected void installKeyboardActions() - { - // Install the input map. - InputMap inputMap = - (InputMap) SharedUIDefaults.get("ToolBar.ancestorInputMap"); - SwingUtilities.replaceUIInputMap(toolBar, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, - inputMap); - - // FIXME: The JDK uses a LazyActionMap for parentActionMap - SwingUtilities.replaceUIActionMap(toolBar, getActionMap()); - } - - /** - * Fetches the action map from the UI defaults, or create a new one - * if the action map hasn't been initialized. - * - * @return the action map - */ - private ActionMap getActionMap() - { - ActionMap am = (ActionMap) UIManager.get("ToolBar.actionMap"); - if (am == null) - { - am = createDefaultActions(); - UIManager.getLookAndFeelDefaults().put("ToolBar.actionMap", am); - } - return am; - } - - private ActionMap createDefaultActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - Action action = new ToolBarAction(); - - am.put("navigateLeft", action); - am.put("navigateRight", action); - am.put("navigateUp", action); - am.put("navigateDown", action); - - return am; - } - - /** - * This method installs listeners for the JToolBar. - */ - protected void installListeners() - { - dockingListener = createDockingListener(); - toolBar.addMouseListener(dockingListener); - toolBar.addMouseMotionListener(dockingListener); - - propertyListener = createPropertyListener(); - toolBar.addPropertyChangeListener(propertyListener); - - toolBarContListener = createToolBarContListener(); - toolBar.addContainerListener(toolBarContListener); - - windowListener = createFrameListener(); - floatFrame.addWindowListener(windowListener); - - toolBarFocusListener = createToolBarFocusListener(); - if (toolBarFocusListener != null) - { - int count = toolBar.getComponentCount(); - for (int i = 0; i < count; i++) - toolBar.getComponent(i).addFocusListener(toolBarFocusListener); - } - } - - /** - * This method installs non rollover borders for each component inside the - * given JComponent. - * - * @param c The JComponent whose children need to have non rollover borders - * installed. - */ - protected void installNonRolloverBorders(JComponent c) - { - Component[] components = toolBar.getComponents(); - - for (int i = 0; i < components.length; i++) - setBorderToNonRollover(components[i]); - } - - /** - * This method installs normal (or their original) borders for each - * component inside the given JComponent. - * - * @param c The JComponent whose children need to have their original - * borders installed. - */ - protected void installNormalBorders(JComponent c) - { - Component[] components = toolBar.getComponents(); - - for (int i = 0; i < components.length; i++) - setBorderToNormal(components[i]); - } - - /** - * This method install rollover borders for each component inside the given - * JComponent. - * - * @param c The JComponent whose children need to have rollover borders - * installed. - */ - protected void installRolloverBorders(JComponent c) - { - Component[] components = toolBar.getComponents(); - - for (int i = 0; i < components.length; i++) - setBorderToRollover(components[i]); - } - - /** - * This method fills the borders hashtable with a list of components that - * are JButtons and their borders. - */ - private void fillHashtable() - { - Component[] c = toolBar.getComponents(); - - for (int i = 0; i < c.length; i++) - { - if (c[i] instanceof JButton) - { - // Don't really care about anything other than JButtons - JButton b = (JButton) c[i]; - - if (b.getBorder() != null) - borders.put(b, b.getBorder()); - } - } - } - - /** - * This method installs the UI for the given JComponent. - * - * @param c The JComponent to install a UI for. - */ - public void installUI(JComponent c) - { - super.installUI(c); - - if (c instanceof JToolBar) - { - toolBar = (JToolBar) c; - installDefaults(); - installComponents(); - installListeners(); - installKeyboardActions(); - } - } - - /** - * This method returns whether the JToolBar is floating. - * - * @return Whether the JToolBar is floating. - */ - public boolean isFloating() - { - return floatFrame.isVisible(); - } - - /** - * This method returns whether rollover borders have been set. - * - * @return Whether rollover borders have been set. - */ - public boolean isRolloverBorders() - { - return toolBar.isRollover(); - } - - /** - * This method navigates in the given direction giving focus to the next - * component in the given direction. - * - * @param direction The direction to give focus to. - */ - protected void navigateFocusedComp(int direction) - { - int count = toolBar.getComponentCount(); - switch (direction) - { - case EAST: - case SOUTH: - if (focusedCompIndex >= 0 && focusedCompIndex < count) - { - int i = focusedCompIndex + 1; - boolean focusRequested = false; - // Find component to focus and request focus on it. - while (i != focusedCompIndex && ! focusRequested) - { - if (i >= count) - i = 0; - Component comp = toolBar.getComponentAtIndex(i++); - if (comp != null && comp.isFocusable() - && comp.isEnabled()) - { - comp.requestFocus(); - focusRequested = true; - } - } - } - break; - case WEST: - case NORTH: - if (focusedCompIndex >= 0 && focusedCompIndex < count) - { - int i = focusedCompIndex - 1; - boolean focusRequested = false; - // Find component to focus and request focus on it. - while (i != focusedCompIndex && ! focusRequested) - { - if (i < 0) - i = count - 1; - Component comp = toolBar.getComponentAtIndex(i--); - if (comp != null && comp.isFocusable() - && comp.isEnabled()) - { - comp.requestFocus(); - focusRequested = true; - } - } - } - break; - default: - break; - } - } - - /** - * This method sets the border of the given component to a non rollover - * border. - * - * @param c The Component whose border needs to be set. - */ - protected void setBorderToNonRollover(Component c) - { - if (c instanceof AbstractButton) - { - AbstractButton b = (AbstractButton) c; - b.setRolloverEnabled(false); - - // Save old border in hashtable. - if (b.getBorder() != null) - borders.put(b, b.getBorder()); - - b.setBorder(nonRolloverBorder); - } - } - - /** - * This method sets the border of the given component to its original value. - * - * @param c The Component whose border needs to be set. - */ - protected void setBorderToNormal(Component c) - { - if (c instanceof AbstractButton) - { - AbstractButton b = (AbstractButton) c; - b.setRolloverEnabled(true); - b.setBorder((Border) borders.remove(b)); - } - } - - /** - * This method sets the border of the given component to a rollover border. - * - * @param c The Component whose border needs to be set. - */ - protected void setBorderToRollover(Component c) - { - if (c instanceof AbstractButton) - { - AbstractButton b = (AbstractButton) c; - b.setRolloverEnabled(false); - - // Save old border in hashtable. - if (b.getBorder() != null) - borders.put(b, b.getBorder()); - - b.setBorder(rolloverBorder); - } - } - - /** - * This method sets the docking color. - * - * @param c The docking color. - */ - public void setDockingColor(Color c) - { - dockingColor = c; - } - - /** - * This method sets the floating property for the JToolBar. - * - * @param b Whether the JToolBar is floating. - * @param p FIXME - */ - public void setFloating(boolean b, Point p) - { - // FIXME: use p for something. It's not location - // since we already have setFloatingLocation. - floatFrame.setVisible(b); - } - - /** - * This method sets the color displayed when the JToolBar is not in a - * dockable area. - * - * @param c The floating color. - */ - public void setFloatingColor(Color c) - { - floatingColor = c; - } - - /** - * This method sets the floating location of the JToolBar. - * - * @param x The x coordinate for the floating frame. - * @param y The y coordinate for the floating frame. - */ - public void setFloatingLocation(int x, int y) - { - // x,y are the coordinates of the new JFrame created to store the toolbar - // XXX: The floating location is bogus is not floating. - floatFrame.setLocation(x, y); - floatFrame.invalidate(); - floatFrame.validate(); - floatFrame.repaint(); - } - - /** - * This is a convenience method for changing the orientation of the - * JToolBar. - * - * @param orientation The new orientation. - */ - public void setOrientation(int orientation) - { - toolBar.setOrientation(orientation); - } - - /** - * This method changes the child components to have rollover borders if the - * given parameter is true. Otherwise, the components are set to have non - * rollover borders. - * - * @param rollover Whether the children will have rollover borders. - */ - public void setRolloverBorders(boolean rollover) - { - if (rollover) - installRolloverBorders(toolBar); - else - installNonRolloverBorders(toolBar); - } - - /** - * This method uninstall UI installed components from the JToolBar. - */ - protected void uninstallComponents() - { - installNormalBorders(toolBar); - borders = null; - cachedBounds = null; - - floatFrame = null; - dragWindow = null; - } - - /** - * This method removes the defaults installed by the Look and Feel. - */ - protected void uninstallDefaults() - { - toolBar.setBackground(null); - toolBar.setForeground(null); - toolBar.setFont(null); - - dockingBorderColor = null; - dockingColor = null; - floatingBorderColor = null; - floatingColor = null; - } - - /** - * This method uninstalls keyboard actions installed by the UI. - */ - protected void uninstallKeyboardActions() - { - SwingUtilities.replaceUIInputMap(toolBar, JComponent. - WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, null); - SwingUtilities.replaceUIActionMap(toolBar, null); - } - - /** - * This method uninstalls listeners installed by the UI. - */ - protected void uninstallListeners() - { - if (toolBarFocusListener != null) - { - int count = toolBar.getComponentCount(); - for (int i = 0; i < count; i++) - toolBar.getComponent(i).removeFocusListener(toolBarFocusListener); - toolBarFocusListener = null; - } - - floatFrame.removeWindowListener(windowListener); - windowListener = null; - - toolBar.removeContainerListener(toolBarContListener); - toolBarContListener = null; - - toolBar.removeMouseMotionListener(dockingListener); - toolBar.removeMouseListener(dockingListener); - dockingListener = null; - } - - /** - * This method uninstalls the UI. - * - * @param c The JComponent that is having this UI removed. - */ - public void uninstallUI(JComponent c) - { - uninstallKeyboardActions(); - uninstallListeners(); - uninstallComponents(); - uninstallDefaults(); - toolBar = null; - } - - /** - * This is the MouseHandler class that allows the user to drag the JToolBar - * in and out of the parent and dock it if it can. - */ - public class DockingListener implements MouseInputListener - { - /** Whether the JToolBar is being dragged. */ - protected boolean isDragging; - - /** - * The origin point. This point is saved from the beginning press and is - * used until the end of the drag session. - */ - protected Point origin; - - /** The JToolBar being dragged. */ - protected JToolBar toolBar; - - /** - * Creates a new DockingListener object. - * - * @param t The JToolBar this DockingListener is being used for. - */ - public DockingListener(JToolBar t) - { - toolBar = t; - } - - /** - * This method is called when the mouse is clicked. - * - * @param e The MouseEvent. - */ - public void mouseClicked(MouseEvent e) - { - // Nothing to do here. - } - - /** - * This method is called when the mouse is dragged. It delegates the drag - * painting to the dragTo method. - * - * @param e The MouseEvent. - */ - public void mouseDragged(MouseEvent e) - { - if (isDragging) - dragTo(e.getPoint(), origin); - } - - /** - * This method is called when the mouse enters the JToolBar. - * - * @param e The MouseEvent. - */ - public void mouseEntered(MouseEvent e) - { - // Nothing to do here. - } - - /** - * This method is called when the mouse exits the JToolBar. - * - * @param e The MouseEvent. - */ - public void mouseExited(MouseEvent e) - { - // Nothing to do here. - } - - /** - * This method is called when the mouse is moved in the JToolBar. - * - * @param e The MouseEvent. - */ - public void mouseMoved(MouseEvent e) - { - // Nothing to do here. - } - - /** - * This method is called when the mouse is pressed in the JToolBar. If the - * press doesn't occur in a place where it causes the JToolBar to be - * dragged, it returns. Otherwise, it starts a drag session. - * - * @param e The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - if (! toolBar.isFloatable()) - return; - - Point ssd = e.getPoint(); - Insets insets = toolBar.getInsets(); - - // Verify that this click occurs in the top inset. - if (toolBar.getOrientation() == SwingConstants.HORIZONTAL) - { - if (e.getX() > insets.left) - return; - } - else - { - if (e.getY() > insets.top) - return; - } - - origin = new Point(0, 0); - if (toolBar.isShowing()) - SwingUtilities.convertPointToScreen(ssd, toolBar); - - if (! (SwingUtilities.getAncestorOfClass(Window.class, toolBar) instanceof UIResource)) - // Need to know who keeps the toolBar if it gets dragged back into it. - origParent = toolBar.getParent(); - - if (toolBar.isShowing()) - SwingUtilities.convertPointToScreen(origin, toolBar); - - isDragging = true; - - if (dragWindow != null) - dragWindow.setOffset(new Point(cachedBounds.width / 2, - cachedBounds.height / 2)); - - dragTo(e.getPoint(), origin); - } - - /** - * This method is called when the mouse is released from the JToolBar. - * - * @param e The MouseEvent. - */ - public void mouseReleased(MouseEvent e) - { - if (! isDragging || ! toolBar.isFloatable()) - return; - - isDragging = false; - floatAt(e.getPoint(), origin); - dragWindow.hide(); - } - } - - /** - * This is the window that appears when the JToolBar is being dragged - * around. - */ - protected class DragWindow extends Window - { - /** - * The current border color. It changes depending on whether the JToolBar - * is over a place that allows it to dock. - */ - private Color borderColor; - - /** The between the mouse and the top left corner of the window. */ - private Point offset; - - /** - * Creates a new DragWindow object. - * This is package-private to avoid an accessor method. - */ - DragWindow() - { - super(owner); - } - - /** - * The color that the border should be. - * - * @return The border color. - */ - public Color getBorderColor() - { - if (borderColor == null) - return Color.BLACK; - - return borderColor; - } - - /** - * This method returns the insets for the DragWindow. - * - * @return The insets for the DragWindow. - */ - public Insets getInsets() - { - // This window has no decorations, so insets are empty. - return new Insets(0, 0, 0, 0); - } - - /** - * This method returns the mouse offset from the top left corner of the - * DragWindow. - * - * @return The mouse offset. - */ - public Point getOffset() - { - return offset; - } - - /** - * This method paints the DragWindow. - * - * @param g The Graphics object to paint with. - */ - public void paint(Graphics g) - { - // No visiting children necessary. - Color saved = g.getColor(); - Rectangle b = getBounds(); - - g.setColor(getBorderColor()); - g.drawRect(0, 0, b.width - 1, b.height - 1); - - g.setColor(saved); - } - - /** - * This method changes the border color. - * - * @param c The new border color. - */ - public void setBorderColor(Color c) - { - borderColor = c; - } - - /** - * This method changes the mouse offset. - * - * @param p The new mouse offset. - */ - public void setOffset(Point p) - { - offset = p; - } - - /** - * Sets the orientation of the toolbar and the - * drag window. - * - * @param o - the new orientation of the toolbar and drag - * window. - */ - public void setOrientation(int o) - { - toolBar.setOrientation(o); - if (dragWindow != null) - dragWindow.setOrientation(o); - } - } - - /** - * This helper class listens for Window events from the floatable window and - * if it is closed, returns the JToolBar to the last known good location. - */ - protected class FrameListener extends WindowAdapter - { - /** - * This method is called when the floating window is closed. - * - * @param e The WindowEvent. - */ - public void windowClosing(WindowEvent e) - { - Container parent = toolBar.getParent(); - parent.remove(toolBar); - - if (origParent != null) - { - origParent.add(toolBar, - (constraintBeforeFloating != null) - ? constraintBeforeFloating : BorderLayout.NORTH); - toolBar.setOrientation(lastGoodOrientation); - } - - origParent.invalidate(); - origParent.validate(); - origParent.repaint(); - } - } - - /** - * This helper class listens for PropertyChangeEvents from the JToolBar. - */ - protected class PropertyListener implements PropertyChangeListener - { - /** - * This method is called when a property from the JToolBar is changed. - * - * @param e The PropertyChangeEvent. - */ - public void propertyChange(PropertyChangeEvent e) - { - // FIXME: need name properties so can change floatFrame title. - if (e.getPropertyName().equals("rollover") && toolBar != null) - setRolloverBorders(toolBar.isRollover()); - } - } - - /** - * This helper class listens for components added to and removed from the - * JToolBar. - */ - protected class ToolBarContListener implements ContainerListener - { - /** - * This method is responsible for setting rollover or non rollover for new - * buttons added to the JToolBar. - * - * @param e The ContainerEvent. - */ - public void componentAdded(ContainerEvent e) - { - if (e.getChild() instanceof JButton) - { - JButton b = (JButton) e.getChild(); - - if (b.getBorder() != null) - borders.put(b, b.getBorder()); - } - - if (isRolloverBorders()) - setBorderToRollover(e.getChild()); - else - setBorderToNonRollover(e.getChild()); - - cachedBounds = toolBar.getPreferredSize(); - cachedOrientation = toolBar.getOrientation(); - - Component c = e.getChild(); - if (toolBarFocusListener != null) - c.addFocusListener(toolBarFocusListener); - } - - /** - * This method is responsible for giving the child components their - * original borders when they are removed. - * - * @param e The ContainerEvent. - */ - public void componentRemoved(ContainerEvent e) - { - setBorderToNormal(e.getChild()); - cachedBounds = toolBar.getPreferredSize(); - cachedOrientation = toolBar.getOrientation(); - - Component c = e.getChild(); - if (toolBarFocusListener != null) - c.removeFocusListener(toolBarFocusListener); - } - } - - /** - * This is the floating window that is returned when getFloatingWindow is - * called. - */ - private class ToolBarDialog extends JDialog implements UIResource - { - /** - * Creates a new ToolBarDialog object with the name given by the JToolBar. - */ - public ToolBarDialog() - { - super(); - setName((toolBar.getName() != null) ? toolBar.getName() : ""); - } - } - - /** - * DOCUMENT ME! - */ - protected class ToolBarFocusListener implements FocusListener - { - /** - * Creates a new ToolBarFocusListener object. - */ - protected ToolBarFocusListener() - { - // Nothing to do here. - } - - /** - * Receives notification when the toolbar or one of it's component - * receives the keyboard input focus. - * - * @param e the focus event - */ - public void focusGained(FocusEvent e) - { - Component c = e.getComponent(); - focusedCompIndex = toolBar.getComponentIndex(c); - } - - /** - * Receives notification when the toolbar or one of it's component - * looses the keyboard input focus. - * - * @param e the focus event - */ - public void focusLost(FocusEvent e) - { - // Do nothing here. - } - } - - /** - * This helper class acts as the border for the JToolBar. - */ - private static class ToolBarBorder implements Border - { - /** The size of the larger, draggable side of the border. */ - private static final int offset = 10; - - /** The other sides. */ - private static final int regular = 2; - - /** - * This method returns the border insets for the JToolBar. - * - * @param c The Component to find insets for. - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - if (c instanceof JToolBar) - { - JToolBar tb = (JToolBar) c; - int orientation = tb.getOrientation(); - - if (! tb.isFloatable()) - return new Insets(regular, regular, regular, regular); - else if (orientation == SwingConstants.HORIZONTAL) - return new Insets(regular, offset, regular, regular); - else - return new Insets(offset, regular, regular, regular); - } - - return new Insets(0, 0, 0, 0); - } - - /** - * This method returns whether the border is opaque. - * - * @return Whether the border is opaque. - */ - public boolean isBorderOpaque() - { - return false; - } - - /** - * This method paints the ribbed area of the border. - * - * @param g The Graphics object to paint with. - * @param x The x coordinate of the area. - * @param y The y coordinate of the area. - * @param w The width of the area. - * @param h The height of the area. - * @param size The size of the bump. - * @param c The color of the bumps. - */ - private void paintBumps(Graphics g, int x, int y, int w, int h, int size, - Color c) - { - Color saved = g.getColor(); - g.setColor(c); - - int hgap = 2 * size; - int vgap = 4 * size; - int count = 0; - - for (int i = x; i < (w + x); i += hgap) - for (int j = ((count++ % 2) == 0) ? y : (y + (2 * size)); j < (h + y); - j += vgap) - g.fillRect(i, j, size, size); - - g.setColor(saved); - } - - /** - * This method paints the border around the given Component. - * - * @param c The Component whose border is being painted. - * @param g The Graphics object to paint with. - * @param x The x coordinate of the component. - * @param y The y coordinate of the component. - * @param width The width of the component. - * @param height The height of the component. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int width, - int height) - { - if (c instanceof JToolBar) - { - JToolBar tb = (JToolBar) c; - - int orientation = tb.getOrientation(); - - if (orientation == SwingConstants.HORIZONTAL) - { - paintBumps(g, x, y, offset, height, 1, Color.WHITE); - paintBumps(g, x + 1, y + 1, offset - 1, height - 1, 1, Color.GRAY); - } - else - { - paintBumps(g, x, y, width, offset, 1, Color.WHITE); - paintBumps(g, x + 1, y + 1, width - 1, offset - 1, 1, Color.GRAY); - } - } - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicToolTipUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicToolTipUI.java deleted file mode 100644 index 37c084b..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicToolTipUI.java +++ /dev/null @@ -1,292 +0,0 @@ -/* BasicToolTipUI.java -- - Copyright (C) 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.plaf.basic; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JComponent; -import javax.swing.JToolTip; -import javax.swing.LookAndFeel; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ToolTipUI; -import javax.swing.text.View; - -/** - * This is the Basic Look and Feel UI class for JToolTip. - */ -public class BasicToolTipUI extends ToolTipUI -{ - - /** - * Receives notification when a property of the JToolTip changes. - * This updates the HTML renderer if appropriate. - */ - private class PropertyChangeHandler - implements PropertyChangeListener - { - - public void propertyChange(PropertyChangeEvent e) - { - String prop = e.getPropertyName(); - if (prop.equals("tiptext") || prop.equals("font") - || prop.equals("foreground")) - { - JToolTip tip = (JToolTip) e.getSource(); - String text = tip.getTipText(); - BasicHTML.updateRenderer(tip, text); - } - } - - } - - /** The shared instance of BasicToolTipUI used for all ToolTips. */ - private static BasicToolTipUI shared; - - /** The tooltip's text */ - private String text; - - /** - * Handles property changes. - */ - private PropertyChangeListener propertyChangeHandler; - - /** - * Creates a new BasicToolTipUI object. - */ - public BasicToolTipUI() - { - super(); - } - - /** - * This method creates a new BasicToolTip UI for the given - * JComponent. - * - * @param c The JComponent to create a UI for. - * - * @return A BasicToolTipUI that can be used by the given JComponent. - */ - public static ComponentUI createUI(JComponent c) - { - if (shared == null) - shared = new BasicToolTipUI(); - return shared; - } - - /** - * This method returns the msximum size of the given JComponent. - * - * @param c The JComponent to find a maximum size for. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension d = getPreferredSize(c); - View view = (View) c.getClientProperty(BasicHTML.propertyKey); - if (view != null) - d.width += view.getMaximumSpan(View.X_AXIS) - - view.getPreferredSpan(View.X_AXIS); - return d; - } - - /** - * This method returns the minimum size of the given JComponent. - * - * @param c The JComponent to find a minimum size for. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension d = getPreferredSize(c); - View view = (View) c.getClientProperty(BasicHTML.propertyKey); - if (view != null) - d.width -= view.getPreferredSpan(View.X_AXIS) - - view.getMinimumSpan(View.X_AXIS); - return d; - } - - /** - * This method returns the preferred size of the given JComponent. - * - * @param c The JComponent to find a preferred size for. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - JToolTip tip = (JToolTip) c; - String str = tip.getTipText(); - FontMetrics fm = c.getFontMetrics(c.getFont()); - Insets i = c.getInsets(); - Dimension d = new Dimension(i.left + i.right, i.top + i.bottom); - if (str != null && ! str.equals("")) - { - View view = (View) c.getClientProperty(BasicHTML.propertyKey); - if (view != null) - { - d.width += (int) view.getPreferredSpan(View.X_AXIS); - d.height += (int) view.getPreferredSpan(View.Y_AXIS); - } - else - { - d.width += fm.stringWidth(str) + 6; - d.height += fm.getHeight(); - } - } - return d; - } - - /** - * This method installs the defaults for the given JComponent. - * - * @param c The JComponent to install defaults for. - */ - protected void installDefaults(JComponent c) - { - LookAndFeel.installColorsAndFont(c, "ToolTip.background", - "ToolTip.foreground", "ToolTip.font"); - LookAndFeel.installBorder(c, "ToolTip.border"); - } - - /** - * This method installs the listeners for the given JComponent. - * - * @param c The JComponent to install listeners for. - */ - protected void installListeners(JComponent c) - { - propertyChangeHandler = new PropertyChangeHandler(); - c.addPropertyChangeListener(propertyChangeHandler); - } - - /** - * This method installs the UI for the given JComponent. - * - * @param c The JComponent to install the UI for. - */ - public void installUI(JComponent c) - { - c.setOpaque(true); - installDefaults(c); - BasicHTML.updateRenderer(c, ((JToolTip) c).getTipText()); - installListeners(c); - } - - /** - * This method paints the given JComponent with the given Graphics object. - * - * @param g The Graphics object to paint with. - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - JToolTip tip = (JToolTip) c; - - String text = tip.getTipText(); - Font font = c.getFont(); - FontMetrics fm = c.getFontMetrics(font); - int ascent = fm.getAscent(); - Insets i = c.getInsets(); - Dimension size = c.getSize(); - Rectangle paintR = new Rectangle(i.left, i.top, - size.width - i.left - i.right, - size.height - i.top - i.bottom); - Color saved = g.getColor(); - Font oldFont = g.getFont(); - g.setColor(Color.BLACK); - - View view = (View) c.getClientProperty(BasicHTML.propertyKey); - if (view != null) - view.paint(g, paintR); - else - g.drawString(text, paintR.x + 3, paintR.y + ascent); - - g.setFont(oldFont); - g.setColor(saved); - } - - /** - * This method uninstalls the defaults for the given JComponent. - * - * @param c The JComponent to uninstall defaults for. - */ - protected void uninstallDefaults(JComponent c) - { - c.setForeground(null); - c.setBackground(null); - c.setFont(null); - c.setBorder(null); - } - - /** - * This method uninstalls listeners for the given JComponent. - * - * @param c The JComponent to uninstall listeners for. - */ - protected void uninstallListeners(JComponent c) - { - if (propertyChangeHandler != null) - { - c.removePropertyChangeListener(propertyChangeHandler); - propertyChangeHandler = null; - } - } - - /** - * This method uninstalls the UI for the given JComponent. - * - * @param c The JComponent to uninstall. - */ - public void uninstallUI(JComponent c) - { - uninstallDefaults(c); - BasicHTML.updateRenderer(c, ""); - uninstallListeners(c); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java deleted file mode 100644 index af61a42..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicTreeUI.java +++ /dev/null @@ -1,3939 +0,0 @@ -/* BasicTreeUI.java -- - Copyright (C) 2002, 2004, 2005, 2006, 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.plaf.basic; - -import gnu.javax.swing.tree.GnuPath; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Label; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.InputEvent; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Enumeration; -import java.util.Hashtable; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.CellRendererPane; -import javax.swing.Icon; -import javax.swing.InputMap; -import javax.swing.JComponent; -import javax.swing.JScrollBar; -import javax.swing.JScrollPane; -import javax.swing.JTree; -import javax.swing.LookAndFeel; -import javax.swing.SwingUtilities; -import javax.swing.Timer; -import javax.swing.UIManager; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.MouseInputListener; -import javax.swing.event.TreeExpansionEvent; -import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeModelEvent; -import javax.swing.event.TreeModelListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TreeUI; -import javax.swing.tree.AbstractLayoutCache; -import javax.swing.tree.DefaultTreeCellEditor; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.TreeCellEditor; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreeModel; -import javax.swing.tree.TreeNode; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeSelectionModel; -import javax.swing.tree.VariableHeightLayoutCache; - -/** - * A delegate providing the user interface for <code>JTree</code> according to - * the Basic look and feel. - * - * @see javax.swing.JTree - * @author Lillian Angel (langel@redhat.com) - * @author Sascha Brawer (brawer@dandelis.ch) - * @author Audrius Meskauskas (audriusa@bioinformatics.org) - */ -public class BasicTreeUI - extends TreeUI -{ - /** - * The tree cell editing may be started by the single mouse click on the - * selected cell. To separate it from the double mouse click, the editing - * session starts after this time (in ms) after that single click, and only no - * other clicks were performed during that time. - */ - static int WAIT_TILL_EDITING = 900; - - /** Collapse Icon for the tree. */ - protected transient Icon collapsedIcon; - - /** Expanded Icon for the tree. */ - protected transient Icon expandedIcon; - - /** Distance between left margin and where vertical dashes will be drawn. */ - protected int leftChildIndent; - - /** - * Distance between leftChildIndent and where cell contents will be drawn. - */ - protected int rightChildIndent; - - /** - * Total fistance that will be indented. The sum of leftChildIndent and - * rightChildIndent . - */ - protected int totalChildIndent; - - /** Index of the row that was last selected. */ - protected int lastSelectedRow; - - /** Component that we're going to be drawing onto. */ - protected JTree tree; - - /** Renderer that is being used to do the actual cell drawing. */ - protected transient TreeCellRenderer currentCellRenderer; - - /** - * Set to true if the renderer that is currently in the tree was created by - * this instance. - */ - protected boolean createdRenderer; - - /** Editor for the tree. */ - protected transient TreeCellEditor cellEditor; - - /** - * Set to true if editor that is currently in the tree was created by this - * instance. - */ - protected boolean createdCellEditor; - - /** - * Set to false when editing and shouldSelectCall() returns true meaning the - * node should be selected before editing, used in completeEditing. - * GNU Classpath editing is implemented differently, so this value is not - * actually read anywhere. However it is always set correctly to maintain - * interoperability with the derived classes that read this field. - */ - protected boolean stopEditingInCompleteEditing; - - /** Used to paint the TreeCellRenderer. */ - protected CellRendererPane rendererPane; - - /** Size needed to completely display all the nodes. */ - protected Dimension preferredSize; - - /** Minimum size needed to completely display all the nodes. */ - protected Dimension preferredMinSize; - - /** Is the preferredSize valid? */ - protected boolean validCachedPreferredSize; - - /** Object responsible for handling sizing and expanded issues. */ - protected AbstractLayoutCache treeState; - - /** Used for minimizing the drawing of vertical lines. */ - protected Hashtable<TreePath, Boolean> drawingCache; - - /** - * True if doing optimizations for a largeModel. Subclasses that don't support - * this may wish to override createLayoutCache to not return a - * FixedHeightLayoutCache instance. - */ - protected boolean largeModel; - - /** Responsible for telling the TreeState the size needed for a node. */ - protected AbstractLayoutCache.NodeDimensions nodeDimensions; - - /** Used to determine what to display. */ - protected TreeModel treeModel; - - /** Model maintaining the selection. */ - protected TreeSelectionModel treeSelectionModel; - - /** - * How much the depth should be offset to properly calculate x locations. This - * is based on whether or not the root is visible, and if the root handles are - * visible. - */ - protected int depthOffset; - - /** - * When editing, this will be the Component that is doing the actual editing. - */ - protected Component editingComponent; - - /** Path that is being edited. */ - protected TreePath editingPath; - - /** - * Row that is being edited. Should only be referenced if editingComponent is - * null. - */ - protected int editingRow; - - /** Set to true if the editor has a different size than the renderer. */ - protected boolean editorHasDifferentSize; - - /** Boolean to keep track of editing. */ - boolean isEditing; - - /** The current path of the visible nodes in the tree. */ - TreePath currentVisiblePath; - - /** The gap between the icon and text. */ - int gap = 4; - - /** The max height of the nodes in the tree. */ - int maxHeight; - - /** The hash color. */ - Color hashColor; - - /** Listeners */ - PropertyChangeListener propertyChangeListener; - - FocusListener focusListener; - - TreeSelectionListener treeSelectionListener; - - MouseListener mouseListener; - - KeyListener keyListener; - - PropertyChangeListener selectionModelPropertyChangeListener; - - ComponentListener componentListener; - - CellEditorListener cellEditorListener; - - TreeExpansionListener treeExpansionListener; - - TreeModelListener treeModelListener; - - /** - * The zero size icon, used for expand controls, if they are not visible. - */ - static Icon nullIcon; - - /** - * Creates a new BasicTreeUI object. - */ - public BasicTreeUI() - { - validCachedPreferredSize = false; - drawingCache = new Hashtable(); - nodeDimensions = createNodeDimensions(); - configureLayoutCache(); - - editingRow = - 1; - lastSelectedRow = - 1; - } - - /** - * Returns an instance of the UI delegate for the specified component. - * - * @param c the <code>JComponent</code> for which we need a UI delegate for. - * @return the <code>ComponentUI</code> for c. - */ - public static ComponentUI createUI(JComponent c) - { - return new BasicTreeUI(); - } - - /** - * Returns the Hash color. - * - * @return the <code>Color</code> of the Hash. - */ - protected Color getHashColor() - { - return hashColor; - } - - /** - * Sets the Hash color. - * - * @param color the <code>Color</code> to set the Hash to. - */ - protected void setHashColor(Color color) - { - hashColor = color; - } - - /** - * Sets the left child's indent value. - * - * @param newAmount is the new indent value for the left child. - */ - public void setLeftChildIndent(int newAmount) - { - leftChildIndent = newAmount; - } - - /** - * Returns the indent value for the left child. - * - * @return the indent value for the left child. - */ - public int getLeftChildIndent() - { - return leftChildIndent; - } - - /** - * Sets the right child's indent value. - * - * @param newAmount is the new indent value for the right child. - */ - public void setRightChildIndent(int newAmount) - { - rightChildIndent = newAmount; - } - - /** - * Returns the indent value for the right child. - * - * @return the indent value for the right child. - */ - public int getRightChildIndent() - { - return rightChildIndent; - } - - /** - * Sets the expanded icon. - * - * @param newG is the new expanded icon. - */ - public void setExpandedIcon(Icon newG) - { - expandedIcon = newG; - } - - /** - * Returns the current expanded icon. - * - * @return the current expanded icon. - */ - public Icon getExpandedIcon() - { - return expandedIcon; - } - - /** - * Sets the collapsed icon. - * - * @param newG is the new collapsed icon. - */ - public void setCollapsedIcon(Icon newG) - { - collapsedIcon = newG; - } - - /** - * Returns the current collapsed icon. - * - * @return the current collapsed icon. - */ - public Icon getCollapsedIcon() - { - return collapsedIcon; - } - - /** - * Updates the componentListener, if necessary. - * - * @param largeModel sets this.largeModel to it. - */ - protected void setLargeModel(boolean largeModel) - { - if (largeModel != this.largeModel) - { - completeEditing(); - tree.removeComponentListener(componentListener); - this.largeModel = largeModel; - tree.addComponentListener(componentListener); - } - } - - /** - * Returns true if largeModel is set - * - * @return true if largeModel is set, otherwise false. - */ - protected boolean isLargeModel() - { - return largeModel; - } - - /** - * Sets the row height. - * - * @param rowHeight is the height to set this.rowHeight to. - */ - protected void setRowHeight(int rowHeight) - { - completeEditing(); - if (rowHeight == 0) - rowHeight = getMaxHeight(tree); - treeState.setRowHeight(rowHeight); - } - - /** - * Returns the current row height. - * - * @return current row height. - */ - protected int getRowHeight() - { - return tree.getRowHeight(); - } - - /** - * Sets the TreeCellRenderer to <code>tcr</code>. This invokes - * <code>updateRenderer</code>. - * - * @param tcr is the new TreeCellRenderer. - */ - protected void setCellRenderer(TreeCellRenderer tcr) - { - // Finish editing before changing the renderer. - completeEditing(); - - // The renderer is set in updateRenderer. - updateRenderer(); - - // Refresh the layout if necessary. - if (treeState != null) - { - treeState.invalidateSizes(); - updateSize(); - } - } - - /** - * Return currentCellRenderer, which will either be the trees renderer, or - * defaultCellRenderer, which ever was not null. - * - * @return the current Cell Renderer - */ - protected TreeCellRenderer getCellRenderer() - { - if (currentCellRenderer != null) - return currentCellRenderer; - - return createDefaultCellRenderer(); - } - - /** - * Sets the tree's model. - * - * @param model to set the treeModel to. - */ - protected void setModel(TreeModel model) - { - completeEditing(); - - if (treeModel != null && treeModelListener != null) - treeModel.removeTreeModelListener(treeModelListener); - - treeModel = tree.getModel(); - - if (treeModel != null && treeModelListener != null) - treeModel.addTreeModelListener(treeModelListener); - - if (treeState != null) - { - treeState.setModel(treeModel); - updateLayoutCacheExpandedNodes(); - updateSize(); - } - } - - /** - * Returns the tree's model - * - * @return treeModel - */ - protected TreeModel getModel() - { - return treeModel; - } - - /** - * Sets the root to being visible. - * - * @param newValue sets the visibility of the root - */ - protected void setRootVisible(boolean newValue) - { - completeEditing(); - tree.setRootVisible(newValue); - } - - /** - * Returns true if the root is visible. - * - * @return true if the root is visible. - */ - protected boolean isRootVisible() - { - return tree.isRootVisible(); - } - - /** - * Determines whether the node handles are to be displayed. - * - * @param newValue sets whether or not node handles should be displayed. - */ - protected void setShowsRootHandles(boolean newValue) - { - completeEditing(); - updateDepthOffset(); - if (treeState != null) - { - treeState.invalidateSizes(); - updateSize(); - } - } - - /** - * Returns true if the node handles are to be displayed. - * - * @return true if the node handles are to be displayed. - */ - protected boolean getShowsRootHandles() - { - return tree.getShowsRootHandles(); - } - - /** - * Sets the cell editor. - * - * @param editor to set the cellEditor to. - */ - protected void setCellEditor(TreeCellEditor editor) - { - updateCellEditor(); - } - - /** - * Returns the <code>TreeCellEditor</code> for this tree. - * - * @return the cellEditor for this tree. - */ - protected TreeCellEditor getCellEditor() - { - return cellEditor; - } - - /** - * Configures the receiver to allow, or not allow, editing. - * - * @param newValue sets the receiver to allow editing if true. - */ - protected void setEditable(boolean newValue) - { - updateCellEditor(); - } - - /** - * Returns true if the receiver allows editing. - * - * @return true if the receiver allows editing. - */ - protected boolean isEditable() - { - return tree.isEditable(); - } - - /** - * Resets the selection model. The appropriate listeners are installed on the - * model. - * - * @param newLSM resets the selection model. - */ - protected void setSelectionModel(TreeSelectionModel newLSM) - { - completeEditing(); - if (newLSM != null) - { - treeSelectionModel = newLSM; - tree.setSelectionModel(treeSelectionModel); - } - } - - /** - * Returns the current selection model. - * - * @return the current selection model. - */ - protected TreeSelectionModel getSelectionModel() - { - return treeSelectionModel; - } - - /** - * Returns the Rectangle enclosing the label portion that the last item in - * path will be drawn to. Will return null if any component in path is - * currently valid. - * - * @param tree is the current tree the path will be drawn to. - * @param path is the current path the tree to draw to. - * @return the Rectangle enclosing the label portion that the last item in the - * path will be drawn to. - */ - public Rectangle getPathBounds(JTree tree, TreePath path) - { - Rectangle bounds = null; - if (tree != null && treeState != null) - { - bounds = treeState.getBounds(path, null); - Insets i = tree.getInsets(); - if (bounds != null && i != null) - { - bounds.x += i.left; - bounds.y += i.top; - } - } - return bounds; - } - - /** - * Returns the max height of all the nodes in the tree. - * - * @param tree - the current tree - * @return the max height. - */ - int getMaxHeight(JTree tree) - { - if (maxHeight != 0) - return maxHeight; - - Icon e = UIManager.getIcon("Tree.openIcon"); - Icon c = UIManager.getIcon("Tree.closedIcon"); - Icon l = UIManager.getIcon("Tree.leafIcon"); - int rc = getRowCount(tree); - int iconHeight = 0; - - for (int row = 0; row < rc; row++) - { - if (isLeaf(row)) - iconHeight = l.getIconHeight(); - else if (tree.isExpanded(row)) - iconHeight = e.getIconHeight(); - else - iconHeight = c.getIconHeight(); - - maxHeight = Math.max(maxHeight, iconHeight + gap); - } - - treeState.setRowHeight(maxHeight); - return maxHeight; - } - - /** - * Get the tree node icon. - */ - Icon getNodeIcon(TreePath path) - { - Object node = path.getLastPathComponent(); - if (treeModel.isLeaf(node)) - return UIManager.getIcon("Tree.leafIcon"); - else if (treeState.getExpandedState(path)) - return UIManager.getIcon("Tree.openIcon"); - else - return UIManager.getIcon("Tree.closedIcon"); - } - - /** - * Returns the path for passed in row. If row is not visible null is returned. - * - * @param tree is the current tree to return path for. - * @param row is the row number of the row to return. - * @return the path for passed in row. If row is not visible null is returned. - */ - public TreePath getPathForRow(JTree tree, int row) - { - return treeState.getPathForRow(row); - } - - /** - * Returns the row that the last item identified in path is visible at. Will - * return -1 if any of the elments in the path are not currently visible. - * - * @param tree is the current tree to return the row for. - * @param path is the path used to find the row. - * @return the row that the last item identified in path is visible at. Will - * return -1 if any of the elments in the path are not currently - * visible. - */ - public int getRowForPath(JTree tree, TreePath path) - { - return treeState.getRowForPath(path); - } - - /** - * Returns the number of rows that are being displayed. - * - * @param tree is the current tree to return the number of rows for. - * @return the number of rows being displayed. - */ - public int getRowCount(JTree tree) - { - return treeState.getRowCount(); - } - - /** - * Returns the path to the node that is closest to x,y. If there is nothing - * currently visible this will return null, otherwise it'll always return a - * valid path. If you need to test if the returned object is exactly at x,y - * you should get the bounds for the returned path and test x,y against that. - * - * @param tree the tree to search for the closest path - * @param x is the x coordinate of the location to search - * @param y is the y coordinate of the location to search - * @return the tree path closes to x,y. - */ - public TreePath getClosestPathForLocation(JTree tree, int x, int y) - { - return treeState.getPathClosestTo(x, y); - } - - /** - * Returns true if the tree is being edited. The item that is being edited can - * be returned by getEditingPath(). - * - * @param tree is the tree to check for editing. - * @return true if the tree is being edited. - */ - public boolean isEditing(JTree tree) - { - return isEditing; - } - - /** - * Stops the current editing session. This has no effect if the tree is not - * being edited. Returns true if the editor allows the editing session to - * stop. - * - * @param tree is the tree to stop the editing on - * @return true if the editor allows the editing session to stop. - */ - public boolean stopEditing(JTree tree) - { - boolean ret = false; - if (editingComponent != null && cellEditor.stopCellEditing()) - { - completeEditing(false, false, true); - ret = true; - } - return ret; - } - - /** - * Cancels the current editing session. - * - * @param tree is the tree to cancel the editing session on. - */ - public void cancelEditing(JTree tree) - { - // There is no need to send the cancel message to the editor, - // as the cancellation event itself arrives from it. This would - // only be necessary when cancelling the editing programatically. - if (editingComponent != null) - completeEditing(false, true, false); - } - - /** - * Selects the last item in path and tries to edit it. Editing will fail if - * the CellEditor won't allow it for the selected item. - * - * @param tree is the tree to edit on. - * @param path is the path in tree to edit on. - */ - public void startEditingAtPath(JTree tree, TreePath path) - { - tree.scrollPathToVisible(path); - if (path != null && tree.isVisible(path)) - startEditing(path, null); - } - - /** - * Returns the path to the element that is being editted. - * - * @param tree is the tree to get the editing path from. - * @return the path that is being edited. - */ - public TreePath getEditingPath(JTree tree) - { - return editingPath; - } - - /** - * Invoked after the tree instance variable has been set, but before any - * default/listeners have been installed. - */ - protected void prepareForUIInstall() - { - lastSelectedRow = -1; - preferredSize = new Dimension(); - largeModel = tree.isLargeModel(); - preferredSize = new Dimension(); - stopEditingInCompleteEditing = true; - setModel(tree.getModel()); - } - - /** - * Invoked from installUI after all the defaults/listeners have been - * installed. - */ - protected void completeUIInstall() - { - setShowsRootHandles(tree.getShowsRootHandles()); - updateRenderer(); - updateDepthOffset(); - setSelectionModel(tree.getSelectionModel()); - configureLayoutCache(); - treeState.setRootVisible(tree.isRootVisible()); - treeSelectionModel.setRowMapper(treeState); - updateSize(); - } - - /** - * Invoked from uninstallUI after all the defaults/listeners have been - * uninstalled. - */ - protected void completeUIUninstall() - { - tree = null; - } - - /** - * Installs the subcomponents of the tree, which is the renderer pane. - */ - protected void installComponents() - { - currentCellRenderer = createDefaultCellRenderer(); - rendererPane = createCellRendererPane(); - createdRenderer = true; - setCellRenderer(currentCellRenderer); - } - - /** - * Creates an instance of NodeDimensions that is able to determine the size of - * a given node in the tree. The node dimensions must be created before - * configuring the layout cache. - * - * @return the NodeDimensions of a given node in the tree - */ - protected AbstractLayoutCache.NodeDimensions createNodeDimensions() - { - return new NodeDimensionsHandler(); - } - - /** - * Creates a listener that is reponsible for the updates the UI based on how - * the tree changes. - * - * @return the PropertyChangeListener that is reposnsible for the updates - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new PropertyChangeHandler(); - } - - /** - * Creates the listener responsible for updating the selection based on mouse - * events. - * - * @return the MouseListener responsible for updating. - */ - protected MouseListener createMouseListener() - { - return new MouseHandler(); - } - - /** - * Creates the listener that is responsible for updating the display when - * focus is lost/grained. - * - * @return the FocusListener responsible for updating. - */ - protected FocusListener createFocusListener() - { - return new FocusHandler(); - } - - /** - * Creates the listener reponsible for getting key events from the tree. - * - * @return the KeyListener responsible for getting key events. - */ - protected KeyListener createKeyListener() - { - return new KeyHandler(); - } - - /** - * Creates the listener responsible for getting property change events from - * the selection model. - * - * @returns the PropertyChangeListener reponsible for getting property change - * events from the selection model. - */ - protected PropertyChangeListener createSelectionModelPropertyChangeListener() - { - return new SelectionModelPropertyChangeHandler(); - } - - /** - * Creates the listener that updates the display based on selection change - * methods. - * - * @return the TreeSelectionListener responsible for updating. - */ - protected TreeSelectionListener createTreeSelectionListener() - { - return new TreeSelectionHandler(); - } - - /** - * Creates a listener to handle events from the current editor - * - * @return the CellEditorListener that handles events from the current editor - */ - protected CellEditorListener createCellEditorListener() - { - return new CellEditorHandler(); - } - - /** - * Creates and returns a new ComponentHandler. This is used for the large - * model to mark the validCachedPreferredSize as invalid when the component - * moves. - * - * @return a new ComponentHandler. - */ - protected ComponentListener createComponentListener() - { - return new ComponentHandler(); - } - - /** - * Creates and returns the object responsible for updating the treestate when - * a nodes expanded state changes. - * - * @return the TreeExpansionListener responsible for updating the treestate - */ - protected TreeExpansionListener createTreeExpansionListener() - { - return new TreeExpansionHandler(); - } - - /** - * Creates the object responsible for managing what is expanded, as well as - * the size of nodes. - * - * @return the object responsible for managing what is expanded. - */ - protected AbstractLayoutCache createLayoutCache() - { - return new VariableHeightLayoutCache(); - } - - /** - * Returns the renderer pane that renderer components are placed in. - * - * @return the rendererpane that render components are placed in. - */ - protected CellRendererPane createCellRendererPane() - { - return new CellRendererPane(); - } - - /** - * Creates a default cell editor. - * - * @return the default cell editor. - */ - protected TreeCellEditor createDefaultCellEditor() - { - DefaultTreeCellEditor ed; - if (currentCellRenderer != null - && currentCellRenderer instanceof DefaultTreeCellRenderer) - ed = new DefaultTreeCellEditor(tree, - (DefaultTreeCellRenderer) currentCellRenderer); - else - ed = new DefaultTreeCellEditor(tree, null); - return ed; - } - - /** - * Returns the default cell renderer that is used to do the stamping of each - * node. - * - * @return the default cell renderer that is used to do the stamping of each - * node. - */ - protected TreeCellRenderer createDefaultCellRenderer() - { - return new DefaultTreeCellRenderer(); - } - - /** - * Returns a listener that can update the tree when the model changes. - * - * @return a listener that can update the tree when the model changes. - */ - protected TreeModelListener createTreeModelListener() - { - return new TreeModelHandler(); - } - - /** - * Uninstall all registered listeners - */ - protected void uninstallListeners() - { - tree.removePropertyChangeListener(propertyChangeListener); - tree.removeFocusListener(focusListener); - tree.removeTreeSelectionListener(treeSelectionListener); - tree.removeMouseListener(mouseListener); - tree.removeKeyListener(keyListener); - tree.removePropertyChangeListener(selectionModelPropertyChangeListener); - tree.removeComponentListener(componentListener); - tree.removeTreeExpansionListener(treeExpansionListener); - - TreeCellEditor tce = tree.getCellEditor(); - if (tce != null) - tce.removeCellEditorListener(cellEditorListener); - if (treeModel != null) - treeModel.removeTreeModelListener(treeModelListener); - } - - /** - * Uninstall all keyboard actions. - */ - protected void uninstallKeyboardActions() - { - tree.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).setParent( - null); - tree.getActionMap().setParent(null); - } - - /** - * Uninstall the rendererPane. - */ - protected void uninstallComponents() - { - currentCellRenderer = null; - rendererPane = null; - createdRenderer = false; - setCellRenderer(currentCellRenderer); - } - - /** - * The vertical element of legs between nodes starts at the bottom of the - * parent node by default. This method makes the leg start below that. - * - * @return the vertical leg buffer - */ - protected int getVerticalLegBuffer() - { - return getRowHeight() / 2; - } - - /** - * The horizontal element of legs between nodes starts at the right of the - * left-hand side of the child node by default. This method makes the leg end - * before that. - * - * @return the horizontal leg buffer - */ - protected int getHorizontalLegBuffer() - { - return rightChildIndent / 2; - } - - /** - * Make all the nodes that are expanded in JTree expanded in LayoutCache. This - * invokes updateExpandedDescendants with the root path. - */ - protected void updateLayoutCacheExpandedNodes() - { - if (treeModel != null && treeModel.getRoot() != null) - updateExpandedDescendants(new TreePath(treeModel.getRoot())); - } - - /** - * Updates the expanded state of all the descendants of the <code>path</code> - * by getting the expanded descendants from the tree and forwarding to the - * tree state. - * - * @param path the path used to update the expanded states - */ - protected void updateExpandedDescendants(TreePath path) - { - completeEditing(); - Enumeration expanded = tree.getExpandedDescendants(path); - while (expanded.hasMoreElements()) - treeState.setExpandedState((TreePath) expanded.nextElement(), true); - } - - /** - * Returns a path to the last child of <code>parent</code> - * - * @param parent is the topmost path to specified - * @return a path to the last child of parent - */ - protected TreePath getLastChildPath(TreePath parent) - { - return (TreePath) parent.getLastPathComponent(); - } - - /** - * Updates how much each depth should be offset by. - */ - protected void updateDepthOffset() - { - depthOffset += getVerticalLegBuffer(); - } - - /** - * Updates the cellEditor based on editability of the JTree that we're - * contained in. If the tree is editable but doesn't have a cellEditor, a - * basic one will be used. - */ - protected void updateCellEditor() - { - completeEditing(); - TreeCellEditor newEd = null; - if (tree != null && tree.isEditable()) - { - newEd = tree.getCellEditor(); - if (newEd == null) - { - newEd = createDefaultCellEditor(); - if (newEd != null) - { - tree.setCellEditor(newEd); - createdCellEditor = true; - } - } - } - // Update listeners. - if (newEd != cellEditor) - { - if (cellEditor != null && cellEditorListener != null) - cellEditor.removeCellEditorListener(cellEditorListener); - cellEditor = newEd; - if (cellEditorListener == null) - cellEditorListener = createCellEditorListener(); - if (cellEditor != null && cellEditorListener != null) - cellEditor.addCellEditorListener(cellEditorListener); - createdCellEditor = false; - } - } - - /** - * Messaged from the tree we're in when the renderer has changed. - */ - protected void updateRenderer() - { - if (tree != null) - { - TreeCellRenderer rend = tree.getCellRenderer(); - if (rend != null) - { - createdRenderer = false; - currentCellRenderer = rend; - if (createdCellEditor) - tree.setCellEditor(null); - } - else - { - tree.setCellRenderer(createDefaultCellRenderer()); - createdRenderer = true; - } - } - else - { - currentCellRenderer = null; - createdRenderer = false; - } - - updateCellEditor(); - } - - /** - * Resets the treeState instance based on the tree we're providing the look - * and feel for. The node dimensions handler is required and must be created - * in advance. - */ - protected void configureLayoutCache() - { - treeState = createLayoutCache(); - treeState.setNodeDimensions(nodeDimensions); - } - - /** - * Marks the cached size as being invalid, and messages the tree with - * <code>treeDidChange</code>. - */ - protected void updateSize() - { - preferredSize = null; - updateCachedPreferredSize(); - tree.treeDidChange(); - } - - /** - * Updates the <code>preferredSize</code> instance variable, which is - * returned from <code>getPreferredSize()</code>. - */ - protected void updateCachedPreferredSize() - { - validCachedPreferredSize = false; - } - - /** - * Messaged from the VisibleTreeNode after it has been expanded. - * - * @param path is the path that has been expanded. - */ - protected void pathWasExpanded(TreePath path) - { - validCachedPreferredSize = false; - treeState.setExpandedState(path, true); - tree.repaint(); - } - - /** - * Messaged from the VisibleTreeNode after it has collapsed - */ - protected void pathWasCollapsed(TreePath path) - { - validCachedPreferredSize = false; - treeState.setExpandedState(path, false); - tree.repaint(); - } - - /** - * Install all defaults for the tree. - */ - protected void installDefaults() - { - LookAndFeel.installColorsAndFont(tree, "Tree.background", - "Tree.foreground", "Tree.font"); - - hashColor = UIManager.getColor("Tree.hash"); - if (hashColor == null) - hashColor = Color.black; - - tree.setOpaque(true); - - rightChildIndent = UIManager.getInt("Tree.rightChildIndent"); - leftChildIndent = UIManager.getInt("Tree.leftChildIndent"); - totalChildIndent = rightChildIndent + leftChildIndent; - setRowHeight(UIManager.getInt("Tree.rowHeight")); - tree.setRowHeight(getRowHeight()); - tree.setScrollsOnExpand(UIManager.getBoolean("Tree.scrollsOnExpand")); - setExpandedIcon(UIManager.getIcon("Tree.expandedIcon")); - setCollapsedIcon(UIManager.getIcon("Tree.collapsedIcon")); - } - - /** - * Install all keyboard actions for this - */ - protected void installKeyboardActions() - { - InputMap focusInputMap = - (InputMap) SharedUIDefaults.get("Tree.focusInputMap"); - SwingUtilities.replaceUIInputMap(tree, JComponent.WHEN_FOCUSED, - focusInputMap); - InputMap ancestorInputMap = - (InputMap) SharedUIDefaults.get("Tree.ancestorInputMap"); - SwingUtilities.replaceUIInputMap(tree, - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, - ancestorInputMap); - - SwingUtilities.replaceUIActionMap(tree, getActionMap()); - } - - /** - * Creates and returns the shared action map for JTrees. - * - * @return the shared action map for JTrees - */ - private ActionMap getActionMap() - { - ActionMap am = (ActionMap) UIManager.get("Tree.actionMap"); - if (am == null) - { - am = createDefaultActions(); - UIManager.getLookAndFeelDefaults().put("Tree.actionMap", am); - } - return am; - } - - /** - * Creates the default actions when there are none specified by the L&F. - * - * @return the default actions - */ - private ActionMap createDefaultActions() - { - ActionMapUIResource am = new ActionMapUIResource(); - Action action; - - // TreeHomeAction. - action = new TreeHomeAction(-1, "selectFirst"); - am.put(action.getValue(Action.NAME), action); - action = new TreeHomeAction(-1, "selectFirstChangeLead"); - am.put(action.getValue(Action.NAME), action); - action = new TreeHomeAction(-1, "selectFirstExtendSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreeHomeAction(1, "selectLast"); - am.put(action.getValue(Action.NAME), action); - action = new TreeHomeAction(1, "selectLastChangeLead"); - am.put(action.getValue(Action.NAME), action); - action = new TreeHomeAction(1, "selectLastExtendSelection"); - am.put(action.getValue(Action.NAME), action); - - // TreeIncrementAction. - action = new TreeIncrementAction(-1, "selectPrevious"); - am.put(action.getValue(Action.NAME), action); - action = new TreeIncrementAction(-1, "selectPreviousExtendSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreeIncrementAction(-1, "selectPreviousChangeLead"); - am.put(action.getValue(Action.NAME), action); - action = new TreeIncrementAction(1, "selectNext"); - am.put(action.getValue(Action.NAME), action); - action = new TreeIncrementAction(1, "selectNextExtendSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreeIncrementAction(1, "selectNextChangeLead"); - am.put(action.getValue(Action.NAME), action); - - // TreeTraverseAction. - action = new TreeTraverseAction(-1, "selectParent"); - am.put(action.getValue(Action.NAME), action); - action = new TreeTraverseAction(1, "selectChild"); - am.put(action.getValue(Action.NAME), action); - - // TreeToggleAction. - action = new TreeToggleAction("toggleAndAnchor"); - am.put(action.getValue(Action.NAME), action); - - // TreePageAction. - action = new TreePageAction(-1, "scrollUpChangeSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreePageAction(-1, "scrollUpExtendSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreePageAction(-1, "scrollUpChangeLead"); - am.put(action.getValue(Action.NAME), action); - action = new TreePageAction(1, "scrollDownChangeSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreePageAction(1, "scrollDownExtendSelection"); - am.put(action.getValue(Action.NAME), action); - action = new TreePageAction(1, "scrollDownChangeLead"); - am.put(action.getValue(Action.NAME), action); - - // Tree editing actions - action = new TreeStartEditingAction("startEditing"); - am.put(action.getValue(Action.NAME), action); - action = new TreeCancelEditingAction("cancel"); - am.put(action.getValue(Action.NAME), action); - - - return am; - } - - /** - * Converts the modifiers. - * - * @param mod - modifier to convert - * @returns the new modifier - */ - private int convertModifiers(int mod) - { - if ((mod & KeyEvent.SHIFT_DOWN_MASK) != 0) - { - mod |= KeyEvent.SHIFT_MASK; - mod &= ~ KeyEvent.SHIFT_DOWN_MASK; - } - if ((mod & KeyEvent.CTRL_DOWN_MASK) != 0) - { - mod |= KeyEvent.CTRL_MASK; - mod &= ~ KeyEvent.CTRL_DOWN_MASK; - } - if ((mod & KeyEvent.META_DOWN_MASK) != 0) - { - mod |= KeyEvent.META_MASK; - mod &= ~ KeyEvent.META_DOWN_MASK; - } - if ((mod & KeyEvent.ALT_DOWN_MASK) != 0) - { - mod |= KeyEvent.ALT_MASK; - mod &= ~ KeyEvent.ALT_DOWN_MASK; - } - if ((mod & KeyEvent.ALT_GRAPH_DOWN_MASK) != 0) - { - mod |= KeyEvent.ALT_GRAPH_MASK; - mod &= ~ KeyEvent.ALT_GRAPH_DOWN_MASK; - } - return mod; - } - - /** - * Install all listeners for this - */ - protected void installListeners() - { - propertyChangeListener = createPropertyChangeListener(); - tree.addPropertyChangeListener(propertyChangeListener); - - focusListener = createFocusListener(); - tree.addFocusListener(focusListener); - - treeSelectionListener = createTreeSelectionListener(); - tree.addTreeSelectionListener(treeSelectionListener); - - mouseListener = createMouseListener(); - tree.addMouseListener(mouseListener); - - keyListener = createKeyListener(); - tree.addKeyListener(keyListener); - - selectionModelPropertyChangeListener = - createSelectionModelPropertyChangeListener(); - if (treeSelectionModel != null - && selectionModelPropertyChangeListener != null) - { - treeSelectionModel.addPropertyChangeListener( - selectionModelPropertyChangeListener); - } - - componentListener = createComponentListener(); - tree.addComponentListener(componentListener); - - treeExpansionListener = createTreeExpansionListener(); - tree.addTreeExpansionListener(treeExpansionListener); - - treeModelListener = createTreeModelListener(); - if (treeModel != null) - treeModel.addTreeModelListener(treeModelListener); - - cellEditorListener = createCellEditorListener(); - } - - /** - * Install the UI for the component - * - * @param c the component to install UI for - */ - public void installUI(JComponent c) - { - tree = (JTree) c; - - prepareForUIInstall(); - installDefaults(); - installComponents(); - installKeyboardActions(); - installListeners(); - completeUIInstall(); - } - - /** - * Uninstall the defaults for the tree - */ - protected void uninstallDefaults() - { - tree.setFont(null); - tree.setForeground(null); - tree.setBackground(null); - } - - /** - * Uninstall the UI for the component - * - * @param c the component to uninstall UI for - */ - public void uninstallUI(JComponent c) - { - completeEditing(); - - prepareForUIUninstall(); - uninstallDefaults(); - uninstallKeyboardActions(); - uninstallListeners(); - uninstallComponents(); - completeUIUninstall(); - } - - /** - * Paints the specified component appropriate for the look and feel. This - * method is invoked from the ComponentUI.update method when the specified - * component is being painted. Subclasses should override this method and use - * the specified Graphics object to render the content of the component. - * - * @param g the Graphics context in which to paint - * @param c the component being painted; this argument is often ignored, but - * might be used if the UI object is stateless and shared by multiple - * components - */ - public void paint(Graphics g, JComponent c) - { - JTree tree = (JTree) c; - - int rows = treeState.getRowCount(); - - if (rows == 0) - // There is nothing to do if the tree is empty. - return; - - Rectangle clip = g.getClipBounds(); - - Insets insets = tree.getInsets(); - - if (clip != null && treeModel != null) - { - int startIndex = tree.getClosestRowForLocation(clip.x, clip.y); - int endIndex = tree.getClosestRowForLocation(clip.x + clip.width, - clip.y + clip.height); - // Also paint dashes to the invisible nodes below. - // These should be painted first, otherwise they may cover - // the control icons. - if (endIndex < rows) - for (int i = endIndex + 1; i < rows; i++) - { - TreePath path = treeState.getPathForRow(i); - if (isLastChild(path)) - paintVerticalPartOfLeg(g, clip, insets, path); - } - - // The two loops are required to ensure that the lines are not - // painted over the other tree components. - - int n = endIndex - startIndex + 1; - Rectangle[] bounds = new Rectangle[n]; - boolean[] isLeaf = new boolean[n]; - boolean[] isExpanded = new boolean[n]; - TreePath[] path = new TreePath[n]; - int k; - - k = 0; - for (int i = startIndex; i <= endIndex; i++, k++) - { - path[k] = treeState.getPathForRow(i); - if (path[k] != null) - { - isLeaf[k] = treeModel.isLeaf(path[k].getLastPathComponent()); - isExpanded[k] = tree.isExpanded(path[k]); - bounds[k] = getPathBounds(tree, path[k]); - - paintHorizontalPartOfLeg(g, clip, insets, bounds[k], path[k], - i, isExpanded[k], false, isLeaf[k]); - } - if (isLastChild(path[k])) - paintVerticalPartOfLeg(g, clip, insets, path[k]); - } - - k = 0; - for (int i = startIndex; i <= endIndex; i++, k++) - { - if (path[k] != null) - paintRow(g, clip, insets, bounds[k], path[k], i, isExpanded[k], - false, isLeaf[k]); - } - } - } - - /** - * Check if the path is referring to the last child of some parent. - */ - private boolean isLastChild(TreePath path) - { - if (path == null) - return false; - else if (path instanceof GnuPath) - { - // Except the seldom case when the layout cache is changed, this - // optimized code will be executed. - return ((GnuPath) path).isLastChild; - } - else - { - // Non optimized general case. - TreePath parent = path.getParentPath(); - if (parent == null) - return false; - int childCount = treeState.getVisibleChildCount(parent); - int p = treeModel.getIndexOfChild(parent, path.getLastPathComponent()); - return p == childCount - 1; - } - } - - /** - * Ensures that the rows identified by beginRow through endRow are visible. - * - * @param beginRow is the first row - * @param endRow is the last row - */ - protected void ensureRowsAreVisible(int beginRow, int endRow) - { - if (beginRow < endRow) - { - int temp = endRow; - endRow = beginRow; - beginRow = temp; - } - - for (int i = beginRow; i < endRow; i++) - { - TreePath path = getPathForRow(tree, i); - if (! tree.isVisible(path)) - tree.makeVisible(path); - } - } - - /** - * Sets the preferred minimum size. - * - * @param newSize is the new preferred minimum size. - */ - public void setPreferredMinSize(Dimension newSize) - { - preferredMinSize = newSize; - } - - /** - * Gets the preferred minimum size. - * - * @returns the preferred minimum size. - */ - public Dimension getPreferredMinSize() - { - if (preferredMinSize == null) - return getPreferredSize(tree); - else - return preferredMinSize; - } - - /** - * Returns the preferred size to properly display the tree, this is a cover - * method for getPreferredSize(c, false). - * - * @param c the component whose preferred size is being queried; this argument - * is often ignored but might be used if the UI object is stateless - * and shared by multiple components - * @return the preferred size - */ - public Dimension getPreferredSize(JComponent c) - { - return getPreferredSize(c, false); - } - - /** - * Returns the preferred size to represent the tree in c. If checkConsistancy - * is true, checkConsistancy is messaged first. - * - * @param c the component whose preferred size is being queried. - * @param checkConsistancy if true must check consistancy - * @return the preferred size - */ - public Dimension getPreferredSize(JComponent c, boolean checkConsistancy) - { - if (! validCachedPreferredSize) - { - Rectangle size = tree.getBounds(); - // Add the scrollbar dimensions to the preferred size. - preferredSize = new Dimension(treeState.getPreferredWidth(size), - treeState.getPreferredHeight()); - validCachedPreferredSize = true; - } - return preferredSize; - } - - /** - * Returns the minimum size for this component. Which will be the min - * preferred size or (0,0). - * - * @param c the component whose min size is being queried. - * @returns the preferred size or null - */ - public Dimension getMinimumSize(JComponent c) - { - return preferredMinSize = getPreferredSize(c); - } - - /** - * Returns the maximum size for the component, which will be the preferred - * size if the instance is currently in JTree or (0,0). - * - * @param c the component whose preferred size is being queried - * @return the max size or null - */ - public Dimension getMaximumSize(JComponent c) - { - return getPreferredSize(c); - } - - /** - * Messages to stop the editing session. If the UI the receiver is providing - * the look and feel for returns true from - * <code>getInvokesStopCellEditing</code>, stopCellEditing will be invoked - * on the current editor. Then completeEditing will be messaged with false, - * true, false to cancel any lingering editing. - */ - protected void completeEditing() - { - if (tree.getInvokesStopCellEditing() && stopEditingInCompleteEditing - && editingComponent != null) - cellEditor.stopCellEditing(); - - completeEditing(false, true, false); - } - - /** - * Stops the editing session. If messageStop is true, the editor is messaged - * with stopEditing, if messageCancel is true the editor is messaged with - * cancelEditing. If messageTree is true, the treeModel is messaged with - * valueForPathChanged. - * - * @param messageStop message to stop editing - * @param messageCancel message to cancel editing - * @param messageTree message to treeModel - */ - protected void completeEditing(boolean messageStop, boolean messageCancel, - boolean messageTree) - { - // Make no attempt to complete the non existing editing session. - if (stopEditingInCompleteEditing && editingComponent != null) - { - Component comp = editingComponent; - TreePath p = editingPath; - editingComponent = null; - editingPath = null; - if (messageStop) - cellEditor.stopCellEditing(); - else if (messageCancel) - cellEditor.cancelCellEditing(); - - tree.remove(comp); - - if (editorHasDifferentSize) - { - treeState.invalidatePathBounds(p); - updateSize(); - } - else - { - // Need to refresh the tree. - Rectangle b = getPathBounds(tree, p); - tree.repaint(0, b.y, tree.getWidth(), b.height); - } - - if (messageTree) - { - Object value = cellEditor.getCellEditorValue(); - treeModel.valueForPathChanged(p, value); - } - } - } - - /** - * Will start editing for node if there is a cellEditor and shouldSelectCall - * returns true. This assumes that path is valid and visible. - * - * @param path is the path to start editing - * @param event is the MouseEvent performed on the path - * @return true if successful - */ - protected boolean startEditing(TreePath path, MouseEvent event) - { - // Maybe cancel editing. - if (isEditing(tree) && tree.getInvokesStopCellEditing() - && ! stopEditing(tree)) - return false; - - completeEditing(); - TreeCellEditor ed = cellEditor; - if (ed != null && tree.isPathEditable(path)) - { - if (ed.isCellEditable(event)) - { - editingRow = getRowForPath(tree, path); - Object value = path.getLastPathComponent(); - boolean isSelected = tree.isPathSelected(path); - boolean isExpanded = tree.isExpanded(editingPath); - boolean isLeaf = treeModel.isLeaf(value); - editingComponent = ed.getTreeCellEditorComponent(tree, value, - isSelected, - isExpanded, - isLeaf, - editingRow); - - Rectangle bounds = getPathBounds(tree, path); - - Dimension size = editingComponent.getPreferredSize(); - int rowHeight = getRowHeight(); - if (size.height != bounds.height && rowHeight > 0) - size.height = rowHeight; - - if (size.width != bounds.width || size.height != bounds.height) - { - editorHasDifferentSize = true; - treeState.invalidatePathBounds(path); - updateSize(); - } - else - editorHasDifferentSize = false; - - // The editing component must be added to its container. We add the - // container, not the editing component itself. - tree.add(editingComponent); - editingComponent.setBounds(bounds.x, bounds.y, size.width, - size.height); - editingComponent.validate(); - editingPath = path; - - if (ed.shouldSelectCell(event)) - { - stopEditingInCompleteEditing = false; - tree.setSelectionRow(editingRow); - stopEditingInCompleteEditing = true; - } - - editorRequestFocus(editingComponent); - // Register MouseInputHandler to redispatch initial mouse events - // correctly. - if (event instanceof MouseEvent) - { - Point p = SwingUtilities.convertPoint(tree, event.getX(), event.getY(), - editingComponent); - Component active = - SwingUtilities.getDeepestComponentAt(editingComponent, p.x, p.y); - if (active != null) - { - MouseInputHandler ih = new MouseInputHandler(tree, active, event); - - } - } - - return true; - } - else - editingComponent = null; - } - return false; - } - - /** - * Requests focus on the editor. The method is necessary since the - * DefaultTreeCellEditor returns a container that contains the - * actual editor, and we want to request focus on the editor, not the - * container. - */ - private void editorRequestFocus(Component c) - { - if (c instanceof Container) - { - // TODO: Maybe do something more reasonable here, like queriying the - // FocusTraversalPolicy. - Container cont = (Container) c; - if (cont.getComponentCount() > 0) - cont.getComponent(0).requestFocus(); - } - else if (c.isFocusable()) - c.requestFocus(); - - } - - /** - * If the <code>mouseX</code> and <code>mouseY</code> are in the expand or - * collapse region of the row, this will toggle the row. - * - * @param path the path we are concerned with - * @param mouseX is the cursor's x position - * @param mouseY is the cursor's y position - */ - protected void checkForClickInExpandControl(TreePath path, int mouseX, - int mouseY) - { - if (isLocationInExpandControl(path, mouseX, mouseY)) - handleExpandControlClick(path, mouseX, mouseY); - } - - /** - * Returns true if the <code>mouseX</code> and <code>mouseY</code> fall in - * the area of row that is used to expand/collpse the node and the node at row - * does not represent a leaf. - * - * @param path the path we are concerned with - * @param mouseX is the cursor's x position - * @param mouseY is the cursor's y position - * @return true if the <code>mouseX</code> and <code>mouseY</code> fall in - * the area of row that is used to expand/collpse the node and the - * node at row does not represent a leaf. - */ - protected boolean isLocationInExpandControl(TreePath path, int mouseX, - int mouseY) - { - boolean cntlClick = false; - if (! treeModel.isLeaf(path.getLastPathComponent())) - { - int width; - Icon expandedIcon = getExpandedIcon(); - if (expandedIcon != null) - width = expandedIcon.getIconWidth(); - else - // Only guessing. This is the width of - // the tree control icon in Metal L&F. - width = 18; - - Insets i = tree.getInsets(); - - int depth; - if (isRootVisible()) - depth = path.getPathCount()-1; - else - depth = path.getPathCount()-2; - - int left = getRowX(tree.getRowForPath(path), depth) - - width + i.left; - cntlClick = mouseX >= left && mouseX <= left + width; - } - return cntlClick; - } - - /** - * Messaged when the user clicks the particular row, this invokes - * toggleExpandState. - * - * @param path the path we are concerned with - * @param mouseX is the cursor's x position - * @param mouseY is the cursor's y position - */ - protected void handleExpandControlClick(TreePath path, int mouseX, int mouseY) - { - toggleExpandState(path); - } - - /** - * Expands path if it is not expanded, or collapses row if it is expanded. If - * expanding a path and JTree scroll on expand, ensureRowsAreVisible is - * invoked to scroll as many of the children to visible as possible (tries to - * scroll to last visible descendant of path). - * - * @param path the path we are concerned with - */ - protected void toggleExpandState(TreePath path) - { - // tree.isExpanded(path) would do the same, but treeState knows faster. - if (treeState.isExpanded(path)) - tree.collapsePath(path); - else - tree.expandPath(path); - } - - /** - * Returning true signifies a mouse event on the node should toggle the - * selection of only the row under the mouse. The BasisTreeUI treats the - * event as "toggle selection event" if the CTRL button was pressed while - * clicking. The event is not counted as toggle event if the associated - * tree does not support the multiple selection. - * - * @param event is the MouseEvent performed on the row. - * @return true signifies a mouse event on the node should toggle the - * selection of only the row under the mouse. - */ - protected boolean isToggleSelectionEvent(MouseEvent event) - { - return - (tree.getSelectionModel().getSelectionMode() != - TreeSelectionModel.SINGLE_TREE_SELECTION) && - ((event.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0); - } - - /** - * Returning true signifies a mouse event on the node should select from the - * anchor point. The BasisTreeUI treats the event as "multiple selection - * event" if the SHIFT button was pressed while clicking. The event is not - * counted as multiple selection event if the associated tree does not support - * the multiple selection. - * - * @param event is the MouseEvent performed on the node. - * @return true signifies a mouse event on the node should select from the - * anchor point. - */ - protected boolean isMultiSelectEvent(MouseEvent event) - { - return - (tree.getSelectionModel().getSelectionMode() != - TreeSelectionModel.SINGLE_TREE_SELECTION) && - ((event.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0); - } - - /** - * Returning true indicates the row under the mouse should be toggled based on - * the event. This is invoked after checkForClickInExpandControl, implying the - * location is not in the expand (toggle) control. - * - * @param event is the MouseEvent performed on the row. - * @return true indicates the row under the mouse should be toggled based on - * the event. - */ - protected boolean isToggleEvent(MouseEvent event) - { - boolean toggle = false; - if (SwingUtilities.isLeftMouseButton(event)) - { - int clickCount = tree.getToggleClickCount(); - if (clickCount > 0 && event.getClickCount() == clickCount) - toggle = true; - } - return toggle; - } - - /** - * Messaged to update the selection based on a MouseEvent over a particular - * row. If the even is a toggle selection event, the row is either selected, - * or deselected. If the event identifies a multi selection event, the - * selection is updated from the anchor point. Otherwise, the row is selected, - * and the previous selection is cleared.</p> - * - * @param path is the path selected for an event - * @param event is the MouseEvent performed on the path. - * - * @see #isToggleSelectionEvent(MouseEvent) - * @see #isMultiSelectEvent(MouseEvent) - */ - protected void selectPathForEvent(TreePath path, MouseEvent event) - { - if (isToggleSelectionEvent(event)) - { - // The event selects or unselects the clicked row. - if (tree.isPathSelected(path)) - tree.removeSelectionPath(path); - else - { - tree.addSelectionPath(path); - tree.setAnchorSelectionPath(path); - } - } - else if (isMultiSelectEvent(event)) - { - // The event extends selection form anchor till the clicked row. - TreePath anchor = tree.getAnchorSelectionPath(); - if (anchor != null) - { - int aRow = getRowForPath(tree, anchor); - tree.addSelectionInterval(aRow, getRowForPath(tree, path)); - } - else - tree.addSelectionPath(path); - } - else - { - // This is an ordinary event that just selects the clicked row. - tree.setSelectionPath(path); - if (isToggleEvent(event)) - toggleExpandState(path); - } - } - - /** - * Returns true if the node at <code>row</code> is a leaf. - * - * @param row is the row we are concerned with. - * @return true if the node at <code>row</code> is a leaf. - */ - protected boolean isLeaf(int row) - { - TreePath pathForRow = getPathForRow(tree, row); - if (pathForRow == null) - return true; - - Object node = pathForRow.getLastPathComponent(); - return treeModel.isLeaf(node); - } - - /** - * The action to start editing at the current lead selection path. - */ - class TreeStartEditingAction - extends AbstractAction - { - /** - * Creates the new tree cancel editing action. - * - * @param name the name of the action (used in toString). - */ - public TreeStartEditingAction(String name) - { - super(name); - } - - /** - * Start editing at the current lead selection path. - * - * @param e the ActionEvent that caused this action. - */ - public void actionPerformed(ActionEvent e) - { - TreePath lead = tree.getLeadSelectionPath(); - if (!tree.isEditing()) - tree.startEditingAtPath(lead); - } - } - - /** - * Updates the preferred size when scrolling, if necessary. - */ - public class ComponentHandler - extends ComponentAdapter - implements ActionListener - { - /** - * Timer used when inside a scrollpane and the scrollbar is adjusting - */ - protected Timer timer; - - /** ScrollBar that is being adjusted */ - protected JScrollBar scrollBar; - - /** - * Constructor - */ - public ComponentHandler() - { - // Nothing to do here. - } - - /** - * Invoked when the component's position changes. - * - * @param e the event that occurs when moving the component - */ - public void componentMoved(ComponentEvent e) - { - if (timer == null) - { - JScrollPane scrollPane = getScrollPane(); - if (scrollPane == null) - updateSize(); - else - { - // Determine the scrollbar that is adjusting, if any, and - // start the timer for that. If no scrollbar is adjusting, - // we simply call updateSize(). - scrollBar = scrollPane.getVerticalScrollBar(); - if (scrollBar == null || !scrollBar.getValueIsAdjusting()) - { - // It's not the vertical scrollbar, try the horizontal one. - scrollBar = scrollPane.getHorizontalScrollBar(); - if (scrollBar != null && scrollBar.getValueIsAdjusting()) - startTimer(); - else - updateSize(); - } - else - { - startTimer(); - } - } - } - } - - /** - * Creates, if necessary, and starts a Timer to check if needed to resize - * the bounds - */ - protected void startTimer() - { - if (timer == null) - { - timer = new Timer(200, this); - timer.setRepeats(true); - } - timer.start(); - } - - /** - * Returns the JScrollPane housing the JTree, or null if one isn't found. - * - * @return JScrollPane housing the JTree, or null if one isn't found. - */ - protected JScrollPane getScrollPane() - { - JScrollPane found = null; - Component p = tree.getParent(); - while (p != null && !(p instanceof JScrollPane)) - p = p.getParent(); - if (p instanceof JScrollPane) - found = (JScrollPane) p; - return found; - } - - /** - * Public as a result of Timer. If the scrollBar is null, or not adjusting, - * this stops the timer and updates the sizing. - * - * @param ae is the action performed - */ - public void actionPerformed(ActionEvent ae) - { - if (scrollBar == null || !scrollBar.getValueIsAdjusting()) - { - if (timer != null) - timer.stop(); - updateSize(); - timer = null; - scrollBar = null; - } - } - } - - /** - * Listener responsible for getting cell editing events and updating the tree - * accordingly. - */ - public class CellEditorHandler - implements CellEditorListener - { - /** - * Constructor - */ - public CellEditorHandler() - { - // Nothing to do here. - } - - /** - * Messaged when editing has stopped in the tree. Tells the listeners - * editing has stopped. - * - * @param e is the notification event - */ - public void editingStopped(ChangeEvent e) - { - completeEditing(false, false, true); - } - - /** - * Messaged when editing has been canceled in the tree. This tells the - * listeners the editor has canceled editing. - * - * @param e is the notification event - */ - public void editingCanceled(ChangeEvent e) - { - completeEditing(false, false, false); - } - } // CellEditorHandler - - /** - * Repaints the lead selection row when focus is lost/grained. - */ - public class FocusHandler - implements FocusListener - { - /** - * Constructor - */ - public FocusHandler() - { - // Nothing to do here. - } - - /** - * Invoked when focus is activated on the tree we're in, redraws the lead - * row. Invoked when a component gains the keyboard focus. The method - * repaints the lead row that is shown differently when the tree is in - * focus. - * - * @param e is the focus event that is activated - */ - public void focusGained(FocusEvent e) - { - repaintLeadRow(); - } - - /** - * Invoked when focus is deactivated on the tree we're in, redraws the lead - * row. Invoked when a component loses the keyboard focus. The method - * repaints the lead row that is shown differently when the tree is in - * focus. - * - * @param e is the focus event that is deactivated - */ - public void focusLost(FocusEvent e) - { - repaintLeadRow(); - } - - /** - * Repaint the lead row. - */ - void repaintLeadRow() - { - TreePath lead = tree.getLeadSelectionPath(); - if (lead != null) - tree.repaint(tree.getPathBounds(lead)); - } - } - - /** - * This is used to get multiple key down events to appropriately genereate - * events. - */ - public class KeyHandler - extends KeyAdapter - { - /** Key code that is being generated for. */ - protected Action repeatKeyAction; - - /** Set to true while keyPressed is active */ - protected boolean isKeyDown; - - /** - * Constructor - */ - public KeyHandler() - { - // Nothing to do here. - } - - /** - * Invoked when a key has been typed. Moves the keyboard focus to the first - * element whose first letter matches the alphanumeric key pressed by the - * user. Subsequent same key presses move the keyboard focus to the next - * object that starts with the same letter. - * - * @param e the key typed - */ - public void keyTyped(KeyEvent e) - { - char typed = Character.toLowerCase(e.getKeyChar()); - for (int row = tree.getLeadSelectionRow() + 1; - row < tree.getRowCount(); row++) - { - if (checkMatch(row, typed)) - { - tree.setSelectionRow(row); - tree.scrollRowToVisible(row); - return; - } - } - - // Not found below, search above: - for (int row = 0; row < tree.getLeadSelectionRow(); row++) - { - if (checkMatch(row, typed)) - { - tree.setSelectionRow(row); - tree.scrollRowToVisible(row); - return; - } - } - } - - /** - * Check if the given tree row starts with this character - * - * @param row the tree row - * @param typed the typed char, must be converted to lowercase - * @return true if the given tree row starts with this character - */ - boolean checkMatch(int row, char typed) - { - TreePath path = treeState.getPathForRow(row); - String node = path.getLastPathComponent().toString(); - if (node.length() > 0) - { - char x = node.charAt(0); - if (typed == Character.toLowerCase(x)) - return true; - } - return false; - } - - /** - * Invoked when a key has been pressed. - * - * @param e the key pressed - */ - public void keyPressed(KeyEvent e) - { - // Nothing to do here. - } - - /** - * Invoked when a key has been released - * - * @param e the key released - */ - public void keyReleased(KeyEvent e) - { - // Nothing to do here. - } - } - - /** - * MouseListener is responsible for updating the selection based on mouse - * events. - */ - public class MouseHandler - extends MouseAdapter - implements MouseMotionListener - { - - /** - * If the cell has been selected on mouse press. - */ - private boolean selectedOnPress; - - /** - * Constructor - */ - public MouseHandler() - { - // Nothing to do here. - } - - /** - * Invoked when a mouse button has been pressed on a component. - * - * @param e is the mouse event that occured - */ - public void mousePressed(MouseEvent e) - { - if (! e.isConsumed()) - { - handleEvent(e); - selectedOnPress = true; - } - else - { - selectedOnPress = false; - } - } - - /** - * Invoked when a mouse button is pressed on a component and then dragged. - * MOUSE_DRAGGED events will continue to be delivered to the component where - * the drag originated until the mouse button is released (regardless of - * whether the mouse position is within the bounds of the component). - * - * @param e is the mouse event that occured - */ - public void mouseDragged(MouseEvent e) - { - // Nothing to do here. - } - - /** - * Invoked when the mouse button has been moved on a component (with no - * buttons no down). - * - * @param e the mouse event that occured - */ - public void mouseMoved(MouseEvent e) - { - // Nothing to do here. - } - - /** - * Invoked when a mouse button has been released on a component. - * - * @param e is the mouse event that occured - */ - public void mouseReleased(MouseEvent e) - { - if (! e.isConsumed() && ! selectedOnPress) - handleEvent(e); - } - - /** - * Handles press and release events. - * - * @param e the mouse event - */ - private void handleEvent(MouseEvent e) - { - if (tree != null && tree.isEnabled()) - { - // Maybe stop editing. - if (isEditing(tree) && tree.getInvokesStopCellEditing() - && ! stopEditing(tree)) - return; - - // Explicitly request focus. - tree.requestFocusInWindow(); - - int x = e.getX(); - int y = e.getY(); - TreePath path = getClosestPathForLocation(tree, x, y); - if (path != null) - { - Rectangle b = getPathBounds(tree, path); - if (y <= b.y + b.height) - { - if (SwingUtilities.isLeftMouseButton(e)) - checkForClickInExpandControl(path, x, y); - if (x > b.x && x <= b.x + b.width) - { - if (! startEditing(path, e)) - selectPathForEvent(path, e); - } - } - } - } - } - } - - /** - * MouseInputHandler handles passing all mouse events, including mouse motion - * events, until the mouse is released to the destination it is constructed - * with. - */ - public class MouseInputHandler - implements MouseInputListener - { - /** Source that events are coming from */ - protected Component source; - - /** Destination that receives all events. */ - protected Component destination; - - /** - * Constructor - * - * @param source that events are coming from - * @param destination that receives all events - * @param e is the event received - */ - public MouseInputHandler(Component source, Component destination, - MouseEvent e) - { - this.source = source; - this.destination = destination; - source.addMouseListener(this); - source.addMouseMotionListener(this); - dispatch(e); - } - - /** - * Invoked when the mouse button has been clicked (pressed and released) on - * a component. - * - * @param e mouse event that occured - */ - public void mouseClicked(MouseEvent e) - { - dispatch(e); - } - - /** - * Invoked when a mouse button has been pressed on a component. - * - * @param e mouse event that occured - */ - public void mousePressed(MouseEvent e) - { - // Nothing to do here. - } - - /** - * Invoked when a mouse button has been released on a component. - * - * @param e mouse event that occured - */ - public void mouseReleased(MouseEvent e) - { - dispatch(e); - removeFromSource(); - } - - /** - * Invoked when the mouse enters a component. - * - * @param e mouse event that occured - */ - public void mouseEntered(MouseEvent e) - { - if (! SwingUtilities.isLeftMouseButton(e)) - removeFromSource(); - } - - /** - * Invoked when the mouse exits a component. - * - * @param e mouse event that occured - */ - public void mouseExited(MouseEvent e) - { - if (! SwingUtilities.isLeftMouseButton(e)) - removeFromSource(); - } - - /** - * Invoked when a mouse button is pressed on a component and then dragged. - * MOUSE_DRAGGED events will continue to be delivered to the component where - * the drag originated until the mouse button is released (regardless of - * whether the mouse position is within the bounds of the component). - * - * @param e mouse event that occured - */ - public void mouseDragged(MouseEvent e) - { - dispatch(e); - } - - /** - * Invoked when the mouse cursor has been moved onto a component but no - * buttons have been pushed. - * - * @param e mouse event that occured - */ - public void mouseMoved(MouseEvent e) - { - removeFromSource(); - } - - /** - * Removes event from the source - */ - protected void removeFromSource() - { - if (source != null) - { - source.removeMouseListener(this); - source.removeMouseMotionListener(this); - } - source = null; - destination = null; - } - - /** - * Redispatches mouse events to the destination. - * - * @param e the mouse event to redispatch - */ - private void dispatch(MouseEvent e) - { - if (destination != null) - { - MouseEvent e2 = SwingUtilities.convertMouseEvent(source, e, - destination); - destination.dispatchEvent(e2); - } - } - } - - /** - * Class responsible for getting size of node, method is forwarded to - * BasicTreeUI method. X location does not include insets, that is handled in - * getPathBounds. - */ - public class NodeDimensionsHandler - extends AbstractLayoutCache.NodeDimensions - { - /** - * Constructor - */ - public NodeDimensionsHandler() - { - // Nothing to do here. - } - - /** - * Returns, by reference in bounds, the size and x origin to place value at. - * The calling method is responsible for determining the Y location. If - * bounds is null, a newly created Rectangle should be returned, otherwise - * the value should be placed in bounds and returned. - * - * @param cell the value to be represented - * @param row row being queried - * @param depth the depth of the row - * @param expanded true if row is expanded - * @param size a Rectangle containing the size needed to represent value - * @return containing the node dimensions, or null if node has no dimension - */ - public Rectangle getNodeDimensions(Object cell, int row, int depth, - boolean expanded, Rectangle size) - { - Dimension prefSize; - if (editingComponent != null && editingRow == row) - { - // Editing, ask editor for preferred size. - prefSize = editingComponent.getPreferredSize(); - int rowHeight = getRowHeight(); - if (rowHeight > 0 && rowHeight != prefSize.height) - prefSize.height = rowHeight; - } - else - { - // Not editing, ask renderer for preferred size. - Component rend = - currentCellRenderer.getTreeCellRendererComponent(tree, cell, - tree.isRowSelected(row), - expanded, - treeModel.isLeaf(cell), - row, false); - // Make sure the layout is valid. - rendererPane.add(rend); - rend.validate(); - prefSize = rend.getPreferredSize(); - } - if (size != null) - { - size.x = getRowX(row, depth); - // FIXME: This should be handled by the layout cache. - size.y = prefSize.height * row; - size.width = prefSize.width; - size.height = prefSize.height; - } - else - // FIXME: The y should be handled by the layout cache. - size = new Rectangle(getRowX(row, depth), prefSize.height * row, prefSize.width, - prefSize.height); - - return size; - } - - /** - * Returns the amount to indent the given row - * - * @return amount to indent the given row. - */ - protected int getRowX(int row, int depth) - { - return BasicTreeUI.this.getRowX(row, depth); - } - } // NodeDimensionsHandler - - /** - * PropertyChangeListener for the tree. Updates the appropriate variable, or - * TreeState, based on what changes. - */ - public class PropertyChangeHandler - implements PropertyChangeListener - { - - /** - * Constructor - */ - public PropertyChangeHandler() - { - // Nothing to do here. - } - - /** - * This method gets called when a bound property is changed. - * - * @param event A PropertyChangeEvent object describing the event source and - * the property that has changed. - */ - public void propertyChange(PropertyChangeEvent event) - { - String property = event.getPropertyName(); - if (property.equals(JTree.ROOT_VISIBLE_PROPERTY)) - { - validCachedPreferredSize = false; - treeState.setRootVisible(tree.isRootVisible()); - tree.repaint(); - } - else if (property.equals(JTree.SELECTION_MODEL_PROPERTY)) - { - treeSelectionModel = tree.getSelectionModel(); - treeSelectionModel.setRowMapper(treeState); - } - else if (property.equals(JTree.TREE_MODEL_PROPERTY)) - { - setModel(tree.getModel()); - } - else if (property.equals(JTree.CELL_RENDERER_PROPERTY)) - { - setCellRenderer(tree.getCellRenderer()); - // Update layout. - if (treeState != null) - treeState.invalidateSizes(); - } - else if (property.equals(JTree.EDITABLE_PROPERTY)) - setEditable(((Boolean) event.getNewValue()).booleanValue()); - - } - } - - /** - * Listener on the TreeSelectionModel, resets the row selection if any of the - * properties of the model change. - */ - public class SelectionModelPropertyChangeHandler - implements PropertyChangeListener - { - - /** - * Constructor - */ - public SelectionModelPropertyChangeHandler() - { - // Nothing to do here. - } - - /** - * This method gets called when a bound property is changed. - * - * @param event A PropertyChangeEvent object describing the event source and - * the property that has changed. - */ - public void propertyChange(PropertyChangeEvent event) - { - treeSelectionModel.resetRowSelection(); - } - } - - /** - * The action to cancel editing on this tree. - */ - public class TreeCancelEditingAction - extends AbstractAction - { - /** - * Creates the new tree cancel editing action. - * - * @param name the name of the action (used in toString). - */ - public TreeCancelEditingAction(String name) - { - super(name); - } - - /** - * Invoked when an action occurs, cancels the cell editing (if the - * tree cell is being edited). - * - * @param e event that occured - */ - public void actionPerformed(ActionEvent e) - { - if (isEnabled() && tree.isEditing()) - tree.cancelEditing(); - } - } - - /** - * Updates the TreeState in response to nodes expanding/collapsing. - */ - public class TreeExpansionHandler - implements TreeExpansionListener - { - - /** - * Constructor - */ - public TreeExpansionHandler() - { - // Nothing to do here. - } - - /** - * Called whenever an item in the tree has been expanded. - * - * @param event is the event that occured - */ - public void treeExpanded(TreeExpansionEvent event) - { - validCachedPreferredSize = false; - treeState.setExpandedState(event.getPath(), true); - // The maximal cell height may change - maxHeight = 0; - tree.revalidate(); - tree.repaint(); - } - - /** - * Called whenever an item in the tree has been collapsed. - * - * @param event is the event that occured - */ - public void treeCollapsed(TreeExpansionEvent event) - { - completeEditing(); - validCachedPreferredSize = false; - treeState.setExpandedState(event.getPath(), false); - // The maximal cell height may change - maxHeight = 0; - tree.revalidate(); - tree.repaint(); - } - } // TreeExpansionHandler - - /** - * TreeHomeAction is used to handle end/home actions. Scrolls either the first - * or last cell to be visible based on direction. - */ - public class TreeHomeAction - extends AbstractAction - { - - /** The direction, either home or end */ - protected int direction; - - /** - * Creates a new TreeHomeAction instance. - * - * @param dir the direction to go to, <code>-1</code> for home, - * <code>1</code> for end - * @param name the name of the action - */ - public TreeHomeAction(int dir, String name) - { - direction = dir; - putValue(Action.NAME, name); - } - - /** - * Invoked when an action occurs. - * - * @param e is the event that occured - */ - public void actionPerformed(ActionEvent e) - { - if (tree != null) - { - String command = (String) getValue(Action.NAME); - if (command.equals("selectFirst")) - { - ensureRowsAreVisible(0, 0); - tree.setSelectionInterval(0, 0); - } - if (command.equals("selectFirstChangeLead")) - { - ensureRowsAreVisible(0, 0); - tree.setLeadSelectionPath(getPathForRow(tree, 0)); - } - if (command.equals("selectFirstExtendSelection")) - { - ensureRowsAreVisible(0, 0); - TreePath anchorPath = tree.getAnchorSelectionPath(); - if (anchorPath == null) - tree.setSelectionInterval(0, 0); - else - { - int anchorRow = getRowForPath(tree, anchorPath); - tree.setSelectionInterval(0, anchorRow); - tree.setAnchorSelectionPath(anchorPath); - tree.setLeadSelectionPath(getPathForRow(tree, 0)); - } - } - else if (command.equals("selectLast")) - { - int end = getRowCount(tree) - 1; - ensureRowsAreVisible(end, end); - tree.setSelectionInterval(end, end); - } - else if (command.equals("selectLastChangeLead")) - { - int end = getRowCount(tree) - 1; - ensureRowsAreVisible(end, end); - tree.setLeadSelectionPath(getPathForRow(tree, end)); - } - else if (command.equals("selectLastExtendSelection")) - { - int end = getRowCount(tree) - 1; - ensureRowsAreVisible(end, end); - TreePath anchorPath = tree.getAnchorSelectionPath(); - if (anchorPath == null) - tree.setSelectionInterval(end, end); - else - { - int anchorRow = getRowForPath(tree, anchorPath); - tree.setSelectionInterval(end, anchorRow); - tree.setAnchorSelectionPath(anchorPath); - tree.setLeadSelectionPath(getPathForRow(tree, end)); - } - } - } - - // Ensure that the lead path is visible after the increment action. - tree.scrollPathToVisible(tree.getLeadSelectionPath()); - } - - /** - * Returns true if the action is enabled. - * - * @return true if the action is enabled. - */ - public boolean isEnabled() - { - return (tree != null) && tree.isEnabled(); - } - } - - /** - * TreeIncrementAction is used to handle up/down actions. Selection is moved - * up or down based on direction. - */ - public class TreeIncrementAction - extends AbstractAction - { - - /** - * Specifies the direction to adjust the selection by. - */ - protected int direction; - - /** - * Creates a new TreeIncrementAction. - * - * @param dir up or down, <code>-1</code> for up, <code>1</code> for down - * @param name is the name of the direction - */ - public TreeIncrementAction(int dir, String name) - { - direction = dir; - putValue(Action.NAME, name); - } - - /** - * Invoked when an action occurs. - * - * @param e is the event that occured - */ - public void actionPerformed(ActionEvent e) - { - TreePath currentPath = tree.getLeadSelectionPath(); - int currentRow; - - if (currentPath != null) - currentRow = treeState.getRowForPath(currentPath); - else - currentRow = 0; - - int rows = treeState.getRowCount(); - - int nextRow = currentRow + 1; - int prevRow = currentRow - 1; - boolean hasNext = nextRow < rows; - boolean hasPrev = prevRow >= 0 && rows > 0; - TreePath newPath; - String command = (String) getValue(Action.NAME); - - if (command.equals("selectPreviousChangeLead") && hasPrev) - { - newPath = treeState.getPathForRow(prevRow); - tree.setSelectionPath(newPath); - tree.setAnchorSelectionPath(newPath); - tree.setLeadSelectionPath(newPath); - } - else if (command.equals("selectPreviousExtendSelection") && hasPrev) - { - newPath = treeState.getPathForRow(prevRow); - - // If the new path is already selected, the selection shrinks, - // unselecting the previously current path. - if (tree.isPathSelected(newPath)) - tree.getSelectionModel().removeSelectionPath(currentPath); - - // This must be called in any case because it updates the model - // lead selection index. - tree.addSelectionPath(newPath); - tree.setLeadSelectionPath(newPath); - } - else if (command.equals("selectPrevious") && hasPrev) - { - newPath = treeState.getPathForRow(prevRow); - tree.setSelectionPath(newPath); - } - else if (command.equals("selectNext") && hasNext) - { - newPath = treeState.getPathForRow(nextRow); - tree.setSelectionPath(newPath); - } - else if (command.equals("selectNextExtendSelection") && hasNext) - { - newPath = treeState.getPathForRow(nextRow); - - // If the new path is already selected, the selection shrinks, - // unselecting the previously current path. - if (tree.isPathSelected(newPath)) - tree.getSelectionModel().removeSelectionPath(currentPath); - - // This must be called in any case because it updates the model - // lead selection index. - tree.addSelectionPath(newPath); - - tree.setLeadSelectionPath(newPath); - } - else if (command.equals("selectNextChangeLead") && hasNext) - { - newPath = treeState.getPathForRow(nextRow); - tree.setSelectionPath(newPath); - tree.setAnchorSelectionPath(newPath); - tree.setLeadSelectionPath(newPath); - } - - // Ensure that the lead path is visible after the increment action. - tree.scrollPathToVisible(tree.getLeadSelectionPath()); - } - - /** - * Returns true if the action is enabled. - * - * @return true if the action is enabled. - */ - public boolean isEnabled() - { - return (tree != null) && tree.isEnabled(); - } - } - - /** - * Forwards all TreeModel events to the TreeState. - */ - public class TreeModelHandler - implements TreeModelListener - { - /** - * Constructor - */ - public TreeModelHandler() - { - // Nothing to do here. - } - - /** - * Invoked after a node (or a set of siblings) has changed in some way. The - * node(s) have not changed locations in the tree or altered their children - * arrays, but other attributes have changed and may affect presentation. - * Example: the name of a file has changed, but it is in the same location - * in the file system. To indicate the root has changed, childIndices and - * children will be null. Use e.getPath() to get the parent of the changed - * node(s). e.getChildIndices() returns the index(es) of the changed - * node(s). - * - * @param e is the event that occured - */ - public void treeNodesChanged(TreeModelEvent e) - { - validCachedPreferredSize = false; - treeState.treeNodesChanged(e); - tree.repaint(); - } - - /** - * Invoked after nodes have been inserted into the tree. Use e.getPath() to - * get the parent of the new node(s). e.getChildIndices() returns the - * index(es) of the new node(s) in ascending order. - * - * @param e is the event that occured - */ - public void treeNodesInserted(TreeModelEvent e) - { - validCachedPreferredSize = false; - treeState.treeNodesInserted(e); - tree.repaint(); - } - - /** - * Invoked after nodes have been removed from the tree. Note that if a - * subtree is removed from the tree, this method may only be invoked once - * for the root of the removed subtree, not once for each individual set of - * siblings removed. Use e.getPath() to get the former parent of the deleted - * node(s). e.getChildIndices() returns, in ascending order, the index(es) - * the node(s) had before being deleted. - * - * @param e is the event that occured - */ - public void treeNodesRemoved(TreeModelEvent e) - { - validCachedPreferredSize = false; - treeState.treeNodesRemoved(e); - tree.repaint(); - } - - /** - * Invoked after the tree has drastically changed structure from a given - * node down. If the path returned by e.getPath() is of length one and the - * first element does not identify the current root node the first element - * should become the new root of the tree. Use e.getPath() to get the path - * to the node. e.getChildIndices() returns null. - * - * @param e is the event that occured - */ - public void treeStructureChanged(TreeModelEvent e) - { - if (e.getPath().length == 1 - && ! e.getPath()[0].equals(treeModel.getRoot())) - tree.expandPath(new TreePath(treeModel.getRoot())); - validCachedPreferredSize = false; - treeState.treeStructureChanged(e); - tree.repaint(); - } - } // TreeModelHandler - - /** - * TreePageAction handles page up and page down events. - */ - public class TreePageAction - extends AbstractAction - { - /** Specifies the direction to adjust the selection by. */ - protected int direction; - - /** - * Constructor - * - * @param direction up or down - * @param name is the name of the direction - */ - public TreePageAction(int direction, String name) - { - this.direction = direction; - putValue(Action.NAME, name); - } - - /** - * Invoked when an action occurs. - * - * @param e is the event that occured - */ - public void actionPerformed(ActionEvent e) - { - String command = (String) getValue(Action.NAME); - boolean extendSelection = command.equals("scrollUpExtendSelection") - || command.equals("scrollDownExtendSelection"); - boolean changeSelection = command.equals("scrollUpChangeSelection") - || command.equals("scrollDownChangeSelection"); - - // Disable change lead, unless we are in discontinuous mode. - if (!extendSelection && !changeSelection - && tree.getSelectionModel().getSelectionMode() != - TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION) - { - changeSelection = true; - } - - int rowCount = getRowCount(tree); - if (rowCount > 0 && treeSelectionModel != null) - { - Dimension maxSize = tree.getSize(); - TreePath lead = tree.getLeadSelectionPath(); - TreePath newPath = null; - Rectangle visible = tree.getVisibleRect(); - if (direction == -1) // The RI handles -1 as up. - { - newPath = getClosestPathForLocation(tree, visible.x, visible.y); - if (newPath.equals(lead)) // Corner case, adjust one page up. - { - visible.y = Math.max(0, visible.y - visible.height); - newPath = getClosestPathForLocation(tree, visible.x, - visible.y); - } - } - else // +1 is down. - { - visible.y = Math.min(maxSize.height, - visible.y + visible.height - 1); - newPath = getClosestPathForLocation(tree, visible.x, visible.y); - if (newPath.equals(lead)) // Corner case, adjust one page down. - { - visible.y = Math.min(maxSize.height, - visible.y + visible.height - 1); - newPath = getClosestPathForLocation(tree, visible.x, - visible.y); - } - } - - // Determine new visible rect. - Rectangle newVisible = getPathBounds(tree, newPath); - newVisible.x = visible.x; - newVisible.width = visible.width; - if (direction == -1) - { - newVisible.height = visible.height; - } - else - { - newVisible.y -= visible.height - newVisible.height; - newVisible.height = visible.height; - } - - if (extendSelection) - { - // Extend selection. - TreePath anchorPath = tree.getAnchorSelectionPath(); - if (anchorPath == null) - { - tree.setSelectionPath(newPath); - } - else - { - int newIndex = getRowForPath(tree, newPath); - int anchorIndex = getRowForPath(tree, anchorPath); - tree.setSelectionInterval(Math.min(anchorIndex, newIndex), - Math.max(anchorIndex, newIndex)); - tree.setAnchorSelectionPath(anchorPath); - tree.setLeadSelectionPath(newPath); - } - } - else if (changeSelection) - { - tree.setSelectionPath(newPath); - } - else // Change lead. - { - tree.setLeadSelectionPath(newPath); - } - - tree.scrollRectToVisible(newVisible); - } - } - - /** - * Returns true if the action is enabled. - * - * @return true if the action is enabled. - */ - public boolean isEnabled() - { - return (tree != null) && tree.isEnabled(); - } - } // TreePageAction - - /** - * Listens for changes in the selection model and updates the display - * accordingly. - */ - public class TreeSelectionHandler - implements TreeSelectionListener - { - /** - * Constructor - */ - public TreeSelectionHandler() - { - // Nothing to do here. - } - - /** - * Messaged when the selection changes in the tree we're displaying for. - * Stops editing, messages super and displays the changed paths. - * - * @param event the event that characterizes the change. - */ - public void valueChanged(TreeSelectionEvent event) - { - completeEditing(); - - TreePath op = event.getOldLeadSelectionPath(); - TreePath np = event.getNewLeadSelectionPath(); - - // Repaint of the changed lead selection path. - if (op != np) - { - Rectangle o = treeState.getBounds(event.getOldLeadSelectionPath(), - new Rectangle()); - Rectangle n = treeState.getBounds(event.getNewLeadSelectionPath(), - new Rectangle()); - - if (o != null) - tree.repaint(o); - if (n != null) - tree.repaint(n); - } - } - } // TreeSelectionHandler - - /** - * For the first selected row expandedness will be toggled. - */ - public class TreeToggleAction - extends AbstractAction - { - /** - * Creates a new TreeToggleAction. - * - * @param name is the name of <code>Action</code> field - */ - public TreeToggleAction(String name) - { - putValue(Action.NAME, name); - } - - /** - * Invoked when an action occurs. - * - * @param e the event that occured - */ - public void actionPerformed(ActionEvent e) - { - int selected = tree.getLeadSelectionRow(); - if (selected != -1 && isLeaf(selected)) - { - TreePath anchorPath = tree.getAnchorSelectionPath(); - TreePath leadPath = tree.getLeadSelectionPath(); - toggleExpandState(getPathForRow(tree, selected)); - // Need to do this, so that the toggling doesn't mess up the lead - // and anchor. - tree.setLeadSelectionPath(leadPath); - tree.setAnchorSelectionPath(anchorPath); - - // Ensure that the lead path is visible after the increment action. - tree.scrollPathToVisible(tree.getLeadSelectionPath()); - } - } - - /** - * Returns true if the action is enabled. - * - * @return true if the action is enabled, false otherwise - */ - public boolean isEnabled() - { - return (tree != null) && tree.isEnabled(); - } - } // TreeToggleAction - - /** - * TreeTraverseAction is the action used for left/right keys. Will toggle the - * expandedness of a node, as well as potentially incrementing the selection. - */ - public class TreeTraverseAction - extends AbstractAction - { - /** - * Determines direction to traverse, 1 means expand, -1 means collapse. - */ - protected int direction; - - /** - * Constructor - * - * @param direction to traverse - * @param name is the name of the direction - */ - public TreeTraverseAction(int direction, String name) - { - this.direction = direction; - putValue(Action.NAME, name); - } - - /** - * Invoked when an action occurs. - * - * @param e the event that occured - */ - public void actionPerformed(ActionEvent e) - { - TreePath current = tree.getLeadSelectionPath(); - if (current == null) - return; - - String command = (String) getValue(Action.NAME); - if (command.equals("selectParent")) - { - if (current == null) - return; - - if (tree.isExpanded(current)) - { - tree.collapsePath(current); - } - else - { - // If the node is not expanded (also, if it is a leaf node), - // we just select the parent. We do not select the root if it - // is not visible. - TreePath parent = current.getParentPath(); - if (parent != null && - ! (parent.getPathCount() == 1 && ! tree.isRootVisible())) - tree.setSelectionPath(parent); - } - } - else if (command.equals("selectChild")) - { - Object node = current.getLastPathComponent(); - int nc = treeModel.getChildCount(node); - if (nc == 0 || treeState.isExpanded(current)) - { - // If the node is leaf or it is already expanded, - // we just select the next row. - int nextRow = tree.getLeadSelectionRow() + 1; - if (nextRow <= tree.getRowCount()) - tree.setSelectionRow(nextRow); - } - else - { - tree.expandPath(current); - } - } - - // Ensure that the lead path is visible after the increment action. - tree.scrollPathToVisible(tree.getLeadSelectionPath()); - } - - /** - * Returns true if the action is enabled. - * - * @return true if the action is enabled, false otherwise - */ - public boolean isEnabled() - { - return (tree != null) && tree.isEnabled(); - } - } - - /** - * Returns true if the LookAndFeel implements the control icons. Package - * private for use in inner classes. - * - * @returns true if there are control icons - */ - boolean hasControlIcons() - { - if (expandedIcon != null || collapsedIcon != null) - return true; - return false; - } - - /** - * Returns control icon. It is null if the LookAndFeel does not implements the - * control icons. Package private for use in inner classes. - * - * @return control icon if it exists. - */ - Icon getCurrentControlIcon(TreePath path) - { - if (hasControlIcons()) - { - if (tree.isExpanded(path)) - return expandedIcon; - else - return collapsedIcon; - } - else - { - if (nullIcon == null) - nullIcon = new Icon() - { - public int getIconHeight() - { - return 0; - } - - public int getIconWidth() - { - return 0; - } - - public void paintIcon(Component c, Graphics g, int x, int y) - { - // No action here. - } - }; - return nullIcon; - } - } - - /** - * Returns the parent of the current node - * - * @param root is the root of the tree - * @param node is the current node - * @return is the parent of the current node - */ - Object getParent(Object root, Object node) - { - if (root == null || node == null || root.equals(node)) - return null; - - if (node instanceof TreeNode) - return ((TreeNode) node).getParent(); - return findNode(root, node); - } - - /** - * Recursively checks the tree for the specified node, starting at the root. - * - * @param root is starting node to start searching at. - * @param node is the node to search for - * @return the parent node of node - */ - private Object findNode(Object root, Object node) - { - if (! treeModel.isLeaf(root) && ! root.equals(node)) - { - int size = treeModel.getChildCount(root); - for (int j = 0; j < size; j++) - { - Object child = treeModel.getChild(root, j); - if (node.equals(child)) - return root; - - Object n = findNode(child, node); - if (n != null) - return n; - } - } - return null; - } - - /** - * Selects the specified path in the tree depending on modes. Package private - * for use in inner classes. - * - * @param tree is the tree we are selecting the path in - * @param path is the path we are selecting - */ - void selectPath(JTree tree, TreePath path) - { - if (path != null) - { - tree.setSelectionPath(path); - tree.setLeadSelectionPath(path); - tree.makeVisible(path); - tree.scrollPathToVisible(path); - } - } - - /** - * Returns the path from node to the root. Package private for use in inner - * classes. - * - * @param node the node to get the path to - * @param depth the depth of the tree to return a path for - * @return an array of tree nodes that represent the path to node. - */ - Object[] getPathToRoot(Object node, int depth) - { - if (node == null) - { - if (depth == 0) - return null; - - return new Object[depth]; - } - - Object[] path = getPathToRoot(getParent(treeModel.getRoot(), node), - depth + 1); - path[path.length - depth - 1] = node; - return path; - } - - /** - * Draws a vertical line using the given graphic context - * - * @param g is the graphic context - * @param c is the component the new line will belong to - * @param x is the horizonal position - * @param top specifies the top of the line - * @param bottom specifies the bottom of the line - */ - protected void paintVerticalLine(Graphics g, JComponent c, int x, int top, - int bottom) - { - // FIXME: Check if drawing a dashed line or not. - g.setColor(getHashColor()); - g.drawLine(x, top, x, bottom); - } - - /** - * Draws a horizontal line using the given graphic context - * - * @param g is the graphic context - * @param c is the component the new line will belong to - * @param y is the vertical position - * @param left specifies the left point of the line - * @param right specifies the right point of the line - */ - protected void paintHorizontalLine(Graphics g, JComponent c, int y, int left, - int right) - { - // FIXME: Check if drawing a dashed line or not. - g.setColor(getHashColor()); - g.drawLine(left, y, right, y); - } - - /** - * Draws an icon at around a specific position - * - * @param c is the component the new line will belong to - * @param g is the graphic context - * @param icon is the icon which will be drawn - * @param x is the center position in x-direction - * @param y is the center position in y-direction - */ - protected void drawCentered(Component c, Graphics g, Icon icon, int x, int y) - { - x -= icon.getIconWidth() / 2; - y -= icon.getIconHeight() / 2; - - if (x < 0) - x = 0; - if (y < 0) - y = 0; - - icon.paintIcon(c, g, x, y); - } - - /** - * Draws a dashed horizontal line. - * - * @param g - the graphics configuration. - * @param y - the y location to start drawing at - * @param x1 - the x location to start drawing at - * @param x2 - the x location to finish drawing at - */ - protected void drawDashedHorizontalLine(Graphics g, int y, int x1, int x2) - { - g.setColor(getHashColor()); - for (int i = x1; i < x2; i += 2) - g.drawLine(i, y, i + 1, y); - } - - /** - * Draws a dashed vertical line. - * - * @param g - the graphics configuration. - * @param x - the x location to start drawing at - * @param y1 - the y location to start drawing at - * @param y2 - the y location to finish drawing at - */ - protected void drawDashedVerticalLine(Graphics g, int x, int y1, int y2) - { - g.setColor(getHashColor()); - for (int i = y1; i < y2; i += 2) - g.drawLine(x, i, x, i + 1); - } - - /** - * Paints the expand (toggle) part of a row. The receiver should NOT modify - * clipBounds, or insets. - * - * @param g - the graphics configuration - * @param clipBounds - - * @param insets - - * @param bounds - bounds of expand control - * @param path - path to draw control for - * @param row - row to draw control for - * @param isExpanded - is the row expanded - * @param hasBeenExpanded - has the row already been expanded - * @param isLeaf - is the path a leaf - */ - protected void paintExpandControl(Graphics g, Rectangle clipBounds, - Insets insets, Rectangle bounds, - TreePath path, int row, boolean isExpanded, - boolean hasBeenExpanded, boolean isLeaf) - { - if (shouldPaintExpandControl(path, row, isExpanded, hasBeenExpanded, isLeaf)) - { - Icon icon = getCurrentControlIcon(path); - int iconW = icon.getIconWidth(); - int x = bounds.x - iconW - gap; - icon.paintIcon(tree, g, x, bounds.y + bounds.height / 2 - - icon.getIconHeight() / 2); - } - } - - /** - * Paints the horizontal part of the leg. The receiver should NOT modify - * clipBounds, or insets. NOTE: parentRow can be -1 if the root is not - * visible. - * - * @param g - the graphics configuration - * @param clipBounds - - * @param insets - - * @param bounds - bounds of the cell - * @param path - path to draw leg for - * @param row - row to start drawing at - * @param isExpanded - is the row expanded - * @param hasBeenExpanded - has the row already been expanded - * @param isLeaf - is the path a leaf - */ - protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds, - Insets insets, Rectangle bounds, - TreePath path, int row, - boolean isExpanded, - boolean hasBeenExpanded, - boolean isLeaf) - { - if (row != 0) - { - paintHorizontalLine(g, tree, bounds.y + bounds.height / 2, - bounds.x - leftChildIndent - gap, bounds.x - gap); - } - } - - /** - * Paints the vertical part of the leg. The receiver should NOT modify - * clipBounds, insets. - * - * @param g - the graphics configuration. - * @param clipBounds - - * @param insets - - * @param path - the path to draw the vertical part for. - */ - protected void paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds, - Insets insets, TreePath path) - { - Rectangle bounds = getPathBounds(tree, path); - TreePath parent = path.getParentPath(); - - boolean paintLine; - if (isRootVisible()) - paintLine = parent != null; - else - paintLine = parent != null && parent.getPathCount() > 1; - if (paintLine) - { - Rectangle parentBounds = getPathBounds(tree, parent); - paintVerticalLine(g, tree, parentBounds.x + 2 * gap, - parentBounds.y + parentBounds.height / 2, - bounds.y + bounds.height / 2); - } - } - - /** - * Paints the renderer part of a row. The receiver should NOT modify - * clipBounds, or insets. - * - * @param g - the graphics configuration - * @param clipBounds - - * @param insets - - * @param bounds - bounds of expand control - * @param path - path to draw control for - * @param row - row to draw control for - * @param isExpanded - is the row expanded - * @param hasBeenExpanded - has the row already been expanded - * @param isLeaf - is the path a leaf - */ - protected void paintRow(Graphics g, Rectangle clipBounds, Insets insets, - Rectangle bounds, TreePath path, int row, - boolean isExpanded, boolean hasBeenExpanded, - boolean isLeaf) - { - boolean selected = tree.isPathSelected(path); - boolean hasIcons = false; - Object node = path.getLastPathComponent(); - - paintExpandControl(g, clipBounds, insets, bounds, path, row, isExpanded, - hasBeenExpanded, isLeaf); - - TreeCellRenderer dtcr = currentCellRenderer; - - boolean focused = false; - if (treeSelectionModel != null) - focused = treeSelectionModel.getLeadSelectionRow() == row - && tree.isFocusOwner(); - - Component c = dtcr.getTreeCellRendererComponent(tree, node, selected, - isExpanded, isLeaf, row, - focused); - - rendererPane.paintComponent(g, c, c.getParent(), bounds); - } - - /** - * Prepares for the UI to uninstall. - */ - protected void prepareForUIUninstall() - { - // Nothing to do here yet. - } - - /** - * Returns true if the expand (toggle) control should be drawn for the - * specified row. - * - * @param path - current path to check for. - * @param row - current row to check for. - * @param isExpanded - true if the path is expanded - * @param hasBeenExpanded - true if the path has been expanded already - * @param isLeaf - true if the row is a lead - */ - protected boolean shouldPaintExpandControl(TreePath path, int row, - boolean isExpanded, - boolean hasBeenExpanded, - boolean isLeaf) - { - Object node = path.getLastPathComponent(); - return ! isLeaf && hasControlIcons(); - } - - /** - * Returns the amount to indent the given row - * - * @return amount to indent the given row. - */ - protected int getRowX(int row, int depth) - { - return depth * totalChildIndent; - } -} // BasicTreeUI diff --git a/libjava/classpath/javax/swing/plaf/basic/BasicViewportUI.java b/libjava/classpath/javax/swing/plaf/basic/BasicViewportUI.java deleted file mode 100644 index 11c7d63..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/BasicViewportUI.java +++ /dev/null @@ -1,75 +0,0 @@ -/* BasicViewportUI.java -- - Copyright (C) 2002, 2004 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.plaf.basic; - -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ViewportUI; - -public class BasicViewportUI extends ViewportUI -{ - protected void installDefaults(JComponent c) - { - c.setOpaque(true); - LookAndFeel.installColorsAndFont(c, "Viewport.background", - "Viewport.foreground", "Viewport.font"); - } - protected void uninstallDefaults(JComponent c) - { - // TODO: Implement this properly. - } - - public static ComponentUI createUI(JComponent c) - { - return new BasicViewportUI(); - } - - public void installUI(JComponent c) - { - super.installUI(c); - installDefaults(c); - } - - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - uninstallDefaults(c); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/ComboPopup.java b/libjava/classpath/javax/swing/plaf/basic/ComboPopup.java deleted file mode 100644 index 8bdcc51..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/ComboPopup.java +++ /dev/null @@ -1,103 +0,0 @@ -/* ComboPopup.java -- - Copyright (C) 2004 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.plaf.basic; - -import java.awt.event.KeyListener; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; - -import javax.swing.JList; - -public interface ComboPopup -{ - /** - * This method display popup menu containing list of JComboBox's items to - * the screen - */ - void show(); - - /** - * This method hides popup menu with list of JComboBox's item from the - * screen - */ - void hide(); - - /** - * Retursn true if popup menu with JComboBOx's item is currently visible on - * the screen and false otherwise - * - * @return true if JComboBox's popup menu with list of items is currently - * visible on the screen and false otherwise. - */ - boolean isVisible(); - - /** - * Return JList that is used to draw cells of the JComboBox. - * - * @return JList that is used to draw cells of the JcomboBox - */ - JList getList(); - - /** - * This method returns MouseListener that listen's to mouse events occuring - * in the combo box - * - * @return MouseListenere - */ - MouseListener getMouseListener(); - - /** - * This method returns MouseListener that listen's to mouse events occuring - * in the combo box. - * - * @return MouseMotionListener - */ - MouseMotionListener getMouseMotionListener(); - - /** - * This method returns KeyListener that listen's to key events occuring in - * the combo box. - * - * @return KeyListener - */ - KeyListener getKeyListener(); - - /* This method removes any listeners that were installed */ - void uninstallingUI(); -} diff --git a/libjava/classpath/javax/swing/plaf/basic/DefaultMenuLayout.java b/libjava/classpath/javax/swing/plaf/basic/DefaultMenuLayout.java deleted file mode 100644 index 9760e82..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/DefaultMenuLayout.java +++ /dev/null @@ -1,78 +0,0 @@ -/* DefaultMenuLayout.java - Copyright (C) 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.plaf.basic; - -import java.awt.Container; -import java.awt.Dimension; - -import javax.swing.BoxLayout; -import javax.swing.plaf.UIResource; - -/** - * The LayoutManager that is used in PopupMenus. This is a derived from - * {@link BoxLayout}. - * - * @author Roman Kennke (roman@kennke.org) - */ -public class DefaultMenuLayout - extends BoxLayout - implements UIResource -{ - - /** - * Creates a new instance of DefaultMenuLayout. - * - * @param target the component that is laid out - * @param axis the axis along which the component is laid out - */ - public DefaultMenuLayout(Container target, int axis) - { - super(target, axis); - } - - /** - * Returns the preferred size for the layout of the menu. - * - * @param target the Container which's preferred size we calculate - */ - public Dimension preferredLayoutSize(Container target) - { - return super.preferredLayoutSize(target); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/basic/SharedUIDefaults.java b/libjava/classpath/javax/swing/plaf/basic/SharedUIDefaults.java deleted file mode 100644 index 3427805..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/SharedUIDefaults.java +++ /dev/null @@ -1,91 +0,0 @@ -/* SharedUIDefaults.java -- Manages shared instances for UIDefaults - Copyright (C) 2006 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.plaf.basic; - -import java.awt.Color; -import java.util.HashMap; - -import javax.swing.UIManager; - -/** - * Manages shared instances for UI defaults. For example, all Swing components - * of one type usually share one InputMap/ActionMap pair. In order to avoid - * duplication of such objects we store them in a Map here. - * - * @author Roman Kennke (kennke@aicas.com) - */ -public class SharedUIDefaults -{ - - /** - * Stores the shared instances, indexed by their UI names - * (i.e. "TextField.InputMap"). - */ - private static HashMap sharedDefaults = new HashMap(); - - /** - * Returns a shared UI defaults object. - * - * @param key the key for the shared object - * - * @return a shared UI defaults object for the specified key - */ - static Object get(String key) - { - Object o = sharedDefaults.get(key); - if (o == null) - { - o = UIManager.get(key); - sharedDefaults.put(key, o); - } - return o; - } - - /** - * Returns a shared UI color. - * - * @param key the key - * - * @return the shared color instance - */ - static Color getColor(String key) - { - return (Color) get(key); - } -} diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders-1.png Binary files differdeleted file mode 100644 index daeb16c..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders-2.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders-2.png Binary files differdeleted file mode 100644 index 60f6a8a..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders-2.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png Binary files differdeleted file mode 100644 index 54047dc..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.ButtonBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder-1.png Binary files differdeleted file mode 100644 index 7c89911..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.FieldBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png Binary files differdeleted file mode 100644 index a3841ba..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.MarginBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.MenuBarBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.MenuBarBorder-1.png Binary files differdeleted file mode 100644 index 13a9fa4e..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.MenuBarBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.RadioButtonBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.RadioButtonBorder-1.png Binary files differdeleted file mode 100644 index a6408ec..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.RadioButtonBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png Binary files differdeleted file mode 100644 index db283c2..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png Binary files differdeleted file mode 100644 index 65381bd..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneBorder-2.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneDividerBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneDividerBorder-1.png Binary files differdeleted file mode 100644 index c22763a..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.SplitPaneDividerBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.ToggleButtonBorder-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.ToggleButtonBorder-1.png Binary files differdeleted file mode 100644 index f898bee..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicBorders.ToggleButtonBorder-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png Binary files differdeleted file mode 100644 index 99f8c6e..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png Binary files differdeleted file mode 100644 index 59d9a61..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-2.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png Binary files differdeleted file mode 100644 index 5b0971c..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-3.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png Binary files differdeleted file mode 100644 index ceba0b6e..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-4.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png Binary files differdeleted file mode 100644 index fa3055f..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-5.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png Binary files differdeleted file mode 100644 index c760313..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-6.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png b/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png Binary files differdeleted file mode 100644 index 6a557a0..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/doc-files/BasicGraphicsUtils-7.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/basic/package.html b/libjava/classpath/javax/swing/plaf/basic/package.html deleted file mode 100644 index 700c8cd..0000000 --- a/libjava/classpath/javax/swing/plaf/basic/package.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- package.html - describes classes in javax.swing.plaf.basic package. - Copyright (C) 2002, 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. --> - -<html> -<head><title>GNU Classpath - javax.swing.plaf.basic</title></head> - -<body> -<p>Provides a "basic" look and feel implementation.</p> - -</body> -</html> diff --git a/libjava/classpath/javax/swing/plaf/doc-files/ComponentUI-1.dia b/libjava/classpath/javax/swing/plaf/doc-files/ComponentUI-1.dia Binary files differdeleted file mode 100644 index 02bfbbe..0000000 --- a/libjava/classpath/javax/swing/plaf/doc-files/ComponentUI-1.dia +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/doc-files/ComponentUI-1.png b/libjava/classpath/javax/swing/plaf/doc-files/ComponentUI-1.png Binary files differdeleted file mode 100644 index def4cbc..0000000 --- a/libjava/classpath/javax/swing/plaf/doc-files/ComponentUI-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/doc-files/TreeUI-1.png b/libjava/classpath/javax/swing/plaf/doc-files/TreeUI-1.png Binary files differdeleted file mode 100644 index 0f01ab0..0000000 --- a/libjava/classpath/javax/swing/plaf/doc-files/TreeUI-1.png +++ /dev/null diff --git a/libjava/classpath/javax/swing/plaf/metal/DefaultMetalTheme.java b/libjava/classpath/javax/swing/plaf/metal/DefaultMetalTheme.java deleted file mode 100644 index 27c569f..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/DefaultMetalTheme.java +++ /dev/null @@ -1,305 +0,0 @@ -/* DefaultMetalTheme.java -- - Copyright (C) 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.plaf.metal; - -import gnu.classpath.SystemProperties; - -import java.awt.Font; - -import javax.swing.UIManager; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.FontUIResource; - -/** - * The default theme for the {@link MetalLookAndFeel}. - * - * @see MetalLookAndFeel#setCurrentTheme(MetalTheme) - */ -public class DefaultMetalTheme extends MetalTheme -{ - private static final ColorUIResource PRIMARY1 = - new ColorUIResource(102, 102, 153); - private static final ColorUIResource PRIMARY2 = - new ColorUIResource(153, 153, 204); - private static final ColorUIResource PRIMARY3 = - new ColorUIResource(204, 204, 255); - private static final ColorUIResource SECONDARY1 = - new ColorUIResource(102, 102, 102); - private static final ColorUIResource SECONDARY2 = - new ColorUIResource(153, 153, 153); - private static final ColorUIResource SECONDARY3 = - new ColorUIResource(204, 204, 204); - - private static final FontUIResource SUB_TEXT_FONT = - new FontUIResource("Dialog", Font.PLAIN, 10); - private static final FontUIResource SYSTEM_TEXT_FONT = - new FontUIResource("Dialog", Font.PLAIN, 12); - private static final FontUIResource USER_TEXT_FONT = - new FontUIResource("Dialog", Font.PLAIN, 12); - private static final FontUIResource WINDOW_TITLE_FONT = - new FontUIResource("Dialog", Font.BOLD, 12); - - /** - * The control text font for swing.boldMetal=false. - */ - private static final FontUIResource PLAIN_CONTROL_TEXT_FONT = - new FontUIResource("Dialog", Font.PLAIN, 12); - - /** - * The standard control text font. - */ - private static final FontUIResource BOLD_CONTROL_TEXT_FONT = - new FontUIResource("Dialog", Font.BOLD, 12); - - /** - * The menu text font for swing.boldMetal=false. - */ - private static final FontUIResource PLAIN_MENU_TEXT_FONT = - new FontUIResource("Dialog", Font.PLAIN, 12); - - /** - * The menu control text font. - */ - private static final FontUIResource BOLD_MENU_TEXT_FONT = - new FontUIResource("Dialog", Font.BOLD, 12); - - /** - * Indicates the control text font. - */ - static final int CONTROL_TEXT_FONT = 1; - - /** - * Indicates the menu text font. - */ - static final int MENU_TEXT_FONT = 2; - - /** - * Creates a new instance of this theme. - */ - public DefaultMetalTheme() - { - // Do nothing here. - } - - /** - * Returns the name of the theme. - * - * @return <code>"Steel"</code>. - */ - public String getName() - { - return "Steel"; - } - - /** - * Returns the first primary color for this theme. - * - * @return The first primary color. - */ - protected ColorUIResource getPrimary1() - { - return PRIMARY1; - } - - /** - * Returns the second primary color for this theme. - * - * @return The second primary color. - */ - protected ColorUIResource getPrimary2() - { - return PRIMARY2; - } - - /** - * Returns the third primary color for this theme. - * - * @return The third primary color. - */ - protected ColorUIResource getPrimary3() - { - return PRIMARY3; - } - - /** - * Returns the first secondary color for this theme. - * - * @return The first secondary color. - */ - protected ColorUIResource getSecondary1() - { - return SECONDARY1; - } - - /** - * Returns the second secondary color for this theme. - * - * @return The second secondary color. - */ - protected ColorUIResource getSecondary2() - { - return SECONDARY2; - } - - /** - * Returns the third secondary color for this theme. - * - * @return The third secondary color. - */ - protected ColorUIResource getSecondary3() - { - return SECONDARY3; - } - - /** - * Returns the font used for text on controls. In this case, the font is - * <code>FontUIResource("Dialog", Font.BOLD, 12)</code>, unless the - * <code>swing.boldMetal</code> UI default is set to {@link Boolean#FALSE} - * in which case it is <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. - * - * @return The font. - */ - public FontUIResource getControlTextFont() - { - return getFont(CONTROL_TEXT_FONT); - } - - /** - * Returns the font used for text in menus. In this case, the font is - * <code>FontUIResource("Dialog", Font.BOLD, 12)</code>, unless the - * <code>swing.boldMetal</code> UI default is set to {@link Boolean#FALSE} - * in which case it is <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. - * - * @return The font used for text in menus. - */ - public FontUIResource getMenuTextFont() - { - return getFont(MENU_TEXT_FONT); - } - - /** - * Returns the font used for sub text. In this case, the font is - * <code>FontUIResource("Dialog", Font.PLAIN, 10)</code>. - * - * @return The font used for sub text. - */ - public FontUIResource getSubTextFont() - { - return SUB_TEXT_FONT; - } - - /** - * Returns the font used for system text. In this case, the font is - * <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. - * - * @return The font used for system text. - */ - public FontUIResource getSystemTextFont() - { - return SYSTEM_TEXT_FONT; - } - - /** - * Returns the font used for user text. In this case, the font is - * <code>FontUIResource("Dialog", Font.PLAIN, 12)</code>. - * - * @return The font used for user text. - */ - public FontUIResource getUserTextFont() - { - return USER_TEXT_FONT; - } - - /** - * Returns the font used for window titles. In this case, the font is - * <code>FontUIResource("Dialog", Font.BOLD, 12)</code>. - * - * @return The font used for window titles. - */ - public FontUIResource getWindowTitleFont() - { - return WINDOW_TITLE_FONT; - } - - /** - * Returns the appropriate font. The font type to return is identified - * by the specified id. - * - * @param id the font type to return - * - * @return the correct font - */ - private FontUIResource getFont(int id) - { - FontUIResource font = null; - switch (id) - { - case CONTROL_TEXT_FONT: - if (isBoldMetal()) - font = BOLD_CONTROL_TEXT_FONT; - else - font = PLAIN_CONTROL_TEXT_FONT; - break; - case MENU_TEXT_FONT: - if (isBoldMetal()) - font = BOLD_MENU_TEXT_FONT; - else - font = PLAIN_MENU_TEXT_FONT; - break; - // TODO: Add other font types and their mapping here. - } - return font; - } - - /** - * Determines if the theme should be bold or not. The theme is bold by - * default, this can be turned off by setting the system property - * swing.boldMetal to true, or by putting the property with the same name - * into the current UIManager's defaults. - * - * @return <code>true</code>, when the theme is bold, <code>false</code> - * otherwise - */ - private boolean isBoldMetal() - { - Object boldMetal = UIManager.get("swing.boldMetal"); - return (boldMetal == null || ! Boolean.FALSE.equals(boldMetal)) - && ! ("false".equals(SystemProperties.getProperty("swing.boldMetal"))); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java b/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java deleted file mode 100644 index 2536299..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalBorders.java +++ /dev/null @@ -1,1626 +0,0 @@ -/* MetalBorders.java - Copyright (C) 2005, 2006, 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - -import javax.swing.AbstractButton; -import javax.swing.ButtonModel; -import javax.swing.JButton; -import javax.swing.JInternalFrame; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.JToggleButton; -import javax.swing.JToolBar; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.border.AbstractBorder; -import javax.swing.border.Border; -import javax.swing.border.CompoundBorder; -import javax.swing.plaf.BorderUIResource; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicBorders; -import javax.swing.text.JTextComponent; - - -/** - * A factory class that creates borders for the different Swing components. - * - * @author Roman Kennke (roman@kennke.org) - */ -public class MetalBorders -{ - - /** The shared instance for getButtonBorder(). */ - private static Border buttonBorder; - - /** The shared instance for getToggleButtonBorder(). */ - private static Border toggleButtonBorder; - - /** The shared instance for getDesktopIconBorder(). */ - private static Border desktopIconBorder; - - /** The shared instance for getRolloverButtonBorder(). */ - private static Border toolbarButtonBorder; - - /** The shared instance for getTextFieldBorder(). */ - private static Border textFieldBorder; - - /** The shared instance for getTextBorder(). */ - private static Border textBorder; - - /** The shared instance for getRolloverBorder(). */ - private static Border rolloverBorder; - - /** - * A MarginBorder that gets shared by multiple components. - * Created on demand by the private helper function {@link - * #getMarginBorder()}. - */ - private static BasicBorders.MarginBorder marginBorder; - - /** - * <p>A border used for {@link JButton} components.</p> - * - * <p>This {@link Border} implementation can handle only instances of - * {@link AbstractButton} and their subclasses.</p> - * - * <p>If the Metal Look and Feel's current theme is 'Ocean' the border - * will be painted with a special highlight when the mouse cursor if - * over the button (ie. the property <code>rollover</code> of the - * button's model is <code>true</code>) and is not a <b>direct</b> - * child of a {@link JToolBar}.</p> - */ - public static class ButtonBorder extends AbstractBorder implements UIResource - { - /** The borders insets. */ - protected static Insets borderInsets = new Insets(3, 3, 3, 3); - - /** - * Creates a new instance of <code>ButtonBorder</code>. - */ - public ButtonBorder() - { - // Nothing to do here. - } - - /** - * Paints the button border. - * - * @param c the component for which we paint the border - * @param g the Graphics context to use - * @param x the X coordinate of the upper left corner of c - * @param y the Y coordinate of the upper left corner of c - * @param w the width of c - * @param h the height of c - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - // With the OceanTheme the button border is painted entirely different. - // However, I couldn't figure out how this is determined besides checking - // for instanceof OceanTheme. The button painting is definitely not - // influenced by a UI default property and it is definitely performed - // by the same Border class. - if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme) - paintOceanButtonBorder(c, g, x, y, w, h); - else - paintDefaultButtonBorder(c, g, x, y, w, h); - } - - /** - * Paints the button border for the DefaultMetalTheme. - * - * @param c the component (button) - * @param g the graphics object to use - * @param x the upper left corner of the component, X coordinate - * @param y the upper left corner of the component, Y coordinate - * @param w the width of the component - * @param h the height of the component - */ - private void paintDefaultButtonBorder(Component c, Graphics g, int x, - int y, int w, int h) - { - ButtonModel bmodel = null; - - // The RI will fail with a ClassCastException in such a situation. - // This code tries to be more helpful. - if (c instanceof AbstractButton) - bmodel = ((AbstractButton) c).getModel(); - else - throw new IllegalStateException("A ButtonBorder is supposed to work " - + "only with AbstractButton and" - + "subclasses."); - - Color darkShadow = MetalLookAndFeel.getControlDarkShadow(); - Color shadow = MetalLookAndFeel.getControlShadow(); - Color light = MetalLookAndFeel.getControlHighlight(); - Color middle = MetalLookAndFeel.getControl(); - - if (c.isEnabled()) - { - // draw dark border - g.setColor(darkShadow); - g.drawRect(x, y, w - 2, h - 2); - - // If the button is the default button, we paint a special border, - // regardless of the pressed state. - if (c instanceof JButton && ((JButton) c).isDefaultButton()) - { - g.drawRect(x + 1, y + 1, w - 4, h - 4); - // Draw white highlight. - g.setColor(light); - g.drawLine(x + 2, y + 2, x + w - 4, y + 2); - g.drawLine(x + 2, y + 2, x + 2, y + h - 4); - g.drawLine(x + 2, y + h - 1, x + w - 1, y + h - 1); - g.drawLine(x + w - 1, y + 2, x + w - 1, y + h - 1); - // Draw crossing pixels. - g.setColor(middle); - g.fillRect(x + w - 2, y + 2, 1, 1); - g.fillRect(x + 2, y + h - 2, 1, 1); - } - else - { - // The normal border. This is used when the button is not - // pressed or the button is not armed. - if (! (bmodel.isPressed() && bmodel.isArmed())) - { - // draw light border - g.setColor(light); - g.drawRect(x + 1, y + 1, w - 2, h - 2); - - // draw crossing pixels of both borders - g.setColor(middle); - g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1); - } - // The pressed border. This border is painted only when - // the button is both pressed and armed. - else - { - // draw light border - g.setColor(light); - g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1); - g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1); - - // draw shadow border - g.setColor(middle); - g.drawLine(x + 1, y + 1, x + w - 2, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 2); - - // draw crossing pixels of both borders - g.setColor(shadow); - g.drawRect(x + 1, y + h - 2, 0, 0); - g.drawRect(x + w - 2, y + 1, 0, 0); - } - } - } - else - { - // draw disabled border - g.setColor(MetalLookAndFeel.getInactiveControlTextColor()); - g.drawRect(x, y, w - 2, h - 2); - } - } - - /** - * Paints the button border for the OceanTheme. - * - * @param c the button - * @param g the graphics context - * @param x the X coordinate of the upper left corner of the painting rect - * @param y the Y coordinate of the upper left corner of the painting rect - * @param w the width of the painting rect - * @param h the height of the painting rect - */ - private void paintOceanButtonBorder(Component c, Graphics g, int x, - int y, int w, int h) - { - ButtonModel bmodel = null; - - // The RI will fail with a ClassCastException in such a situation. - // This code tries to be more helpful. - if (c instanceof AbstractButton) - bmodel = ((AbstractButton) c).getModel(); - else - throw new IllegalStateException("A ButtonBorder is supposed to work " - + "only with AbstractButton and" - + "subclasses."); - - Color darkShadow = MetalLookAndFeel.getControlDarkShadow(); - Color shadow = MetalLookAndFeel.getControlShadow(); - Color light = MetalLookAndFeel.getControlHighlight(); - Color middle = MetalLookAndFeel.getControl(); - - if (c.isEnabled()) - { - // Paint the pressed border if the button is pressed, or if - // the button is the default button. In the OceanTheme, the default - // button has the same border as a pressed button. - if (bmodel.isPressed() || ((c instanceof JButton) - && ((JButton) c).isDefaultButton())) - { - // Draw fat border. - g.setColor(darkShadow); - g.drawRect(x, y, w - 1, h - 1); - g.drawRect(x + 1, y + 1, w - 3, h - 3); - } - else if (bmodel.isRollover() && !(c.getParent() instanceof JToolBar)) - { - // Paint a bigger border when the mouse is over the button but - // only if it is *not* part of a JToolBar. - g.setColor(shadow); - g.drawRect(x, y, w - 1, h - 1); - g.drawRect(x + 2, y + 2, w - 5, h - 5); - g.setColor(darkShadow); - g.drawRect(x + 1, y + 1, w - 3, h - 3); - } - else - { - g.setColor(darkShadow); - g.drawRect(x, y, w - 1, h - 1); - } - } - else - { - // draw disabled border - g.setColor(MetalLookAndFeel.getInactiveControlTextColor()); - g.drawRect(x, y, w - 2, h - 2); - } - } - - /** - * Returns the insets of the <code>ButtonBorder</code>. - * - * @param c the component for which the border is used (ignored). - * - * @return The insets of the <code>ButtonBorder</code>. - */ - public Insets getBorderInsets(Component c) - { - return borderInsets; - } - - /** - * Returns the insets of the <code>ButtonBorder</code> in the specified - * <code>newInsets</code> object. - * - * @param c the component for which the border is used (ignored). - * @param newInsets the insets object where to put the values ( - * <code>null</code> not permitted). - * - * @return The <code>newInsets</code> reference. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - newInsets.bottom = borderInsets.bottom; - newInsets.left = borderInsets.left; - newInsets.right = borderInsets.right; - newInsets.top = borderInsets.top; - return newInsets; - } - } - - /** - * A border used when painting {@link JInternalFrame} instances. - */ - static class DesktopIconBorder extends AbstractBorder - implements UIResource - { - /** - * Creates a new border instance. - */ - public DesktopIconBorder() - { - // Nothing to do here. - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * @return The border insets. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - if (newInsets == null) - newInsets = new Insets(3, 3, 2, 3); - else - { - newInsets.top = 3; - newInsets.left = 3; - newInsets.bottom = 2; - newInsets.right = 3; - } - return newInsets; - } - - /** - * Paints the border for the specified component. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawRect(x, y, w - 1, h - 1); - } - - } - - /** - * A simple 3D border. - */ - public static class Flush3DBorder extends AbstractBorder - implements UIResource - { - private static final Insets borderInsets = new Insets(2, 2, 2, 2); - - /** - * Creates a new border instance. - */ - public Flush3DBorder() - { - // Nothing to do here. - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return borderInsets; - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * @param newInsets an existing insets instance, that will be populated - * with the border insets and returned as the result - * (<code>null</code> not permitted). - * - * @return The <code>newInsets</code> reference. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - newInsets.top = borderInsets.top; - newInsets.left = borderInsets.left; - newInsets.bottom = borderInsets.bottom; - newInsets.right = borderInsets.right; - return newInsets; - } - - /** - * Paints the border for the specified component. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - Color savedColor = g.getColor(); - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawRect(x, y, w - 2, h - 2); - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawRect(x + 1, y + 1, w - 2, h - 2); - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1); - g.setColor(savedColor); - } - - } - - /** - * A border used for a {@link JInternalFrame} when it is being used as a - * palette. - * - * @since 1.3 - */ - public static class PaletteBorder extends AbstractBorder - implements UIResource - { - private static final Insets borderInsets = new Insets(1, 1, 1, 1); - - /** - * Creates a new <code>PaletteBorder</code>. - */ - public PaletteBorder() - { - // Nothing to do here. - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return borderInsets; - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * @param newInsets an existing insets instance, that will be populated - * with the border insets and returned as the result - * (<code>null</code> not permitted). - * - * @return The <code>newInsets</code> reference. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - newInsets.top = borderInsets.top; - newInsets.left = borderInsets.left; - newInsets.bottom = borderInsets.bottom; - newInsets.right = borderInsets.right; - return newInsets; - } - - /** - * Paints the border for the specified component. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - Color savedColor = g.getColor(); - - // draw the outline - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - g.drawRect(x, y, w - 1, h - 1); - - // put a dot in each corner - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(x, y, 1, 1); - g.fillRect(x + w - 1, y, 1, 1); - g.fillRect(x + w - 1, y + h - 1, 1, 1); - g.fillRect(x, y + h - 1, 1, 1); - g.setColor(savedColor); - } - - } - - /** - * A border used for the {@link JTextField} component. - */ - public static class TextFieldBorder extends Flush3DBorder - implements UIResource - { - /** - * Creates a new border instance. - */ - public TextFieldBorder() - { - // Nothing to do here. - } - - /** - * Paints the border for the specified component. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - boolean enabledTextBorder; - if (c instanceof JTextComponent) - { - JTextComponent tc = (JTextComponent) c; - enabledTextBorder = tc.isEnabled() && tc.isEditable(); - } - else - enabledTextBorder = false; - - if (enabledTextBorder) - super.paintBorder(c, g, x, y, w, h); - else - { - Color savedColor = g.getColor(); - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawRect(x, y, w - 1, h - 1); - g.setColor(savedColor); - } - } - - } - - /** - * A border used for the {@link JInternalFrame} component. - */ - public static class InternalFrameBorder extends AbstractBorder - implements UIResource - { - private static final Insets borderInsets = new Insets(5, 5, 5, 5); - - /** - * Creates a new border instance. - */ - public InternalFrameBorder() - { - // Nothing to do here. - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return borderInsets; - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * @param newInsets an existing insets instance, that will be populated - * with the border insets and returned as the result - * (<code>null</code> not permitted). - * - * @return The <code>newInsets</code> reference. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - newInsets.top = borderInsets.top; - newInsets.left = borderInsets.left; - newInsets.bottom = borderInsets.bottom; - newInsets.right = borderInsets.right; - return newInsets; - } - - /** - * Paints the border for the specified component. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - - JInternalFrame f = (JInternalFrame) c; - if (f.isSelected()) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - - // fill the border background - g.fillRect(x, y, w, 5); - g.fillRect(x, y, 5, h); - g.fillRect(x + w - 5, y, 5, h); - g.fillRect(x, y + h - 5, w, 5); - - // draw a dot in each corner - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(x, y, 1, 1); - g.fillRect(x + w - 1, y, 1, 1); - g.fillRect(x + w - 1, y + h - 1, 1, 1); - g.fillRect(x, y + h - 1, 1, 1); - - // draw the lines - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 14, y + 2, x + w - 15, y + 2); - g.drawLine(x + 14, y + h - 3, x + w - 15, y + h - 3); - g.drawLine(x + 2, y + 14, x + 2, y + h - 15); - g.drawLine(x + w - 3, y + 14, x + w - 3, y + h - 15); - - // draw the line highlights - if (f.isSelected()) - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x + 15, y + 3, x + w - 14, y + 3); - g.drawLine(x + 15, y + h - 2, x + w - 14, y + h - 2); - g.drawLine(x + 3, y + 15, x + 3, y + h - 14); - g.drawLine(x + w - 2, y + 15, x + w - 2, y + h - 14); - } - - } - - /** - * A border used for {@link JInternalFrame} components that are - * presented as dialogs (by the {@link JOptionPane} class). - */ - public static class OptionDialogBorder extends AbstractBorder - implements UIResource - { - - /** - * Creates a new border instance. - */ - public OptionDialogBorder() - { - // Nothing to do here. - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * @return The border insets. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - if (newInsets == null) - newInsets = new Insets(3, 3, 3, 3); - else - { - newInsets.top = 3; - newInsets.left = 3; - newInsets.bottom = 3; - newInsets.right = 3; - } - return newInsets; - } - - /** - * Paints the border for the specified component. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - - JInternalFrame f = (JInternalFrame) c; - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - if (f.getContentPane() instanceof JOptionPane) - { - JOptionPane pane = (JOptionPane) f.getContentPane(); - int type = pane.getMessageType(); - if (type == JOptionPane.QUESTION_MESSAGE) - { - Color bc = UIManager.getColor( - "OptionPane.questionDialog.border.background"); - if (bc != null) - g.setColor(bc); - } - if (type == JOptionPane.WARNING_MESSAGE) - { - Color bc = UIManager.getColor( - "OptionPane.warningDialog.border.background"); - if (bc != null) - g.setColor(bc); - } - else if (type == JOptionPane.ERROR_MESSAGE) - { - Color bc = UIManager.getColor( - "OptionPane.errorDialog.border.background"); - if (bc != null) - g.setColor(bc); - } - } - - // fill the border background - g.fillRect(x, y, w, 3); - g.fillRect(x, y, 3, h); - g.fillRect(x + w - 3, y, 3, h); - g.fillRect(x, y + h - 3, w, 3); - - // draw a dot in each corner - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(x, y, 1, 1); - g.fillRect(x + w - 1, y, 1, 1); - g.fillRect(x + w - 1, y + h - 1, 1, 1); - g.fillRect(x, y + h - 1, 1, 1); - - } - - } - - /** - * A border used for {@link JMenu} and {@link JMenuItem} components. - */ - public static class MenuItemBorder extends AbstractBorder - implements UIResource - { - /** The border insets. */ - protected static Insets borderInsets = new Insets(2, 2, 2, 2); - - /** - * Creates a new border instance. - */ - public MenuItemBorder() - { - // Nothing to do here. - } - - /** - * Paints the border for the component. A border is painted only if the - * component is a selected {@link JMenu} or an armed {@link JMenuItem}. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate of the border area. - * @param y the y-coordinate of the border area. - * @param w the width of the border area. - * @param h the height of the border area. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - Color dark = MetalLookAndFeel.getPrimaryControlDarkShadow(); - Color light = MetalLookAndFeel.getPrimaryControlHighlight(); - if (c instanceof JMenu) - { - JMenu menu = (JMenu) c; - if (menu.isSelected()) - { - g.setColor(dark); - g.drawLine(x, y, x, y + h); - g.drawLine(x, y, x + w, y); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + h); - g.setColor(light); - g.drawLine(x + w - 1, y + 1, x + w - 1, y + h); - } - } - else if (c instanceof JMenuItem) - { - JMenuItem item = (JMenuItem) c; - if (item.isArmed()) - { - g.setColor(dark); - g.drawLine(x, y, x + w, y); - g.setColor(light); - g.drawLine(x, y + h - 1, x + w, y + h - 1); - } - else - { - // Normally we draw a light line on the left. - g.setColor(light); - g.drawLine(x, y, x, y + h); - } - } - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return borderInsets; - } - - /** - * Populates <code>insets</code> with the border insets, then returns it. - * - * @param c the component (ignored). - * @param insets the object to populate with the border insets. - * - * @return The border insets. - * - * @throws NullPointerException if <code>insets</code> is <code>null</code>. - */ - public Insets getBorderInsets(Component c, Insets insets) - { - insets.left = borderInsets.left; - insets.top = borderInsets.top; - insets.bottom = borderInsets.bottom; - insets.right = borderInsets.right; - return insets; - } - } - - /** - * A border used for {@link JMenuBar} components. - */ - public static class MenuBarBorder - extends AbstractBorder - implements UIResource - { - /** The border insets. */ - protected static Insets borderInsets = new Insets(1, 0, 1, 0); - - /** - * Creates a new border instance. - */ - public MenuBarBorder() - { - } - - /** - * Paints the border for the component. A border is painted only if the - * component is a selected {@link JMenu} or an armed {@link JMenuItem}. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate of the border area. - * @param y the y-coordinate of the border area. - * @param w the width of the border area. - * @param h the height of the border area. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - // Although it is not correct to decide on the static property - // currentTheme which color to use the RI does it like that. - // The trouble is that by simply changing the current theme to - // e.g. DefaultMetalLookAndFeel this method will use another color - // although a change in painting behavior should be expected only - // after setting a new look and feel and updating all components. - if(MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme) - g.setColor(UIManager.getColor("MenuBar.borderColor")); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - - g.drawLine(x, y + h - 1, x + w, y + h - 1); - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return borderInsets; - } - - /** - * Populates <code>insets</code> with the border insets, then returns it. - * - * @param c the component (ignored). - * @param insets the object to populate with the border insets. - * - * @return The border insets. - * - * @throws NullPointerException if <code>insets</code> is <code>null</code>. - */ - public Insets getBorderInsets(Component c, Insets insets) - { - insets.left = borderInsets.left; - insets.top = borderInsets.top; - insets.bottom = borderInsets.bottom; - insets.right = borderInsets.right; - return insets; - } - } - - /** - * A border for {@link JScrollPane} components. - */ - public static class ScrollPaneBorder - extends AbstractBorder - implements UIResource - { - /** The border insets. */ - private static Insets insets = new Insets(1, 1, 2, 2); - - /** - * Constructs a new ScrollPaneBorder. - */ - public ScrollPaneBorder() - { - // Nothing to do here. - } - - /** - * Returns the insets of the border for the Component <code>c</code>. - * - * @param c the Component for which we return the border insets - */ - public Insets getBorderInsets(Component c) - { - return insets; - } - - /** - * Paints the border. - * - * @param c the Component for which the border is painted - * @param g the Graphics context - * @param x the X coordinate of the upper left corner of the border - * @param y the Y coordinate of the upper left corner of the border - * @param w the width of the border - * @param h the height of the border - */ - public void paintBorder(Component c, Graphics g, int x, int y, - int w, int h) - { - Color darkShadow = MetalLookAndFeel.getControlDarkShadow(); - Color shadow = MetalLookAndFeel.getControlShadow(); - Color light = MetalLookAndFeel.getWhite(); - Color middle = MetalLookAndFeel.getControl(); - - // paint top border line - g.setColor(darkShadow); - g.drawLine(x, y, x + w - 2, y); - - // paint left border line - g.drawLine(x, y, x, y + h - 2); - - // paint right inner border line - g.drawLine(x + w - 2, y, x + w - 2, y + h + 1); - - // paint bottom inner border line - g.drawLine(x + 2, y + h - 2, x + w - 2, y + h - 2); - - // draw right outer border line - g.setColor(light); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - - // draw bottom outer border line - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - - // paint the lighter points - g.setColor(middle); - g.drawLine(x + w - 1, y, x + w - 1, y); - g.drawLine(x + w - 2, y + 2, x + w - 2, y + 2); - g.drawLine(x, y + h - 1, x, y + h - 1); - g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2); - - } - - } - - /** - * A button border that is only visible when the mouse pointer is within - * the button's bounds. - */ - public static class RolloverButtonBorder - extends MetalBorders.ButtonBorder - { - /** - * Creates a new border instance. - */ - public RolloverButtonBorder() - { - // Nothing to do here. - } - - /** - * Paints the border. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - // TODO: What should be done here? Obviously the ButtonBorder already - // handles the rollover state in Sun's impl. Maybe this is only there - // for backwards compatibility. - super.paintBorder(c, g, x, y, w, h); - } - } - - /** - * This border is used in Toolbar buttons as inner border. - */ - static class RolloverMarginBorder extends AbstractBorder - { - /** The borders insets. */ - protected static Insets borderInsets = new Insets(3, 3, 3, 3); - - /** - * Creates a new instance of RolloverBorder. - */ - public RolloverMarginBorder() - { - // Nothing to do here. - } - - /** - * Returns the insets of the RolloverBorder. - * - * @param c the component for which the border is used - * - * @return the insets of the RolloverBorder - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - /** - * Returns the insets of the RolloverMarginBorder in the specified - * Insets object. - * - * @param c the component for which the border is used - * @param newInsets the insets object where to put the values - * - * @return the insets of the RolloverMarginBorder - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - if (newInsets == null) - newInsets = new Insets(0, 0, 0, 0); - - AbstractButton b = (AbstractButton) c; - Insets margin = b.getMargin(); - newInsets.bottom = borderInsets.bottom; - newInsets.left = borderInsets.left; - newInsets.right = borderInsets.right; - newInsets.top = borderInsets.top; - return newInsets; - } - } - - /** - * A border implementation for popup menus. - */ - public static class PopupMenuBorder - extends AbstractBorder - implements UIResource - { - - /** The border's insets. */ - protected static Insets borderInsets = new Insets(3, 1, 2, 1); - - /** - * Constructs a new PopupMenuBorder. - */ - public PopupMenuBorder() - { - // Nothing to do here. - } - - /** - * Returns the insets of the border, creating a new Insets instance - * with each call. - * - * @param c the component for which we return the border insets - * (not used here) - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - /** - * Returns the insets of the border, using the supplied Insets instance. - * - * @param c the component for which we return the border insets - * (not used here) - * @param i the Insets instance to fill with the Insets values - */ - public Insets getBorderInsets(Component c, Insets i) - { - Insets insets; - if (i == null) - insets = new Insets(borderInsets.top, borderInsets.left, - borderInsets.bottom, borderInsets.right); - else - { - insets = i; - insets.top = borderInsets.top; - insets.left = borderInsets.left; - insets.bottom = borderInsets.bottom; - insets.right = borderInsets.right; - } - - return insets; - } - - /** - * Paints the border for component <code>c</code> using the - * Graphics context <code>g</code> with the dimension - * <code>x, y, w, h</code>. - * - * @param c the component for which we paint the border - * @param g the Graphics context to use - * @param x the X coordinate of the upper left corner of c - * @param y the Y coordinate of the upper left corner of c - * @param w the width of c - * @param h the height of c - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - Color darkShadow = MetalLookAndFeel.getPrimaryControlDarkShadow(); - Color light = MetalLookAndFeel.getPrimaryControlHighlight(); - - // draw dark outer border - g.setColor(darkShadow); - g.drawRect(x, y, w - 1, h - 1); - - // draw highlighted inner border (only top and left) - g.setColor(light); - g.drawLine(x + 1, y + 1, x + w - 2, y + 1); - } - - } - - /** - * A border used for the {@link JToggleButton} component. - * - * @since 1.3 - */ - public static class ToggleButtonBorder - extends ButtonBorder - { - /** - * Creates a new border instance. - */ - public ToggleButtonBorder() - { - // Nothing to do here. - } - - /** - * Paints the toggle button border. - * - * @param c the component for which we paint the border - * @param g the Graphics context to use - * @param x the X coordinate of the upper left corner of c - * @param y the Y coordinate of the upper left corner of c - * @param w the width of c - * @param h the height of c - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - ButtonModel bmodel = null; - - if (c instanceof AbstractButton) - bmodel = ((AbstractButton) c).getModel(); - - Color darkShadow = MetalLookAndFeel.getControlDarkShadow(); - Color shadow = MetalLookAndFeel.getControlShadow(); - Color light = MetalLookAndFeel.getWhite(); - Color middle = MetalLookAndFeel.getControl(); - - if (c.isEnabled()) - { - // draw dark border - g.setColor(darkShadow); - g.drawRect(x, y, w - 2, h - 2); - - if (!bmodel.isArmed()) - { - // draw light border - g.setColor(light); - g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1); - g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1); - if (bmodel.isSelected()) - g.setColor(middle); - g.drawLine(x + 1, y + 1, x + w - 3, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 3); - - // draw crossing pixels of both borders - g.setColor(shadow); - g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1); - } - else - { - // draw light border - g.setColor(light); - g.drawLine(x + w - 1, y + 1, x + w - 1, y + h - 1); - g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1); - - // draw shadow border - g.setColor(shadow); - g.drawLine(x + 1, y + 1, x + w - 2, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 2); - - // draw crossing pixels of both borders - g.setColor(shadow); - g.drawLine(x + 1, y + h - 2, x + 1, y + h - 2); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1); - - } - // draw corners - g.setColor(middle); - g.drawLine(x, y + h - 1, x, y + h - 1); - g.drawLine(x + w - 1, y, x + w - 1, y); - } - else - { - // draw disabled border - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawRect(x, y, w - 2, h - 2); - } - } - } - - /** - * A border used for the {@link JToolBar} component. - */ - public static class ToolBarBorder extends AbstractBorder - implements UIResource, SwingConstants - { - /** - * Creates a new border instance. - */ - public ToolBarBorder() - { - // Nothing to do here. - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * - * @return The border insets. - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - /** - * Returns the border insets. - * - * @param c the component (ignored). - * @return The border insets. - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - JToolBar tb = (JToolBar) c; - if (tb.getOrientation() == JToolBar.HORIZONTAL) - { - if (newInsets == null) - newInsets = new Insets(2, 16, 2, 2); - else - { - newInsets.top = 2; - newInsets.left = 16; - newInsets.bottom = 2; - newInsets.right = 2; - } - return newInsets; - } - else // assume JToolBar.VERTICAL - { - if (newInsets == null) - newInsets = new Insets(16, 2, 2, 2); - else - { - newInsets.top = 16; - newInsets.left = 2; - newInsets.bottom = 2; - newInsets.right = 2; - } - return newInsets; - } - - } - - /** - * Paints the border for the specified component. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - - JToolBar tb = (JToolBar) c; - if (tb.getOrientation() == JToolBar.HORIZONTAL) - { - MetalUtils.fillMetalPattern(tb, g, x + 2, y + 2, x + 11, y + h - 5, - MetalLookAndFeel.getControlHighlight(), - MetalLookAndFeel.getControlDarkShadow()); - } - else - { - MetalUtils.fillMetalPattern(tb, g, x + 2, y + 2, x + w - 5, y + 11, - MetalLookAndFeel.getControlHighlight(), - MetalLookAndFeel.getControlDarkShadow()); - } - } - - } - - /** - * A border for table header cells. - * - * @since 1.3 - */ - public static class TableHeaderBorder extends AbstractBorder - { - /** - * The insets of this border. - */ - // TODO: According to tests that I have done, this is really the border - // that should be returned by getBorderInsets(). However, the name - // is very distracting. Is there any deeper meaning in it? - protected Insets editorBorderInsets; - - /** - * Creates a new instance of <code>TableHeaderBorder</code>. - */ - public TableHeaderBorder() - { - editorBorderInsets = new Insets(1, 1, 1, 1); - } - - /** - * Return the insets of this border. - * - * @return the insets of this border - */ - public Insets getBorderInsets(Component c) - { - return editorBorderInsets; - } - - /** - * Paints the border. - * - * @param c the component for which to paint the border - * @param g the graphics context to use - * @param x the x cooridinate of the border rectangle - * @param y the y cooridinate of the border rectangle - * @param w the width of the border rectangle - * @param h the height of the border rectangle - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) - { - Color dark = MetalLookAndFeel.getControlDarkShadow(); - Color light = MetalLookAndFeel.getWhite(); - Color old = g.getColor(); - g.setColor(light); - g.drawLine(x, y, x + w - 2, y); - g.drawLine(x, y, x, y + h - 2); - g.setColor(dark); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - g.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1); - g.setColor(old); - } - } - - /** - * Returns a border for Swing buttons in the Metal Look & Feel. - * - * @return a border for Swing buttons in the Metal Look & Feel - */ - public static Border getButtonBorder() - { - if (buttonBorder == null) - { - Border outer = new ButtonBorder(); - Border inner = getMarginBorder(); - buttonBorder = new BorderUIResource.CompoundBorderUIResource(outer, - inner); - } - return buttonBorder; - } - - /** - * Returns a border for use with {@link JToggleButton} components. - * - * @return A border. - * - * @since 1.3 - */ - public static Border getToggleButtonBorder() - { - if (toggleButtonBorder == null) - { - Border outer = new ToggleButtonBorder(); - Border inner = getMarginBorder(); - toggleButtonBorder = new BorderUIResource.CompoundBorderUIResource( - outer, inner); - } - return toggleButtonBorder; - } - - /** - * Returns a border instance that is used with a {@link JInternalFrame} when - * it is in the iconified state. - * - * @return A border. - * - * @since 1.3 - */ - public static Border getDesktopIconBorder() - { - if (desktopIconBorder == null) - desktopIconBorder = new DesktopIconBorder(); - return desktopIconBorder; - } - - /** - * Returns a border for use by the {@link JTextField} component. - * - * @return A border. - * - * @since 1.3 - */ - public static Border getTextFieldBorder() - { - if (textFieldBorder == null) - { - Border inner = getMarginBorder(); - Border outer = new TextFieldBorder(); - textFieldBorder = - new BorderUIResource.CompoundBorderUIResource(outer, inner); - } - return textFieldBorder; - } - - /** - * Returns the border that is used for text components (except text fields, - * which use {@link #getTextFieldBorder}. - * - * @return the border that is used for text components - * - * @since 1.3 - */ - public static Border getTextBorder() - { - if (textBorder == null) - { - Border inner = getMarginBorder(); - Border outer = new Flush3DBorder(); - textBorder = - new BorderUIResource.CompoundBorderUIResource(outer, inner); - } - return textBorder; - } - - /** - * Returns a border for Toolbar buttons in the Metal Look & Feel. - * - * @return a border for Toolbar buttons in the Metal Look & Feel - */ - static Border getToolbarButtonBorder() - { - if (toolbarButtonBorder == null) - { - Border outer = new ButtonBorder(); - Border inner = new RolloverMarginBorder(); - toolbarButtonBorder = new CompoundBorder(outer, inner); - } - return toolbarButtonBorder; - } - - /** - * Returns a shared instance of {@link BasicBorders.MarginBorder}. - * - * @return a shared instance of {@link BasicBorders.MarginBorder} - */ - static Border getMarginBorder() - { - if (marginBorder == null) - marginBorder = new BasicBorders.MarginBorder(); - return marginBorder; - } - - /** - * Returns a shared instance of a compound border for rollover buttons. - * - * @return A shared border instance. - */ - static Border getRolloverBorder() - { - if (rolloverBorder == null) - { - Border outer = new MetalBorders.RolloverButtonBorder(); - Border inner = MetalBorders.getMarginBorder(); - rolloverBorder = new BorderUIResource.CompoundBorderUIResource(outer, - inner); - } - return rolloverBorder; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java b/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java deleted file mode 100644 index 7cf84e5..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalButtonListener.java +++ /dev/null @@ -1,74 +0,0 @@ -/* MetalButtonListener.java - Copyright (C) 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.plaf.metal; - -import java.beans.PropertyChangeEvent; - -import javax.swing.AbstractButton; -import javax.swing.plaf.basic.BasicButtonListener; - -/** - * A listener for buttons under the {@link MetalLookAndFeel}. - * - * @see MetalButtonUI#createButtonListener - */ -class MetalButtonListener extends BasicButtonListener -{ - - /** - * Creates a new instance. - * - * @param button the button. - */ - public MetalButtonListener(AbstractButton button) - { - super(button); - } - - /** - * Handles property change events. - * - * @param e the event. - */ - public void propertyChange(PropertyChangeEvent e) - { - super.propertyChange(e); - // TODO: What should be done here? - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java deleted file mode 100644 index 974f0a8..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalButtonUI.java +++ /dev/null @@ -1,298 +0,0 @@ -/* MetalButtonUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.AbstractButton; -import javax.swing.ButtonModel; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JToolBar; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicButtonUI; - -/** - * A UI delegate for the {@link JButton} component. - * - * @author Roman Kennke (roman@kennke.org) - */ -public class MetalButtonUI - extends BasicButtonUI -{ - - /** - * The shared button UI. - */ - private static MetalButtonUI sharedUI; - - /** - * The color used to draw the focus rectangle around the text and/or icon. - */ - protected Color focusColor; - - /** - * The background color for the button when it is pressed. - */ - protected Color selectColor; - - /** - * The color for disabled button labels. - */ - protected Color disabledTextColor; - - /** - * Returns a UI delegate for the specified component. - * - * @param c the component (should be a subclass of {@link AbstractButton}). - * - * @return A new instance of <code>MetalButtonUI</code>. - */ - public static ComponentUI createUI(JComponent c) - { - if (sharedUI == null) - sharedUI = new MetalButtonUI(); - return sharedUI; - } - - /** - * Creates a new instance. - */ - public MetalButtonUI() - { - super(); - } - - /** - * Returns the color for the focus border. - * - * @return the color for the focus border - */ - protected Color getFocusColor() - { - focusColor = UIManager.getColor(getPropertyPrefix() + "focus"); - return focusColor; - } - - /** - * Returns the color that indicates a selected button. - * - * @return the color that indicates a selected button - */ - protected Color getSelectColor() - { - selectColor = UIManager.getColor(getPropertyPrefix() + "select"); - return selectColor; - } - - /** - * Returns the color for the text label of disabled buttons. - * - * @return the color for the text label of disabled buttons - */ - protected Color getDisabledTextColor() - { - disabledTextColor = UIManager.getColor(getPropertyPrefix() - + "disabledText"); - return disabledTextColor; - } - - /** - * Installs the default settings for the specified button. - * - * @param button the button. - * - * @see #uninstallDefaults(AbstractButton) - */ - public void installDefaults(AbstractButton button) - { - // This is overridden to be public, for whatever reason. - super.installDefaults(button); - } - - /** - * Removes the defaults added by {@link #installDefaults(AbstractButton)}. - */ - public void uninstallDefaults(AbstractButton button) - { - // This is overridden to be public, for whatever reason. - super.uninstallDefaults(button); - } - - /** - * Paints the background of the button to indicate that it is in the - * "pressed" state. - * - * @param g the graphics context. - * @param b the button. - */ - protected void paintButtonPressed(Graphics g, AbstractButton b) - { - if (b.isContentAreaFilled()) - { - g.setColor(getSelectColor()); - g.fillRect(0, 0, b.getWidth(), b.getHeight()); - } - } - - /** - * Paints the focus rectangle around the button text and/or icon. - * - * @param g the graphics context. - * @param b the button. - * @param viewRect the button bounds. - * @param textRect the text bounds. - * @param iconRect the icon bounds. - */ - protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, - Rectangle textRect, Rectangle iconRect) - { - if (b.isEnabled() && b.hasFocus() && b.isFocusPainted()) - { - Color savedColor = g.getColor(); - g.setColor(getFocusColor()); - Rectangle focusRect = iconRect.union(textRect); - g.drawRect(focusRect.x - 1, focusRect.y, - focusRect.width + 1, focusRect.height); - g.setColor(savedColor); - } - } - - /** - * Paints the button text. - * - * @param g the graphics context. - * @param c the button. - * @param textRect the text bounds. - * @param text the text to display. - */ - protected void paintText(Graphics g, JComponent c, Rectangle textRect, - String text) - { - AbstractButton b = (AbstractButton) c; - Font f = b.getFont(); - g.setFont(f); - FontMetrics fm = g.getFontMetrics(f); - - if (b.isEnabled()) - { - g.setColor(b.getForeground()); - g.drawString(text, textRect.x, textRect.y + fm.getAscent()); - } - else - { - g.setColor(getDisabledTextColor()); - g.drawString(text, textRect.x, textRect.y + fm.getAscent()); - } - } - - /** - * If the property <code>Button.gradient</code> is set, then a gradient is - * painted as background, otherwise the normal superclass behaviour is - * called. - */ - public void update(Graphics g, JComponent c) - { - AbstractButton b = (AbstractButton) c; - if ((b.getBackground() instanceof UIResource) - && b.isContentAreaFilled() && b.isEnabled()) - { - ButtonModel m = b.getModel(); - String uiKey = "Button.gradient"; - if (! isToolbarButton(b)) - { - if (! m.isArmed() && ! m.isPressed() && isDrawingGradient(uiKey)) - { - MetalUtils.paintGradient(g, 0, 0, b.getWidth(), b.getHeight(), - SwingConstants.VERTICAL, - uiKey); - paint(g, c); - return; - } - } - else if (m.isRollover() && isDrawingGradient(uiKey)) - { - MetalUtils.paintGradient(g, 0, 0, b.getWidth(), b.getHeight(), - SwingConstants.VERTICAL, - uiKey); - paint(g, c); - return; - } - } - // Fallback if we didn't have any of the two above cases. - super.update(g, c); - } - - /** - * Returns <code>true</code> when the button is a toolbar button, - * <code>false</code> otherwise. - * - * @param b the button component to test - * - * @return <code>true</code> when the button is a toolbar button, - * <code>false</code> otherwise - */ - private boolean isToolbarButton(Component b) - { - Component parent = b.getParent(); - return parent instanceof JToolBar; - } - - /** - * Returns <code>true</code> if we should draw the button gradient, - * <code>false</code> otherwise. - * - * @param uiKey the UIManager key for the gradient - * - * @return <code>true</code> if we should draw the button gradient, - * <code>false</code> otherwise - */ - private boolean isDrawingGradient(String uiKey) - { - return (UIManager.get(uiKey) != null); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalCheckBoxIcon.java b/libjava/classpath/javax/swing/plaf/metal/MetalCheckBoxIcon.java deleted file mode 100644 index 5e0ac06..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalCheckBoxIcon.java +++ /dev/null @@ -1,142 +0,0 @@ -/* MetalCheckBoxIcon.java -- An icon for JCheckBoxes in the Metal L&F - Copyright (C) 2005, 2006 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.plaf.metal; - -import java.awt.Component; -import java.awt.Graphics; -import java.io.Serializable; - -import javax.swing.AbstractButton; -import javax.swing.Icon; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.plaf.UIResource; - -/** - * An {@link Icon} used by the {@link MetalCheckBoxUI} class. - * - * @author Roman Kennke (roman@kennke.org) - */ -public class MetalCheckBoxIcon - implements Icon, UIResource, Serializable -{ - - /** Used to paint the border of the icon. */ - MetalBorders.ButtonBorder border; - - /** - * Creates a new MetalCheckBoxIcon instance. - */ - public MetalCheckBoxIcon() - { - border = new MetalBorders.ButtonBorder(); - } - - /** - * Draws the check in the CheckBox. - * - * @param c the component to draw on - * @param g the Graphics context to draw with - * @param x the X position - * @param y the Y position - */ - protected void drawCheck(Component c, Graphics g, int x, int y) - { - if (c.isEnabled()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(3 + x, 5 + y, 3 + x, 9 + y); - g.drawLine(4 + x, 5 + y, 4 + x, 9 + y); - g.drawLine(5 + x, 7 + y, 9 + x, 3 + y); - g.drawLine(5 + x, 8 + y, 9 + x, 4 + y); - } - - /** - * Returns the size (both X and Y) of the checkbox icon. - * - * @return the size of the checkbox icon - */ - protected int getControlSize() - { - return 13; - } - - /** - * Returns the width of the icon in pixels. - * - * @return the width of the icon in pixels - */ - public int getIconWidth() - { - return getControlSize(); - } - - /** - * Returns the height of the icon in pixels. - * - * @return the height of the icon in pixels - */ - public int getIconHeight() - { - return getControlSize(); - } - - /** - * Paints the icon. This first paints the border of the CheckBox and - * if the CheckBox is selected it calls {@link #drawCheck} to draw - * the check. - * - * @param c the Component to draw on (gets casted to JCheckBox) - * @param g the Graphics context to draw with - * @param x the X position - * @param y the Y position - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - if (UIManager.get("CheckBox.gradient") != null) - MetalUtils.paintGradient(g, x, y, getIconWidth(), getIconHeight(), - SwingConstants.VERTICAL, "CheckBox.gradient"); - border.paintBorder(c, g, x, y, getIconWidth(), getIconHeight()); - - AbstractButton b = (AbstractButton) c; - if (b.isSelected()) - drawCheck(b, g, x, y); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalCheckBoxUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalCheckBoxUI.java deleted file mode 100644 index 11979e1..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalCheckBoxUI.java +++ /dev/null @@ -1,88 +0,0 @@ -/* MetalCheckBoxUI.java - Copyright (C) 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.plaf.metal; - -import javax.swing.JCheckBox; -import javax.swing.JComponent; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate for the {@link JCheckBox} component. - */ -public class MetalCheckBoxUI - extends MetalRadioButtonUI -{ - - // FIXME: maybe replace by a Map of instances when this becomes stateful - /** The shared UI instance for JCheckBoxes. */ - private static MetalCheckBoxUI instance; - - /** - * Constructs a new instance of MetalCheckBoxUI. - */ - public MetalCheckBoxUI() - { - super(); - } - - /** - * Returns a shared instance of <code>MetalCheckBoxUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A shared instance of <code>MetalCheckBoxUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - if (instance == null) - instance = new MetalCheckBoxUI(); - return instance; - } - - /** - * Returns the prefix for properties defined in the {@link UIDefaults} table. - * - * @return The property prefix (<code>"CheckBox."</code>). - */ - public String getPropertyPrefix() - { - return "CheckBox."; - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java deleted file mode 100644 index 8ec8bad..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxButton.java +++ /dev/null @@ -1,294 +0,0 @@ -/* MetalComboBoxButton.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.Insets; - -import javax.swing.CellRendererPane; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JList; -import javax.swing.ListCellRenderer; -import javax.swing.UIManager; - -/** - * A button used by the {@link MetalComboBoxUI} class. - */ -public class MetalComboBoxButton - extends JButton -{ - - /** A reference to the JComboBox that the button belongs to. */ - protected JComboBox comboBox; - - /** A reference to the JList. */ - protected JList listBox; - - /** - * Used for rendering the selected item. - */ - protected CellRendererPane rendererPane; - - /** The button icon. */ - protected Icon comboIcon; - - /** Display just the icon, or the icon plus the label. */ - protected boolean iconOnly; - - /** - * Creates a new button. - * - * @param cb the combo that the button is used for (<code>null</code> not - * permitted). - * @param i the icon displayed on the button. - * @param pane the rendering pane. - * @param list the list. - */ - public MetalComboBoxButton(JComboBox cb, Icon i, CellRendererPane pane, - JList list) - { - this(cb, i, cb.isEditable(), pane, list); - } - - /** - * Creates a new button. - * - * @param cb the combo that the button is used for (<code>null</code> not - * permitted). - * @param i the icon displayed on the button. - * @param onlyIcon a flag that specifies whether the button displays only an - * icon, or text as well. - * @param pane the rendering pane. - * @param list the list. - */ - public MetalComboBoxButton(JComboBox cb, Icon i, boolean onlyIcon, - CellRendererPane pane, JList list) - { - super(); - if (cb == null) - throw new NullPointerException("Null 'cb' argument"); - comboBox = cb; - comboIcon = i; - iconOnly = onlyIcon; - listBox = list; - rendererPane = pane; - setRolloverEnabled(false); - setEnabled(comboBox.isEnabled()); - setFocusable(comboBox.isEnabled()); - } - - /** - * Returns the combo box that the button is used with. - * - * @return The combo box. - */ - public final JComboBox getComboBox() - { - return comboBox; - } - - /** - * Sets the combo box that the button is used with. - * - * @param cb the combo box. - */ - public final void setComboBox(JComboBox cb) - { - comboBox = cb; - } - - /** - * Returns the icon displayed by the button. By default, this will be an - * instance of {@link MetalComboBoxIcon}. - * - * @return The icon displayed by the button. - */ - public final Icon getComboIcon() - { - return comboIcon; - } - - /** - * Sets the icon displayed by the button. - * - * @param i the icon. - */ - public final void setComboIcon(Icon i) - { - comboIcon = i; - } - - /** - * Returns a flag that controls whether the button displays an icon only, - * or text as well. - * - * @return A boolean. - */ - public final boolean isIconOnly() - { - return iconOnly; - } - - /** - * Sets the flag that controls whether the button displays an icon only, - * or text as well. - * - * @param isIconOnly the flag. - */ - public final void setIconOnly(boolean isIconOnly) - { - iconOnly = isIconOnly; - } - - /** - * Returns <code>false</code>, to indicate that this component is not part - * of the focus traversal group. - * - * @return <code>false</code> - */ - public boolean isFocusTraversable() - { - return false; - } - - /** - * Enables or disables the button. - * - * @param enabled the new status. - */ - public void setEnabled(boolean enabled) - { - super.setEnabled(enabled); - if (enabled) - { - setBackground(comboBox.getBackground()); - setForeground(comboBox.getForeground()); - } - else - { - setBackground(UIManager.getColor("ComboBox.disabledBackground")); - setForeground(UIManager.getColor("ComboBox.disabledForeground")); - } - } - - /** - * Paints the component. - * - * @param g the graphics device. - */ - public void paintComponent(Graphics g) - { - super.paintComponent(g); - Insets insets = this.getInsets(); - int w = getWidth() - (insets.left + insets.right); - int h = getHeight() - (insets.top + insets.bottom); - if (h > 0 && w > 0) - { - int x1 = insets.left; - int y1 = insets.top; - int x2 = x1 + (w - 1); - int y2 = y1 + (h - 1); - int iconWidth = 0; - int iconX = x2; - if (comboIcon != null) - { - iconWidth = comboIcon.getIconWidth(); - int iconHeight = comboIcon.getIconHeight(); - int iconY; - if (iconOnly) - { - iconX = getWidth() / 2 - iconWidth / 2; - iconY = getHeight() / 2 - iconHeight / 2; - } - else - { - iconX = x1 + (w - 1) - iconWidth; - iconY = y1 + (y2 - y1) / 2 - iconHeight / 2; - } - comboIcon.paintIcon(this, g, iconX, iconY); - if (this.hasFocus()) - { - g.setColor(MetalLookAndFeel.getFocusColor()); - g.drawRect(x1 - 1, y1 - 1, w + 3, h + 1); - } - } - if (! iconOnly && comboBox != null) - { - ListCellRenderer renderer = comboBox.getRenderer(); - boolean pressed = this.getModel().isPressed(); - Component comp = renderer.getListCellRendererComponent(listBox, - comboBox.getSelectedItem(), -1, false, false); - comp.setFont(rendererPane.getFont()); - - if ((model.isArmed() && model.isPressed()) - || (comboBox.isFocusOwner() && !comboBox.isPopupVisible())) - { - if (isOpaque()) - { - comp.setBackground(UIManager.getColor("Button.select")); - comp.setForeground(comboBox.getForeground()); - } - } - else if (! comboBox.isEnabled()) - { - if (this.isOpaque()) - { - Color dbg = - UIManager.getColor("ComboBox.disabledBackground"); - comp.setBackground(dbg); - Color dfg = - UIManager.getColor("ComboBox.disabledForeground"); - comp.setForeground(dfg); - } - } - else - { - comp.setForeground(comboBox.getForeground()); - comp.setBackground(comboBox.getBackground()); - } - int wr = w - (insets.right + iconWidth); - rendererPane.paintComponent(g, comp, this, x1, y1, wr, h); - } - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java deleted file mode 100644 index 8872d74..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxEditor.java +++ /dev/null @@ -1,190 +0,0 @@ -/* MetalComboBoxEditor.java - Copyright (C) 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.plaf.metal; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; - -import javax.swing.JTextField; -import javax.swing.border.AbstractBorder; -import javax.swing.plaf.basic.BasicComboBoxEditor; -import javax.swing.plaf.metal.MetalLookAndFeel; - -/** - * An editor used by the {@link MetalComboBoxUI} class. - */ -public class MetalComboBoxEditor extends BasicComboBoxEditor -{ - /** - * A border used for the {@link JTextField} component. - */ - static class MetalComboBoxEditorBorder extends AbstractBorder - { - /** - * Creates a new border instance. - */ - public MetalComboBoxEditorBorder() - { - // Nothing to do here. - } - - /** - * Paints the border for the specified component. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - * @param w the width. - * @param h the height. - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - g.translate(x, y); - if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(0, 0, 0, h - 1); - g.drawLine(0, h - 1, w - 1, h - 1); - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(1, 1, w - 2, 1); - g.drawLine(1, 1, 1, h - 2); - g.drawLine(1, h - 2, w - 1, h - 2); - g.drawLine(w - 1, 1, w - 1, h - 2); - } - else - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(0, 0, 0, h - 2); - g.drawLine(0, h - 2, w - 1, h - 2); - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(1, 1, w - 1, 1); - g.drawLine(1, 1, 1, h - 1); - g.drawLine(1, h - 1, w - 1, h - 1); - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(1, h - 2, 1, h - 2); - } - g.translate(-x, -y); - } - - /** - * Measures the width of this border. - * - * @param c the component whose border is to be measured. - * - * @return an Insets object whose <code>left</code>, <code>right</code>, - * <code>top</code> and <code>bottom</code> fields indicate the - * width of the border at the respective edge, which is zero - * for the default implementation provided by AbstractButton. - * - * @see #getBorderInsets(java.awt.Component, java.awt.Insets) - */ - public Insets getBorderInsets(Component c) - { - return editorBorderInsets; - } - } - - /** - * A subclass of {@link MetalComboBoxEditor} that implements the - * {@link javax.swing.plaf.UIResource} interface. - */ - public static class UIResource extends MetalComboBoxEditor - implements javax.swing.plaf.UIResource - { - /** - * Creates a new instance. - */ - public UIResource() - { - // Nothing to do here. - } - } - - /** - * A special textfield implementation for the MetalComboBoxEditor. - */ - private class EditorTextField extends JTextField - { - EditorTextField(String s, int columns) - { - super(s, columns); - } - - /** - * Tests seem to show that the textfield in MetalComboBoxEditors have - * a height + 4. - */ - public Dimension getPreferredSize() - { - Dimension size = super.getPreferredSize(); - size.height += 4; - return size; - } - - /** - * Tests seem to show that the textfield in MetalComboBoxEditors have - * a height + 4. - */ - public Dimension getMinimumSize() - { - Dimension size = super.getMinimumSize(); - size.height += 4; - return size; - } - } - - /** The editor's border insets. */ - protected static Insets editorBorderInsets = new Insets(2, 2, 2, 0); - - /** - * Creates a new editor. - */ - public MetalComboBoxEditor() - { - editor = new EditorTextField("", 9); - editor.setBorder(new MetalComboBoxEditorBorder()); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxIcon.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxIcon.java deleted file mode 100644 index 45c8ead..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxIcon.java +++ /dev/null @@ -1,102 +0,0 @@ -/* MetalComboBoxIcon.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.io.Serializable; - -import javax.swing.Icon; - -/** - * An icon used by the {@link MetalComboBoxUI} class. - */ -public class MetalComboBoxIcon implements Icon, Serializable -{ - - /** - * Creates a new icon. - */ - public MetalComboBoxIcon() - { - // nothing required. - } - - /** - * Returns the icon width, which for this icon is 10 pixels. - * - * @return <code>10</code>. - */ - public int getIconWidth() - { - return 10; - } - - /** - * Returns the icon height, which for this icon is 5 pixels. - * - * @return <code>5</code>. - */ - public int getIconHeight() - { - return 5; - } - - /** - * Paints the icon at the location (x, y). - * - * @param c the combo box (ignored here). - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - if (c.isEnabled()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDisabled()); - for (int i = 0; i < 5; i++) - g.drawLine(x + i, y + i, x + 9 - i, y + i); - g.setColor(savedColor); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java deleted file mode 100644 index b9019b7..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalComboBoxUI.java +++ /dev/null @@ -1,372 +0,0 @@ -/* MetalComboBoxUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.ComboBoxEditor; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicComboBoxUI; -import javax.swing.plaf.basic.BasicComboPopup; -import javax.swing.plaf.basic.ComboPopup; - - -/** - * A UI delegate for the {@link JComboBox} component. - */ -public class MetalComboBoxUI extends BasicComboBoxUI -{ - /** - * A layout manager that arranges the editor component (if active) and the - * button that make up the combo box. - */ - public class MetalComboBoxLayoutManager - extends BasicComboBoxUI.ComboBoxLayoutManager - { - /** - * Creates a new instance of the layout manager. - */ - public MetalComboBoxLayoutManager() - { - // Nothing to do here. - } - - /** - * Arranges the editor (if visible) and button that comprise the combo - * box. - * - * @param parent the parent. - */ - public void layoutContainer(Container parent) - { - layoutComboBox(parent, this); - } - - /** - * Calls the <code>layoutContainer(Container)</code> method in the super - * class. - * - * @param parent the container. - */ - public void superLayout(Container parent) - { - super.layoutContainer(parent); - } - } - - /** - * A listener used to handle property changes in the {@link JComboBox} - * component, to ensure that the UI delegate accurately reflects the current - * state in the rendering onscreen. - */ - public class MetalPropertyChangeListener - extends BasicComboBoxUI.PropertyChangeHandler - { - /** - * Creates a new listener. - */ - public MetalPropertyChangeListener() - { - // Nothing to do here. - } - - /** - * Handles a property change event, updating the UI components as - * appropriate. - * - * @param e the event. - */ - public void propertyChange(PropertyChangeEvent e) - { - super.propertyChange(e); - String name = e.getPropertyName(); - if (name.equals("editable")) - editablePropertyChanged(e); - else if (name.equals("enabled")) - { - if (arrowButton instanceof MetalComboBoxButton) - { - arrowButton.setFocusable(!comboBox.isEditable() - && comboBox.isEnabled()); - comboBox.repaint(); - } - } - else if (name.equals("background")) - { - Color c = (Color) e.getNewValue(); - arrowButton.setBackground(c); - listBox.setBackground(c); - } - else if (name.equals("foreground")) - { - Color c = (Color) e.getNewValue(); - arrowButton.setForeground(c); - listBox.setForeground(c); - } - } - } - - /** - * A popup menu for the combo-box. - * - * @see #createPopup() - * - * @deprecated 1.4 - */ - public class MetalComboPopup extends BasicComboPopup - { - /** - * Creates a new popup. - * - * @param cBox the combo box. - */ - public MetalComboPopup(JComboBox cBox) - { - super(cBox); - } - - public void delegateFocus(MouseEvent e) - { - super.delegateFocus(e); - } - } - - /** - * Constructs a new instance of MetalComboBoxUI. - */ - public MetalComboBoxUI() - { - super(); - } - - /** - * Returns an instance of MetalComboBoxUI. - * - * @param component the component for which we return an UI instance - * - * @return an instance of MetalComboBoxUI - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalComboBoxUI(); - } - - /** - * Creates an editor for the combo box. - * - * @return An editor. - */ - protected ComboBoxEditor createEditor() - { - return new MetalComboBoxEditor.UIResource(); - } - - /** - * Creates a popup for the combo box. - * - * @return A popup. - */ - protected ComboPopup createPopup() - { - return super.createPopup(); - } - - /** - * Creates a new button for use in rendering the JComboBox. - * - * @return A button. - */ - protected JButton createArrowButton() - { - JButton button = new MetalComboBoxButton(comboBox, new MetalComboBoxIcon(), - currentValuePane, listBox); - button.setMargin(new Insets(0, 1, 1, 3)); - return button; - } - - /** - * Creates a new property change listener. - * - * @return A new property change listener. - */ - public PropertyChangeListener createPropertyChangeListener() - { - return new MetalPropertyChangeListener(); - } - - public void paint(Graphics g, JComponent c) - { - // do nothing, the button and text field are painted elsewhere - } - - /** - * Updates the button and text field to reflect a change in the 'editable' - * property. - * - * @param e the event. - * - * @deprecated 1.4 - */ - protected void editablePropertyChanged(PropertyChangeEvent e) - { - if (arrowButton instanceof MetalComboBoxButton) - { - MetalComboBoxButton b = (MetalComboBoxButton) arrowButton; - b.setIconOnly(comboBox.isEditable()); - b.setFocusable(!comboBox.isEditable() && comboBox.isEnabled()); - comboBox.repaint(); - } - } - - /** - * Creates a new layout manager for the UI delegate. - * - * @return A new layout manager. - */ - protected LayoutManager createLayoutManager() - { - return new MetalComboBoxLayoutManager(); - } - - /** - * Not used in Classpath. - * - * @deprecated 1.4 - */ - protected void removeListeners() - { - // no longer used in JDK 1.4 - } - - /** - * Returns the minimum size for the combo. - * - * @param c the component - * - * @return The minimum size for the combo box. - */ - public Dimension getMinimumSize(JComponent c) - { - if (!isMinimumSizeDirty) - return new Dimension(cachedMinimumSize); - - Dimension d; - if (!comboBox.isEditable() && arrowButton != null - && arrowButton instanceof MetalComboBoxButton) - { - MetalComboBoxButton b = (MetalComboBoxButton) arrowButton; - d = getDisplaySize(); - Insets arrowInsets = b.getInsets(); - Insets comboInsets = comboBox.getInsets(); - Icon icon = b.getComboIcon(); - d.width += comboInsets.left + comboInsets.right; - d.width += arrowInsets.left + arrowInsets.right; - d.width += arrowInsets.right + icon.getIconWidth(); - d.height += comboInsets.top + comboInsets.bottom; - d.height += arrowInsets.top + arrowInsets.bottom; - } - else if (comboBox.isEditable() && arrowButton != null && editor != null) - { - d = super.getMinimumSize(c); - Insets arrowMargin = arrowButton.getMargin(); - d.height += arrowMargin.top + arrowMargin.bottom; - d.width += arrowMargin.left + arrowMargin.right; - } - else - { - d = super.getMinimumSize(c); - } - cachedMinimumSize.setSize(d.width, d.height); - isMinimumSizeDirty = false; - return new Dimension(cachedMinimumSize); - } - - /** - * Configures the editor for this combo box. - */ - public void configureEditor() - { - super.configureEditor(); - if (popupKeyListener != null) - editor.removeKeyListener(popupKeyListener); - if (focusListener != null) - editor.addFocusListener(focusListener); - } - - /** - * Unconfigures the editor for this combo box. - */ - public void unconfigureEditor() - { - super.unconfigureEditor(); - if (focusListener != null) - editor.removeFocusListener(focusListener); - } - - /** - * Lays out the ComboBox - */ - public void layoutComboBox(Container parent, - MetalComboBoxUI.MetalComboBoxLayoutManager manager) - { - if (comboBox.isEditable()) - manager.superLayout(parent); - else if (arrowButton != null) - { - Insets comboInsets = comboBox.getInsets(); - int width = comboBox.getWidth(); - int height = comboBox.getHeight(); - arrowButton.setBounds(comboInsets.left, comboInsets.top, - width - (comboInsets.left + comboInsets.right), - height - (comboInsets.top + comboInsets.bottom)); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java deleted file mode 100644 index 0c1163a..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalDesktopIconUI.java +++ /dev/null @@ -1,72 +0,0 @@ -/* MetalDesktopIconUI.java - Copyright (C) 2005, 2006, 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.plaf.metal; - -import javax.swing.JComponent; -import javax.swing.JInternalFrame; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicDesktopIconUI; - -/** - * A UI delegate for the {@link JInternalFrame.JDesktopIcon} component. - */ -public class MetalDesktopIconUI - extends BasicDesktopIconUI -{ - - /** - * Constructs a new instance of <code>MetalDesktopIconUI</code>. - */ - public MetalDesktopIconUI() - { - super(); - } - - /** - * Returns a new <code>MetalDesktopIconUI</code> instance. - * - * @param component the component (ignored). - * - * @return A new <code>MetalDesktopIconUI</code> instance. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalDesktopIconUI(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalFileChooserUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalFileChooserUI.java deleted file mode 100644 index df49edf..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalFileChooserUI.java +++ /dev/null @@ -1,2120 +0,0 @@ -/* MetalFileChooserUI.java -- - Copyright (C) 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.plaf.metal; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.GridLayout; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.text.DateFormat; -import java.text.NumberFormat; -import java.util.Date; -import java.util.List; - -import javax.swing.AbstractAction; -import javax.swing.AbstractListModel; -import javax.swing.ActionMap; -import javax.swing.BorderFactory; -import javax.swing.ButtonGroup; -import javax.swing.ComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.JToggleButton; -import javax.swing.ListModel; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileSystemView; -import javax.swing.filechooser.FileView; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicFileChooserUI; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.DefaultTableModel; - - -/** - * A UI delegate for the {@link JFileChooser} component. This class is only - * partially implemented and is not usable yet. - */ -public class MetalFileChooserUI - extends BasicFileChooserUI -{ - - /** - * A renderer for the files and directories in the file chooser table. - */ - class TableFileRenderer - extends DefaultTableCellRenderer - { - - /** - * Creates a new renderer. - */ - public TableFileRenderer() - { - super(); - } - - /** - * Returns a component that can render the specified value. - * - * @param table the table - * @param value the string value of the cell - * @param isSelected is the item selected? - * @param hasFocus does the item have the focus? - * @param row the row - * @param column the column - * - * @return The renderer. - */ - public Component getTableCellRendererComponent(JTable table, Object value, - boolean isSelected, boolean hasFocus, int row, int column) - { - if (column == 0) - { - FileView v = getFileView(getFileChooser()); - ListModel lm = fileList.getModel(); - if (row < lm.getSize()) - setIcon(v.getIcon((File) lm.getElementAt(row))); - } - else - setIcon(null); - - setText(value.toString()); - setOpaque(true); - setEnabled(table.isEnabled()); - setFont(fileList.getFont()); - - if (startEditing && column == 0 || !isSelected) - { - setBackground(table.getBackground()); - setForeground(table.getForeground()); - } - else - { - setBackground(table.getSelectionBackground()); - setForeground(table.getSelectionForeground()); - } - - if (hasFocus) - setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); - else - setBorder(noFocusBorder); - - return this; - } - } - - /** - * ActionListener for the list view. - */ - class ListViewActionListener implements ActionListener - { - - /** - * This method is invoked when an action occurs. - * - * @param e - - * the <code>ActionEvent</code> that occurred - */ - public void actionPerformed(ActionEvent e) - { - if (!listView) - { - int[] index = fileTable.getSelectedRows(); - listView = true; - JFileChooser fc = getFileChooser(); - fc.remove(fileTablePanel); - createList(fc); - - fileList.getSelectionModel().clearSelection(); - if (index.length > 0) - for (int i = 0; i < index.length; i++) - fileList.getSelectionModel().addSelectionInterval(index[i], index[i]); - - fc.add(fileListPanel, BorderLayout.CENTER); - fc.revalidate(); - fc.repaint(); - } - } - } - - /** - * ActionListener for the details view. - */ - class DetailViewActionListener implements ActionListener - { - - /** - * This method is invoked when an action occurs. - * - * @param e - - * the <code>ActionEvent</code> that occurred - */ - public void actionPerformed(ActionEvent e) - { - if (listView) - { - int[] index = fileList.getSelectedIndices(); - JFileChooser fc = getFileChooser(); - listView = false; - fc.remove(fileListPanel); - - if (fileTable == null) - createDetailsView(fc); - else - updateTable(); - - fileTable.getSelectionModel().clearSelection(); - if (index.length > 0) - { - for (int i = 0; i < index.length; i++) - fileTable.getSelectionModel().addSelectionInterval(index[i], index[i]); - } - - fc.add(fileTablePanel, BorderLayout.CENTER); - fc.revalidate(); - fc.repaint(); - } - } - } - - /** - * A property change listener. - */ - class MetalFileChooserPropertyChangeListener - implements PropertyChangeListener - { - /** - * Default constructor. - */ - public MetalFileChooserPropertyChangeListener() - { - } - - /** - * Handles a property change event. - * - * @param e the event. - */ - public void propertyChange(PropertyChangeEvent e) - { - JFileChooser filechooser = getFileChooser(); - - String n = e.getPropertyName(); - if (n.equals(JFileChooser.MULTI_SELECTION_ENABLED_CHANGED_PROPERTY)) - { - int mode = -1; - if (filechooser.isMultiSelectionEnabled()) - mode = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION; - else - mode = ListSelectionModel.SINGLE_SELECTION; - - if (listView) - fileList.setSelectionMode(mode); - else - fileTable.setSelectionMode(mode); - } - else if (n.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) - { - File file = filechooser.getSelectedFile(); - - if (file != null - && filechooser.getDialogType() == JFileChooser.SAVE_DIALOG) - { - if (file.isDirectory() && filechooser.isTraversable(file)) - { - directoryLabel = look; - dirLabel.setText(directoryLabel); - filechooser.setApproveButtonText(openButtonText); - filechooser.setApproveButtonToolTipText(openButtonToolTipText); - } - else if (file.isFile()) - { - directoryLabel = save; - dirLabel.setText(directoryLabel); - filechooser.setApproveButtonText(saveButtonText); - filechooser.setApproveButtonToolTipText(saveButtonToolTipText); - } - } - - if (file == null) - setFileName(null); - else if (file.isFile() || filechooser.getFileSelectionMode() - != JFileChooser.FILES_ONLY) - setFileName(file.getName()); - int index = -1; - index = getModel().indexOf(file); - if (index >= 0) - { - if (listView) - { - fileList.setSelectedIndex(index); - fileList.ensureIndexIsVisible(index); - fileList.revalidate(); - fileList.repaint(); - } - else - { - fileTable.getSelectionModel().addSelectionInterval(index, index); - fileTable.scrollRectToVisible(fileTable.getCellRect(index, 0, true)); - fileTable.revalidate(); - fileTable.repaint(); - } - } - } - - else if (n.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) - { - if (listView) - { - fileList.clearSelection(); - fileList.revalidate(); - fileList.repaint(); - } - else - { - fileTable.clearSelection(); - fileTable.revalidate(); - fileTable.repaint(); - } - - setDirectorySelected(false); - File currentDirectory = filechooser.getCurrentDirectory(); - setDirectory(currentDirectory); - boolean hasParent = currentDirectory.getParentFile() != null; - getChangeToParentDirectoryAction().setEnabled(hasParent); - } - - else if (n.equals(JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY)) - { - filterModel.propertyChange(e); - } - else if (n.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) - { - filterModel.propertyChange(e); - } - else if (n.equals(JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY) - || n.equals(JFileChooser.DIALOG_TITLE_CHANGED_PROPERTY)) - { - Window owner = SwingUtilities.windowForComponent(filechooser); - if (owner instanceof JDialog) - ((JDialog) owner).setTitle(getDialogTitle(filechooser)); - approveButton.setText(getApproveButtonText(filechooser)); - approveButton.setToolTipText( - getApproveButtonToolTipText(filechooser)); - approveButton.setMnemonic(getApproveButtonMnemonic(filechooser)); - } - - else if (n.equals(JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY)) - approveButton.setText(getApproveButtonText(filechooser)); - - else if (n.equals( - JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY)) - approveButton.setToolTipText(getApproveButtonToolTipText(filechooser)); - - else if (n.equals(JFileChooser.APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY)) - approveButton.setMnemonic(getApproveButtonMnemonic(filechooser)); - - else if (n.equals( - JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) - { - if (filechooser.getControlButtonsAreShown()) - { - topPanel.add(controls, BorderLayout.EAST); - } - else - topPanel.remove(controls); - topPanel.revalidate(); - topPanel.repaint(); - topPanel.doLayout(); - } - - else if (n.equals( - JFileChooser.ACCEPT_ALL_FILE_FILTER_USED_CHANGED_PROPERTY)) - { - if (filechooser.isAcceptAllFileFilterUsed()) - filechooser.addChoosableFileFilter( - getAcceptAllFileFilter(filechooser)); - else - filechooser.removeChoosableFileFilter( - getAcceptAllFileFilter(filechooser)); - } - - else if (n.equals(JFileChooser.ACCESSORY_CHANGED_PROPERTY)) - { - JComponent old = (JComponent) e.getOldValue(); - if (old != null) - getAccessoryPanel().remove(old); - JComponent newval = (JComponent) e.getNewValue(); - if (newval != null) - getAccessoryPanel().add(newval); - } - - if (n.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY) - || n.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY) - || n.equals(JFileChooser.FILE_HIDING_CHANGED_PROPERTY)) - { - // Remove editing component - if (fileTable != null) - fileTable.removeAll(); - if (fileList != null) - fileList.removeAll(); - startEditing = false; - - // Set text on button back to original. - if (filechooser.getDialogType() == JFileChooser.SAVE_DIALOG) - { - directoryLabel = save; - dirLabel.setText(directoryLabel); - filechooser.setApproveButtonText(saveButtonText); - filechooser.setApproveButtonToolTipText(saveButtonToolTipText); - } - - rescanCurrentDirectory(filechooser); - } - - filechooser.revalidate(); - filechooser.repaint(); - } - } - - /** - * A combo box model containing the selected directory and all its parent - * directories. - */ - protected class DirectoryComboBoxModel - extends AbstractListModel - implements ComboBoxModel - { - /** Storage for the items in the model. */ - private List items; - - /** The index of the selected item. */ - private int selectedIndex; - - /** - * Creates a new model. - */ - public DirectoryComboBoxModel() - { - items = new java.util.ArrayList(); - selectedIndex = -1; - } - - /** - * Returns the number of items in the model. - * - * @return The number of items in the model. - */ - public int getSize() - { - return items.size(); - } - - /** - * Returns the item at the specified index. - * - * @param index the item index. - * - * @return The item. - */ - public Object getElementAt(int index) - { - return items.get(index); - } - - /** - * Returns the depth of the item at the given <code>index</code>. - * - * @param index the item index. - * - * @return The depth. - */ - public int getDepth(int index) - { - return Math.max(index, 0); - } - - /** - * Returns the selected item, or <code>null</code> if no item is selected. - * - * @return The selected item, or <code>null</code>. - */ - public Object getSelectedItem() - { - if (selectedIndex >= 0) - return items.get(selectedIndex); - else - return null; - } - - /** - * Sets the selected item. This clears all the directories from the - * existing list, and repopulates it with the new selected directory - * and all its parent directories. - * - * @param selectedDirectory the selected directory. - */ - public void setSelectedItem(Object selectedDirectory) - { - items.clear(); - FileSystemView fsv = getFileChooser().getFileSystemView(); - File parent = (File) selectedDirectory; - while (parent != null) - { - items.add(0, parent); - parent = fsv.getParentDirectory(parent); - } - selectedIndex = items.indexOf(selectedDirectory); - fireContentsChanged(this, 0, items.size() - 1); - } - - } - - /** - * Handles changes to the selection in the directory combo box. - */ - protected class DirectoryComboBoxAction - extends AbstractAction - { - /** - * Creates a new action. - */ - protected DirectoryComboBoxAction() - { - // Nothing to do here. - } - - /** - * Handles the action event. - * - * @param e the event. - */ - public void actionPerformed(ActionEvent e) - { - JFileChooser fc = getFileChooser(); - fc.setCurrentDirectory((File) directoryModel.getSelectedItem()); - } - } - - /** - * A renderer for the items in the directory combo box. - */ - class DirectoryComboBoxRenderer - extends DefaultListCellRenderer - { - /** - * This is the icon that is displayed in the combobox. This wraps - * the standard icon and adds indendation. - */ - private IndentIcon indentIcon; - - /** - * Creates a new renderer. - */ - public DirectoryComboBoxRenderer(JFileChooser fc) - { - indentIcon = new IndentIcon(); - } - - /** - * Returns a component that can be used to paint the given value within - * the list. - * - * @param list the list. - * @param value the value (a {@link File}). - * @param index the item index. - * @param isSelected is the item selected? - * @param cellHasFocus does the list cell have focus? - * - * @return The list cell renderer. - */ - public Component getListCellRendererComponent(JList list, Object value, - int index, - boolean isSelected, - boolean cellHasFocus) - { - super.getListCellRendererComponent(list, value, index, isSelected, - cellHasFocus); - File file = (File) value; - setText(getFileChooser().getName(file)); - - // Install indented icon. - Icon icon = getFileChooser().getIcon(file); - indentIcon.setIcon(icon); - int depth = directoryModel.getDepth(index); - indentIcon.setDepth(depth); - setIcon(indentIcon); - - return this; - } - } - - /** - * An icon that wraps another icon and adds indentation. - */ - class IndentIcon - implements Icon - { - - /** - * The indentation level. - */ - private static final int INDENT = 10; - - /** - * The wrapped icon. - */ - private Icon icon; - - /** - * The current depth. - */ - private int depth; - - /** - * Sets the icon to be wrapped. - * - * @param i the icon - */ - void setIcon(Icon i) - { - icon = i; - } - - /** - * Sets the indentation depth. - * - * @param d the depth to set - */ - void setDepth(int d) - { - depth = d; - } - - public int getIconHeight() - { - return icon.getIconHeight(); - } - - public int getIconWidth() - { - return icon.getIconWidth() + depth * INDENT; - } - - public void paintIcon(Component c, Graphics g, int x, int y) - { - icon.paintIcon(c, g, x + depth * INDENT, y); - } - - } - - /** - * A renderer for the files and directories in the file chooser. - */ - protected class FileRenderer - extends DefaultListCellRenderer - { - - /** - * Creates a new renderer. - */ - protected FileRenderer() - { - // Nothing to do here. - } - - /** - * Returns a component that can render the specified value. - * - * @param list the list. - * @param value the value (a {@link File}). - * @param index the index. - * @param isSelected is the item selected? - * @param cellHasFocus does the item have the focus? - * - * @return The renderer. - */ - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus) - { - FileView v = getFileView(getFileChooser()); - File f = (File) value; - if (f != null) - { - setText(v.getName(f)); - setIcon(v.getIcon(f)); - } - else - { - setText(""); - setIcon(null); - } - setOpaque(true); - if (isSelected) - { - setBackground(list.getSelectionBackground()); - setForeground(list.getSelectionForeground()); - } - else - { - setBackground(list.getBackground()); - setForeground(list.getForeground()); - } - - setEnabled(list.isEnabled()); - setFont(list.getFont()); - - if (cellHasFocus) - setBorder(UIManager.getBorder("List.focusCellHighlightBorder")); - else - setBorder(noFocusBorder); - return this; - } - } - - /** - * A combo box model for the file selection filters. - */ - protected class FilterComboBoxModel - extends AbstractListModel - implements ComboBoxModel, PropertyChangeListener - { - - /** Storage for the filters in the model. */ - protected FileFilter[] filters; - - /** The index of the selected file filter. */ - private Object selected; - - /** - * Creates a new model. - */ - protected FilterComboBoxModel() - { - filters = new FileFilter[1]; - filters[0] = getAcceptAllFileFilter(getFileChooser()); - selected = filters[0]; - } - - /** - * Handles property changes. - * - * @param e the property change event. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) - { - JFileChooser fc = getFileChooser(); - FileFilter[] choosableFilters = fc.getChoosableFileFilters(); - filters = choosableFilters; - fireContentsChanged(this, 0, filters.length); - selected = e.getNewValue(); - fireContentsChanged(this, -1, -1); - } - else if (e.getPropertyName().equals( - JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY)) - { - // repopulate list - JFileChooser fc = getFileChooser(); - FileFilter[] choosableFilters = fc.getChoosableFileFilters(); - filters = choosableFilters; - fireContentsChanged(this, 0, filters.length); - } - } - - /** - * Sets the selected filter. - * - * @param filter the filter (<code>null</code> ignored). - */ - public void setSelectedItem(Object filter) - { - if (filter != null) - { - selected = filter; - fireContentsChanged(this, -1, -1); - } - } - - /** - * Returns the selected file filter. - * - * @return The selected file filter. - */ - public Object getSelectedItem() - { - return selected; - } - - /** - * Returns the number of items in the model. - * - * @return The number of items in the model. - */ - public int getSize() - { - return filters.length; - } - - /** - * Returns the item at the specified index. - * - * @param index the item index. - * - * @return The item at the specified index. - */ - public Object getElementAt(int index) - { - return filters[index]; - } - - } - - /** - * A renderer for the items in the file filter combo box. - */ - public class FilterComboBoxRenderer - extends DefaultListCellRenderer - { - /** - * Creates a new renderer. - */ - public FilterComboBoxRenderer() - { - // Nothing to do here. - } - - /** - * Returns a component that can be used to paint the given value within - * the list. - * - * @param list the list. - * @param value the value (a {@link FileFilter}). - * @param index the item index. - * @param isSelected is the item selected? - * @param cellHasFocus does the list cell have focus? - * - * @return This component as the renderer. - */ - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus) - { - super.getListCellRendererComponent(list, value, index, isSelected, - cellHasFocus); - FileFilter filter = (FileFilter) value; - setText(filter.getDescription()); - return this; - } - } - - /** - * A listener for selection events in the file list. - * - * @see #createListSelectionListener(JFileChooser) - */ - class MetalFileChooserSelectionListener - implements ListSelectionListener - { - /** - * Creates a new <code>SelectionListener</code> object. - */ - protected MetalFileChooserSelectionListener() - { - // Do nothing here. - } - - /** - * Makes changes to different properties when - * a value has changed in the filechooser's selection. - * - * @param e - the list selection event that occured. - */ - public void valueChanged(ListSelectionEvent e) - { - File f = (File) fileList.getSelectedValue(); - if (f == null) - return; - JFileChooser filechooser = getFileChooser(); - if (! filechooser.isTraversable(f)) - filechooser.setSelectedFile(f); - else - filechooser.setSelectedFile(null); - } - } - - /** - * A mouse listener for the {@link JFileChooser}. - * This listener is used for editing filenames. - */ - protected class SingleClickListener - extends MouseAdapter - { - - /** Stores instance of the list */ - JList list; - - /** - * Stores the current file that is being edited. - * It is null if nothing is currently being edited. - */ - File editFile; - - /** The current file chooser. */ - JFileChooser fc; - - /** The last file selected. */ - Object lastSelected; - - /** The textfield used for editing. */ - JTextField editField; - - /** - * Creates a new listener. - * - * @param list the directory/file list. - */ - public SingleClickListener(JList list) - { - this.list = list; - editFile = null; - fc = getFileChooser(); - lastSelected = null; - startEditing = false; - } - - /** - * Receives notification of a mouse click event. - * - * @param e the event. - */ - public void mouseClicked(MouseEvent e) - { - if (e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON1) - { - int index = list.locationToIndex(e.getPoint()); - File[] sf = fc.getSelectedFiles(); - if ((!fc.isMultiSelectionEnabled() || (sf != null && sf.length <= 1)) - && index >= 0 && !startEditing && list.isSelectedIndex(index)) - { - Object tmp = list.getModel().getElementAt(index); - if (lastSelected != null && lastSelected.equals(tmp)) - editFile(index); - lastSelected = tmp; - } - else - completeEditing(); - } - else - completeEditing(); - } - - /** - * Sets up the text editor for the current file. - * - * @param index - - * the current index of the item in the list to be edited. - */ - void editFile(int index) - { - Rectangle bounds = list.getCellBounds(index, index); - list.scrollRectToVisible(bounds); - editFile = (File) list.getModel().getElementAt(index); - if (editFile.canWrite()) - { - startEditing = true; - editField = new JTextField(editFile.getName()); - editField.addActionListener(new EditingActionListener()); - - Icon icon = getFileView(fc).getIcon(editFile); - if (icon != null) - { - int padding = icon.getIconWidth() + 4; - bounds.x += padding; - bounds.width -= padding; - } - editField.setBounds(bounds); - - list.add(editField); - - editField.requestFocus(); - editField.selectAll(); - } - else - completeEditing(); - list.repaint(); - } - - /** - * Completes the editing. - */ - void completeEditing() - { - if (editField != null && editFile != null) - { - String text = editField.getText(); - if (text != null && text != "" && !text.equals(fc.getName(editFile))) - { - File f = fc.getFileSystemView(). - createFileObject(fc.getCurrentDirectory(), text); - if ( editFile.renameTo(f) ) - rescanCurrentDirectory(fc); - } - list.remove(editField); - } - startEditing = false; - editFile = null; - lastSelected = null; - editField = null; - list.repaint(); - } - - /** - * ActionListener for the editing text field. - */ - class EditingActionListener implements ActionListener - { - - /** - * This method is invoked when an action occurs. - * - * @param e - - * the <code>ActionEvent</code> that occurred - */ - public void actionPerformed(ActionEvent e) - { - if (editField != null) - completeEditing(); - } - } - } - - /** - * A mouse listener for the {@link JFileChooser}. - * This listener is used for the table - */ - private class TableClickListener extends MouseAdapter - { - - /** Stores instance of the table */ - JTable table; - - /** Stores instance of the file chooser */ - JFileChooser fc; - - /** The last selected file. */ - Object lastSelected; - - /** - * Stores the current file that is being edited. - * It is null if nothing is currently being edited. - */ - File editFile; - - /** The textfield used for editing. */ - JTextField editField; - - /** - * Creates a new listener. - * - * @param table the directory/file table - * @param fc the JFileChooser - */ - public TableClickListener(JTable table, JFileChooser fc) - { - this.table = table; - this.fc = fc; - lastSelected = fileList.getSelectedValue(); - setDirectorySelected(false); - startEditing = false; - editFile = null; - editField = null; - } - - /** - * Receives notification of a mouse click event. - * - * @param e the event. - */ - public void mouseClicked(MouseEvent e) - { - int row = table.getSelectedRow(); - Object selVal = fileList.getModel().getElementAt(row); - if (selVal == null) - return; - FileSystemView fsv = fc.getFileSystemView(); - if (e.getClickCount() == 1 && - selVal.equals(lastSelected) && - e.getButton() == MouseEvent.BUTTON1) - { - File[] sf = fc.getSelectedFiles(); - if ((!fc.isMultiSelectionEnabled() || (sf != null && sf.length <= 1)) - && !startEditing) - { - editFile = (File) selVal; - editFile(row); - } - } - else if (e.getClickCount() >= 2 && - selVal.equals(lastSelected)) - { - if (startEditing) - completeEditing(); - File f = fsv.createFileObject(lastSelected.toString()); - if (fc.isTraversable(f)) - { - fc.setCurrentDirectory(f); - fc.rescanCurrentDirectory(); - } - else - { - fc.setSelectedFile(f); - fc.approveSelection(); - closeDialog(); - } - } - else - { - if (startEditing) - completeEditing(); - String path = selVal.toString(); - File f = fsv.createFileObject(path); - fc.setSelectedFile(f); - if (fc.isTraversable(f)) - { - setDirectorySelected(true); - setDirectory(f); - } - else - { - setDirectorySelected(false); - setDirectory(null); - } - lastSelected = selVal; - if (f.isFile()) - setFileName(path.substring(path.lastIndexOf("/") + 1)); - else if (fc.getFileSelectionMode() != JFileChooser.FILES_ONLY) - setFileName(path); - } - fileTable.repaint(); - } - - /** - * Sets up the text editor for the current file. - * - * @param row - - * the current row of the item in the list to be edited. - */ - void editFile(int row) - { - Rectangle bounds = table.getCellRect(row, 0, true); - table.scrollRectToVisible(bounds); - if (editFile.canWrite()) - { - startEditing = true; - editField = new JTextField(editFile.getName()); - editField.addActionListener(new EditingActionListener()); - - // Need to adjust y pos - bounds.y = row * table.getRowHeight(); - editField.setBounds(bounds); - - table.add(editField); - - editField.requestFocus(); - editField.selectAll(); - } - else - completeEditing(); - table.repaint(); - } - - /** - * Completes the editing. - */ - void completeEditing() - { - if (editField != null && editFile != null) - { - String text = editField.getText(); - if (text != null && text != "" && !text.equals(fc.getName(editFile))) - if (editFile.renameTo(fc.getFileSystemView().createFileObject( - fc.getCurrentDirectory(), text))) - rescanCurrentDirectory(fc); - table.remove(editField); - } - startEditing = false; - editFile = null; - editField = null; - table.repaint(); - } - - /** - * ActionListener for the editing text field. - */ - class EditingActionListener implements ActionListener - { - - /** - * This method is invoked when an action occurs. - * - * @param e - - * the <code>ActionEvent</code> that occurred - */ - public void actionPerformed(ActionEvent e) - { - if (editField != null) - completeEditing(); - } - } - - /** - * Closes the dialog. - */ - public void closeDialog() - { - Window owner = SwingUtilities.windowForComponent(fc); - if (owner instanceof JDialog) - ((JDialog) owner).dispose(); - } - } - - /** The text for a label describing the directory combo box. */ - private String directoryLabel; - - private JComboBox directoryComboBox; - - /** The model for the directory combo box. */ - DirectoryComboBoxModel directoryModel; - - /** The text for a label describing the file text field. */ - private String fileLabel; - - /** The file name text field. */ - private JTextField fileTextField; - - /** The text for a label describing the filter combo box. */ - private String filterLabel; - - /** - * The top panel (contains the directory combo box and the control buttons). - */ - private JPanel topPanel; - - /** A panel containing the control buttons ('up', 'home' etc.). */ - private JPanel controls; - - /** - * The panel that contains the filename field and the filter combobox. - */ - private JPanel bottomPanel; - - /** - * The panel that contains the 'Open' (or 'Save') and 'Cancel' buttons. - */ - private JPanel buttonPanel; - - private JButton approveButton; - - /** The file list. */ - JList fileList; - - /** The file table. */ - JTable fileTable; - - /** The panel containing the file list. */ - JPanel fileListPanel; - - /** The panel containing the file table. */ - JPanel fileTablePanel; - - /** The filter combo box model. */ - private FilterComboBoxModel filterModel; - - /** The action map. */ - private ActionMap actionMap; - - /** True if currently in list view. */ - boolean listView; - - /** True if we can or have started editing a cell. */ - boolean startEditing; - - /** The scrollpane used for the table and list. */ - JScrollPane scrollPane; - - /** The text for the label when saving. */ - String save; - - /** The text for the label when opening a directory. */ - String look; - - /** The label for the file combo box. */ - JLabel dirLabel; - - /** Listeners. */ - ListSelectionListener listSelList; - MouseListener doubleClickList; - SingleClickListener singleClickList; - TableClickListener tableClickList; - - /** - * A factory method that returns a UI delegate for the specified - * component. - * - * @param c the component (which should be a {@link JFileChooser}). - */ - public static ComponentUI createUI(JComponent c) - { - JFileChooser chooser = (JFileChooser) c; - return new MetalFileChooserUI(chooser); - } - - /** - * Creates a new instance of this UI delegate. - * - * @param filechooser the file chooser component. - */ - public MetalFileChooserUI(JFileChooser filechooser) - { - super(filechooser); - bottomPanel = new JPanel(new GridLayout(3, 2)); - buttonPanel = new JPanel(); - } - - public void installUI(JComponent c) - { - super.installUI(c); - actionMap = createActionMap(); - } - - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - actionMap = null; - } - - /** - * Installs the sub-components of the file chooser. - * - * @param fc the file chooser component. - */ - public void installComponents(JFileChooser fc) - { - fc.setLayout(new BorderLayout()); - topPanel = new JPanel(new BorderLayout()); - dirLabel = new JLabel(directoryLabel); - topPanel.add(dirLabel, BorderLayout.WEST); - this.controls = new JPanel(); - addControlButtons(); - - JPanel dirPanel = new JPanel(new VerticalMidLayout()); - directoryModel = createDirectoryComboBoxModel(fc); - directoryComboBox = new JComboBox(directoryModel); - directoryComboBox.setRenderer(createDirectoryComboBoxRenderer(fc)); - dirPanel.add(directoryComboBox); - topPanel.add(dirPanel); - topPanel.add(controls, BorderLayout.EAST); - topPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 8)); - fc.add(topPanel, BorderLayout.NORTH); - - JPanel list = createList(fc); - list.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); - fc.add(list, BorderLayout.CENTER); - - JPanel bottomPanel = getBottomPanel(); - filterModel = createFilterComboBoxModel(); - JComboBox fileFilterCombo = new JComboBox(filterModel); - fileFilterCombo.setRenderer(createFilterComboBoxRenderer()); - - fileTextField = new JTextField(); - JPanel fileNamePanel = new JPanel(new VerticalMidLayout()); - fileNamePanel.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 5)); - fileNamePanel.add(fileTextField); - JPanel row1 = new JPanel(new BorderLayout()); - row1.add(new JLabel(this.fileLabel), BorderLayout.WEST); - row1.add(fileNamePanel); - bottomPanel.add(row1); - - JPanel row2 = new JPanel(new BorderLayout()); - row2.add(new JLabel(this.filterLabel), BorderLayout.WEST); - row2.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); - row2.add(fileFilterCombo); - bottomPanel.add(row2); - JPanel buttonPanel = new JPanel(new ButtonLayout()); - - approveButton = new JButton(getApproveSelectionAction()); - approveButton.setText(getApproveButtonText(fc)); - approveButton.setToolTipText(getApproveButtonToolTipText(fc)); - approveButton.setMnemonic(getApproveButtonMnemonic(fc)); - buttonPanel.add(approveButton); - buttonPanel.setBorder(BorderFactory.createEmptyBorder(8, 0, 0, 0)); - - JButton cancelButton = new JButton(getCancelSelectionAction()); - cancelButton.setText(cancelButtonText); - cancelButton.setToolTipText(cancelButtonToolTipText); - cancelButton.setMnemonic(cancelButtonMnemonic); - buttonPanel.add(cancelButton); - bottomPanel.add(buttonPanel, BorderLayout.SOUTH); - bottomPanel.setBorder(BorderFactory.createEmptyBorder(0, 8, 8, 8)); - fc.add(bottomPanel, BorderLayout.SOUTH); - - fc.add(getAccessoryPanel(), BorderLayout.EAST); - } - - /** - * Uninstalls the components added by - * {@link #installComponents(JFileChooser)}. - * - * @param fc the file chooser. - */ - public void uninstallComponents(JFileChooser fc) - { - fc.remove(bottomPanel); - bottomPanel = null; - fc.remove(fileListPanel); - fc.remove(fileTablePanel); - fileTablePanel = null; - fileListPanel = null; - fc.remove(topPanel); - topPanel = null; - - directoryModel = null; - fileTextField = null; - directoryComboBox = null; - } - - /** - * Returns the panel that contains the 'Open' (or 'Save') and 'Cancel' - * buttons. - * - * @return The panel. - */ - protected JPanel getButtonPanel() - { - return buttonPanel; - } - - /** - * Creates and returns a new panel that will be used for the controls at - * the bottom of the file chooser. - * - * @return A new panel. - */ - protected JPanel getBottomPanel() - { - if (bottomPanel == null) - bottomPanel = new JPanel(new GridLayout(3, 2)); - return bottomPanel; - } - - /** - * Fetches localised strings for use by the labels and buttons on the - * file chooser. - * - * @param fc the file chooser. - */ - protected void installStrings(JFileChooser fc) - { - super.installStrings(fc); - look = "Look In: "; - save = "Save In: "; - if (fc.getDialogType() == JFileChooser.SAVE_DIALOG) - directoryLabel = save; - else - directoryLabel = look; - - fileLabel = "File Name: "; - filterLabel = "Files of Type: "; - - this.cancelButtonMnemonic = 0; - this.cancelButtonText = "Cancel"; - this.cancelButtonToolTipText = "Abort file chooser dialog"; - - this.directoryOpenButtonMnemonic = 0; - this.directoryOpenButtonText = "Open"; - this.directoryOpenButtonToolTipText = "Open selected directory"; - - this.helpButtonMnemonic = 0; - this.helpButtonText = "Help"; - this.helpButtonToolTipText = "Filechooser help"; - - this.openButtonMnemonic = 0; - this.openButtonText = "Open"; - this.openButtonToolTipText = "Open selected file"; - - this.saveButtonMnemonic = 0; - this.saveButtonText = "Save"; - this.saveButtonToolTipText = "Save selected file"; - - this.updateButtonMnemonic = 0; - this.updateButtonText = "Update"; - this.updateButtonToolTipText = "Update directory listing"; - } - - /** - * Installs the listeners required. - * - * @param fc the file chooser. - */ - protected void installListeners(JFileChooser fc) - { - directoryComboBox.setAction(new DirectoryComboBoxAction()); - fc.addPropertyChangeListener(filterModel); - listSelList = createListSelectionListener(fc); - doubleClickList = this.createDoubleClickListener(fc, fileList); - singleClickList = new SingleClickListener(fileList); - fileList.addListSelectionListener(listSelList); - fileList.addMouseListener(doubleClickList); - fileList.addMouseListener(singleClickList); - super.installListeners(fc); - } - - protected void uninstallListeners(JFileChooser fc) - { - super.uninstallListeners(fc); - fc.removePropertyChangeListener(filterModel); - directoryComboBox.setAction(null); - fileList.removeListSelectionListener(listSelList); - fileList.removeMouseListener(doubleClickList); - fileList.removeMouseListener(singleClickList); - - if (fileTable != null) - fileTable.removeMouseListener(tableClickList); - } - - protected ActionMap getActionMap() - { - if (actionMap == null) - actionMap = createActionMap(); - return actionMap; - } - - /** - * Creates and returns an action map. - * - * @return The action map. - */ - protected ActionMap createActionMap() - { - ActionMap map = new ActionMap(); - map.put("approveSelection", getApproveSelectionAction()); - map.put("cancelSelection", getCancelSelectionAction()); - map.put("Go Up", getChangeToParentDirectoryAction()); - return map; - } - - /** - * Creates a panel containing a list of files. - * - * @param fc the file chooser. - * - * @return A panel. - */ - protected JPanel createList(JFileChooser fc) - { - if (fileList == null) - { - fileListPanel = new JPanel(new BorderLayout()); - fileList = new JList(getModel()); - scrollPane = new JScrollPane(fileList); - fileList.setLayoutOrientation(JList.VERTICAL_WRAP); - fileList.setCellRenderer(new FileRenderer()); - } - else - { - fileList.setModel(getModel()); - fileListPanel.removeAll(); - scrollPane.getViewport().setView(fileList); - } - fileListPanel.add(scrollPane); - // This size was determined using BeanShell and dumping the JFileChooser - // component hierarchy. Sun has an internal FilePane class in there, but - // that probably doesn't matter atm. - fileListPanel.setPreferredSize(new Dimension(405, 135)); - return fileListPanel; - } - - /** - * Creates a panel containing a table within a scroll pane. - * - * @param fc the file chooser. - * - * @return The details view. - */ - protected JPanel createDetailsView(JFileChooser fc) - { - fileTablePanel = new JPanel(new BorderLayout()); - - Object[] cols = new Object[] {"Name", "Size", "Modified"}; - Object[][] rows = new Object[fileList.getModel().getSize()][3]; - - fileTable = new JTable(new DefaultTableModel(rows, cols)); - - if (fc.isMultiSelectionEnabled()) - fileTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - else - fileTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - - fileTable.setShowGrid(false); - fileTable.setColumnSelectionAllowed(false); - fileTable.setDefaultRenderer(Object.class, new TableFileRenderer()); - - tableClickList = new TableClickListener(fileTable, fc); - fileTable.addMouseListener(tableClickList); - - return updateTable(); - } - - /** - * Sets the values in the table, and puts it in the panel. - * - * @return the panel containing the table. - */ - JPanel updateTable() - { - DefaultTableModel mod = (DefaultTableModel) fileTable.getModel(); - ListModel lm = fileList.getModel(); - DateFormat dt = DateFormat.getDateTimeInstance(DateFormat.SHORT, - DateFormat.SHORT); - File curr = null; - int size = lm.getSize(); - int rc = mod.getRowCount(); - - // If there are not enough rows - for (int x = rc; x < size; x++) - mod.addRow(new Object[3]); - - for (int i = 0; i < size; i++) - { - curr = (File) lm.getElementAt(i); - fileTable.setValueAt(curr.getName(), i, 0); - fileTable.setValueAt(formatSize(curr.length()), i, 1); - fileTable.setValueAt(dt.format(new Date(curr.lastModified())), i, 2); - } - - // If there are too many rows - while (rc > size) - mod.removeRow(--rc); - - scrollPane.getViewport().setView(fileTable); - scrollPane.setColumnHeaderView(fileTable.getTableHeader()); - - fileTablePanel.removeAll(); - fileTablePanel.add(scrollPane); - - return fileTablePanel; - } - - /** - * Formats bytes into the appropriate size. - * - * @param bytes the number of bytes to convert - * @return a string representation of the size - */ - private String formatSize(long bytes) - { - NumberFormat nf = NumberFormat.getNumberInstance(); - long mb = (long) Math.pow(2, 20); - long kb = (long) Math.pow(2, 10); - long gb = (long) Math.pow(2, 30); - double size = 0; - String id = ""; - - if ((bytes / gb) >= 1) - { - size = (double) bytes / (double) gb; - id = "GB"; - } - else if ((bytes / mb) >= 1) - { - size = (double) bytes / (double) mb; - id = "MB"; - } - else if ((bytes / kb) >= 1) - { - size = (double) bytes / (double) kb; - id = "KB"; - } - else - { - size = bytes; - id = "Bytes"; - } - - return nf.format(size) + " " + id; - } - /** - * Creates a listener that monitors selections in the directory/file list - * and keeps the {@link JFileChooser} component up to date. - * - * @param fc the file chooser. - * - * @return The listener. - * - * @see #installListeners(JFileChooser) - */ - public ListSelectionListener createListSelectionListener(JFileChooser fc) - { - return new MetalFileChooserSelectionListener(); - } - - /** - * Returns the preferred size for the file chooser component. - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension tp = topPanel.getPreferredSize(); - Dimension bp = bottomPanel.getPreferredSize(); - Dimension fl = fileListPanel.getPreferredSize(); - return new Dimension(fl.width, tp.height + bp.height + fl.height); - } - - /** - * Returns the minimum size for the file chooser component. - * - * @return The minimum size. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension tp = topPanel.getMinimumSize(); - Dimension bp = bottomPanel.getMinimumSize(); - Dimension fl = fileListPanel.getMinimumSize(); - return new Dimension(fl.width, tp.height + bp.height + fl.height); - } - - /** - * Returns the maximum size for the file chooser component. - * - * @return The maximum size. - */ - public Dimension getMaximumSize(JComponent c) - { - return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - - /** - * Creates a property change listener that monitors the {@link JFileChooser} - * for property change events and updates the component display accordingly. - * - * @param fc the file chooser. - * - * @return The property change listener. - * - * @see #installListeners(JFileChooser) - */ - public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) - { - return new MetalFileChooserPropertyChangeListener(); - } - - /** - * Creates and returns a new instance of {@link DirectoryComboBoxModel}. - * - * @return A new instance of {@link DirectoryComboBoxModel}. - */ - protected MetalFileChooserUI.DirectoryComboBoxModel - createDirectoryComboBoxModel(JFileChooser fc) - { - return new DirectoryComboBoxModel(); - } - - /** - * Creates a new instance of the renderer used in the directory - * combo box. - * - * @param fc the file chooser. - * - * @return The renderer. - */ - protected DirectoryComboBoxRenderer createDirectoryComboBoxRenderer( - JFileChooser fc) - { - return new DirectoryComboBoxRenderer(fc); - } - - /** - * Creates and returns a new instance of {@link FilterComboBoxModel}. - * - * @return A new instance of {@link FilterComboBoxModel}. - */ - protected FilterComboBoxModel createFilterComboBoxModel() - { - return new FilterComboBoxModel(); - } - - /** - * Creates and returns a new instance of {@link FilterComboBoxRenderer}. - * - * @return A new instance of {@link FilterComboBoxRenderer}. - */ - protected MetalFileChooserUI.FilterComboBoxRenderer - createFilterComboBoxRenderer() - { - return new FilterComboBoxRenderer(); - } - - /** - * Adds the control buttons ('up', 'home' etc.) to the panel. - */ - protected void addControlButtons() - { - JButton upButton = new JButton(getChangeToParentDirectoryAction()); - upButton.setText(null); - upButton.setIcon(this.upFolderIcon); - upButton.setMargin(new Insets(0, 0, 0, 0)); - controls.add(upButton); - - JButton homeButton = new JButton(getGoHomeAction()); - homeButton.setText(null); - homeButton.setIcon(this.homeFolderIcon); - homeButton.setMargin(new Insets(0, 0, 0, 0)); - controls.add(homeButton); - - JButton newFolderButton = new JButton(getNewFolderAction()); - newFolderButton.setText(null); - newFolderButton.setIcon(this.newFolderIcon); - newFolderButton.setMargin(new Insets(0, 0, 0, 0)); - controls.add(newFolderButton); - - JToggleButton listButton = new JToggleButton(this.listViewIcon); - listButton.setMargin(new Insets(0, 0, 0, 0)); - listButton.addActionListener(new ListViewActionListener()); - listButton.setSelected(true); - listView = true; - controls.add(listButton); - - JToggleButton detailButton = new JToggleButton(this.detailsViewIcon); - detailButton.setMargin(new Insets(0, 0, 0, 0)); - detailButton.addActionListener(new DetailViewActionListener()); - detailButton.setSelected(false); - controls.add(detailButton); - - ButtonGroup buttonGroup = new ButtonGroup(); - buttonGroup.add(listButton); - buttonGroup.add(detailButton); - } - - /** - * Removes all the buttons from the control panel. - */ - protected void removeControlButtons() - { - controls.removeAll(); - controls.revalidate(); - controls.repaint(); - } - - /** - * Updates the current directory. - * - * @param fc the file chooser to update. - */ - public void rescanCurrentDirectory(JFileChooser fc) - { - directoryModel.setSelectedItem(fc.getCurrentDirectory()); - getModel().validateFileCache(); - if (!listView) - updateTable(); - else - createList(fc); - } - - /** - * Returns the file name in the text field. - * - * @return The file name. - */ - public String getFileName() - { - String result = null; - if (fileTextField != null) - result = fileTextField.getText(); - return result; - } - - /** - * Sets the file name in the text field. - * - * @param filename the file name. - */ - public void setFileName(String filename) - { - fileTextField.setText(filename); - } - - /** - * DOCUMENT ME!! - * - * @param e - DOCUMENT ME! - */ - public void valueChanged(ListSelectionEvent e) - { - // FIXME: Not sure what we should be doing here, if anything. - } - - /** - * Returns the approve button. - * - * @return The approve button. - */ - protected JButton getApproveButton(JFileChooser fc) - { - return approveButton; - } - - /** - * A layout manager that is used to arrange the subcomponents of the - * {@link JFileChooser}. - */ - class VerticalMidLayout implements LayoutManager - { - /** - * Performs the layout. - * - * @param parent the container. - */ - public void layoutContainer(Container parent) - { - int count = parent.getComponentCount(); - if (count > 0) - { - Insets insets = parent.getInsets(); - Component c = parent.getComponent(0); - Dimension prefSize = c.getPreferredSize(); - int h = parent.getHeight() - insets.top - insets.bottom; - int adj = Math.max(0, (h - prefSize.height) / 2); - c.setBounds(insets.left, insets.top + adj, parent.getWidth() - - insets.left - insets.right, - (int) Math.min(prefSize.getHeight(), h)); - } - } - - /** - * Returns the minimum layout size. - * - * @param parent the container. - * - * @return The minimum layout size. - */ - public Dimension minimumLayoutSize(Container parent) - { - return preferredLayoutSize(parent); - } - - /** - * Returns the preferred layout size. - * - * @param parent the container. - * - * @return The preferred layout size. - */ - public Dimension preferredLayoutSize(Container parent) - { - if (parent.getComponentCount() > 0) - { - return parent.getComponent(0).getPreferredSize(); - } - else return null; - } - - /** - * This layout manager does not need to track components, so this - * method does nothing. - * - * @param name the name the component is associated with. - * @param component the component. - */ - public void addLayoutComponent(String name, Component component) - { - // do nothing - } - - /** - * This layout manager does not need to track components, so this - * method does nothing. - * - * @param component the component. - */ - public void removeLayoutComponent(Component component) - { - // do nothing - } - } - - /** - * A layout manager that is used to arrange buttons for the - * {@link JFileChooser}. - */ - class ButtonLayout implements LayoutManager - { - static final int GAP = 4; - - /** - * Performs the layout. - * - * @param parent the container. - */ - public void layoutContainer(Container parent) - { - int count = parent.getComponentCount(); - if (count > 0) - { - // first find the widest button - int maxW = 0; - for (int i = 0; i < count; i++) - { - Component c = parent.getComponent(i); - Dimension prefSize = c.getPreferredSize(); - maxW = Math.max(prefSize.width, maxW); - } - - // then position the buttons - Insets insets = parent.getInsets(); - int availableH = parent.getHeight() - insets.top - insets.bottom; - int currentX = parent.getWidth() - insets.right; - for (int i = count - 1; i >= 0; i--) - { - Component c = parent.getComponent(i); - Dimension prefSize = c.getPreferredSize(); - int adj = Math.max(0, (availableH - prefSize.height) / 2); - currentX = currentX - prefSize.width; - c.setBounds(currentX, insets.top + adj, prefSize.width, - (int) Math.min(prefSize.getHeight(), availableH)); - currentX = currentX - GAP; - } - } - } - - /** - * Returns the minimum layout size. - * - * @param parent the container. - * - * @return The minimum layout size. - */ - public Dimension minimumLayoutSize(Container parent) - { - return preferredLayoutSize(parent); - } - - /** - * Returns the preferred layout size. - * - * @param parent the container. - * - * @return The preferred layout size. - */ - public Dimension preferredLayoutSize(Container parent) - { - Insets insets = parent.getInsets(); - int maxW = 0; - int maxH = 0; - int count = parent.getComponentCount(); - if (count > 0) - { - for (int i = 0; i < count; i++) - { - Component c = parent.getComponent(i); - Dimension d = c.getPreferredSize(); - maxW = Math.max(d.width, maxW); - maxH = Math.max(d.height, maxH); - } - } - return new Dimension(maxW * count + GAP * (count - 1) + insets.left - + insets.right, maxH + insets.top + insets.bottom); - } - - /** - * This layout manager does not need to track components, so this - * method does nothing. - * - * @param name the name the component is associated with. - * @param component the component. - */ - public void addLayoutComponent(String name, Component component) - { - // do nothing - } - - /** - * This layout manager does not need to track components, so this - * method does nothing. - * - * @param component the component. - */ - public void removeLayoutComponent(Component component) - { - // do nothing - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java b/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java deleted file mode 100644 index 5382577..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalIconFactory.java +++ /dev/null @@ -1,2626 +0,0 @@ -/* MetalIconFactory.java -- - Copyright (C) 2005, 2006, 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.io.Serializable; - -import javax.swing.AbstractButton; -import javax.swing.Icon; -import javax.swing.JCheckBox; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JFileChooser; -import javax.swing.JInternalFrame; -import javax.swing.JRadioButton; -import javax.swing.JRadioButtonMenuItem; -import javax.swing.JSlider; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.plaf.UIResource; - - -/** - * Creates icons for the {@link MetalLookAndFeel}. - */ -public class MetalIconFactory implements Serializable -{ - - /** A constant representing "dark". */ - public static final boolean DARK = false; - - /** A constant representing "light". */ - public static final boolean LIGHT = true; - - /** A shared instance of the MenuArrowIcon. */ - private static Icon menuArrow; - - /** A shared instance of the MenuItemArrowIcon. */ - private static Icon menuItemArrow; - - /** - * An icon displayed for {@link JCheckBoxMenuItem} components. - */ - private static class CheckBoxMenuItemIcon - implements Icon, UIResource, Serializable - { - /** - * Creates a new icon instance. - */ - public CheckBoxMenuItemIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon (10 pixels). - */ - public int getIconWidth() - { - return 10; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon (10 pixels). - */ - public int getIconHeight() - { - return 10; - } - - /** - * Paints the icon. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - JCheckBoxMenuItem item = (JCheckBoxMenuItem) c; - - if (item.isArmed()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x, y, x + 8, y); - g.drawLine(x, y + 1, x, y + 8); - g.drawLine(x + 2, y + 8, x + 8, y + 8); - g.drawLine(x + 8, y + 2, x + 8, y + 7); - - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 1, y + 1, x + 7, y + 1); - g.drawLine(x + 1, y + 2, x + 1, y + 7); - g.drawLine(x + 1, y + 9, x + 9, y + 9); - g.drawLine(x + 9, y + 1, x + 9, y + 8); - - // if the item is selected, we should draw a tick - if (item.isSelected()) - { - g.setColor(MetalLookAndFeel.getBlack()); - g.fillRect(x + 2, y + 2, 2, 5); - for (int i = 0; i < 6; i++) - g.drawLine(x + 8 - i, y + i, x + 9 - i, y + i); - } - - } - } - - /** - * An icon used for the "detail view" button on a {@link JFileChooser} under - * the {@link MetalLookAndFeel}. - * - * @see MetalIconFactory#getFileChooserDetailViewIcon() - */ - private static class FileChooserDetailViewIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new icon. - */ - public FileChooserDetailViewIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 18; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 18; - } - - /** - * Paints the icon using colors from the {@link MetalLookAndFeel}. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - g.setColor(MetalLookAndFeel.getBlack()); - - // file 1 outline - g.drawLine(x + 2, y + 2, x + 5, y + 2); - g.drawLine(x + 6, y + 3, x + 6, y + 7); - g.drawLine(x + 2, y + 7, x + 6, y + 7); - g.drawLine(x + 2, y + 2, x + 2, y + 7); - - // file 2 outline - g.drawLine(x + 2, y + 10, x + 5, y + 10); - g.drawLine(x + 6, y + 11, x + 6, y + 15); - g.drawLine(x + 2, y + 15, x + 6, y + 15); - g.drawLine(x + 2, y + 10, x + 2, y + 15); - - // detail lines - g.drawLine(x + 8, y + 5, x + 15, y + 5); - g.drawLine(x + 8, y + 13, x + 15, y + 13); - - // fill files - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 3, y + 3, 3, 4); - g.fillRect(x + 3, y + 11, 3, 4); - - // highlight files - g.setColor(MetalLookAndFeel.getPrimaryControlHighlight()); - g.drawLine(x + 4, y + 4, x + 4, y + 5); - g.drawLine(x + 4, y + 12, x + 4, y + 13); - - g.setColor(savedColor); - } - } - - /** - * An icon used for the "home folder" button on a {@link JFileChooser} under - * the {@link MetalLookAndFeel}. - * - * @see MetalIconFactory#getFileChooserHomeFolderIcon() - */ - private static class FileChooserHomeFolderIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new icon. - */ - public FileChooserHomeFolderIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 18; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 18; - } - - /** - * Paints the icon using colors from the {@link MetalLookAndFeel}. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - g.setColor(MetalLookAndFeel.getBlack()); - - // roof - g.drawLine(x + 1, y + 8, x + 8, y + 1); - g.drawLine(x + 8, y + 1, x + 15, y + 8); - - // base of house - g.drawLine(x + 3, y + 6, x + 3, y + 15); - g.drawLine(x + 3, y + 15, x + 13, y + 15); - g.drawLine(x + 13, y + 6, x + 13, y + 15); - - // door frame - g.drawLine(x + 6, y + 9, x + 6, y + 15); - g.drawLine(x + 6, y + 9, x + 10, y + 9); - g.drawLine(x + 10, y + 9, x + 10, y + 15); - - // chimney - g.drawLine(x + 11, y + 2, x + 11, y + 4); - g.drawLine(x + 12, y + 2, x + 12, y + 5); - - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - - // roof paint - int xx = x + 8; - for (int i = 0; i < 4; i++) - g.drawLine(xx - i, y + 2 + i, xx + i, y + 2 + i); - g.fillRect(x + 4, y + 6, 9, 2); - - // door knob - g.drawLine(x + 9, y + 12, x + 9, y + 12); - - // house paint - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.drawLine(x + 4, y + 8, x + 12, y + 8); - g.fillRect(x + 4, y + 9, 2, 6); - g.fillRect(x + 11, y + 9, 2, 6); - - g.setColor(savedColor); - } - } - - /** - * An icon used for the "list view" button on a {@link JFileChooser} under - * the {@link MetalLookAndFeel}. - * - * @see MetalIconFactory#getFileChooserListViewIcon() - */ - private static class FileChooserListViewIcon - implements Icon, UIResource, Serializable - { - /** - * Creates a new icon. - */ - public FileChooserListViewIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 18; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 18; - } - - /** - * Paints the icon using colors from the {@link MetalLookAndFeel}. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - g.setColor(MetalLookAndFeel.getBlack()); - - // file 1 outline - g.drawLine(x + 2, y + 2, x + 5, y + 2); - g.drawLine(x + 6, y + 3, x + 6, y + 7); - g.drawLine(x + 2, y + 7, x + 6, y + 7); - g.drawLine(x + 2, y + 2, x + 2, y + 7); - - // file 2 outline - g.drawLine(x + 2, y + 10, x + 5, y + 10); - g.drawLine(x + 6, y + 11, x + 6, y + 15); - g.drawLine(x + 2, y + 15, x + 6, y + 15); - g.drawLine(x + 2, y + 10, x + 2, y + 15); - - // file 3 outline - g.drawLine(x + 10, y + 2, x + 13, y + 2); - g.drawLine(x + 14, y + 3, x + 14, y + 7); - g.drawLine(x + 10, y + 7, x + 14, y + 7); - g.drawLine(x + 10, y + 2, x + 10, y + 7); - - // file 4 outline - g.drawLine(x + 10, y + 10, x + 13, y + 10); - g.drawLine(x + 14, y + 11, x + 14, y + 15); - g.drawLine(x + 10, y + 15, x + 14, y + 15); - g.drawLine(x + 10, y + 10, x + 10, y + 15); - - g.drawLine(x + 8, y + 5, x + 8, y + 5); - g.drawLine(x + 8, y + 13, x + 8, y + 13); - g.drawLine(x + 16, y + 5, x + 16, y + 5); - g.drawLine(x + 16, y + 13, x + 16, y + 13); - - // fill files - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 3, y + 3, 3, 4); - g.fillRect(x + 3, y + 11, 3, 4); - g.fillRect(x + 11, y + 3, 3, 4); - g.fillRect(x + 11, y + 11, 3, 4); - - // highlight files - g.setColor(MetalLookAndFeel.getPrimaryControlHighlight()); - g.drawLine(x + 4, y + 4, x + 4, y + 5); - g.drawLine(x + 4, y + 12, x + 4, y + 13); - g.drawLine(x + 12, y + 4, x + 12, y + 5); - g.drawLine(x + 12, y + 12, x + 12, y + 13); - - g.setColor(savedColor); - } - } - - /** - * An icon used for the "new folder" button on a {@link JFileChooser} under - * the {@link MetalLookAndFeel}. - * - * @see MetalIconFactory#getFileChooserNewFolderIcon() - */ - private static class FileChooserNewFolderIcon - implements Icon, UIResource, Serializable - { - /** - * Creates a new icon. - */ - public FileChooserNewFolderIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 18; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 18; - } - - /** - * Paints the icon using colors from the {@link MetalLookAndFeel}. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - g.setColor(MetalLookAndFeel.getBlack()); - - g.drawLine(x + 2, y + 5, x + 9, y + 5); - g.drawLine(x + 10, y + 6, x + 15, y + 6); - g.drawLine(x + 15, y + 5, x + 15, y + 14); - g.drawLine(x + 2, y + 14, x + 15, y + 14); - g.drawLine(x + 1, y + 6, x + 1, y + 14); - - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - g.drawLine(x + 11, y + 3, x + 15, y + 3); - g.drawLine(x + 10, y + 4, x + 15, y + 4); - - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 3, y + 7, 7, 7); - g.fillRect(x + 10, y + 8, 5, 6); - g.drawLine(x + 10, y + 5, x + 14, y + 5); - - g.setColor(MetalLookAndFeel.getPrimaryControlHighlight()); - g.drawLine(x + 10, y + 7, x + 14, y + 7); - g.drawLine(x + 2, y + 6, x + 9, y + 6); - g.drawLine(x + 2, y + 6, x + 2, y + 13); - g.setColor(savedColor); - } - } - - /** - * An icon used for the "up folder" button on a {@link JFileChooser} under - * the {@link MetalLookAndFeel}. - * - * @see MetalIconFactory#getFileChooserNewFolderIcon() - */ - private static class FileChooserUpFolderIcon extends FileChooserNewFolderIcon - { - /** - * Creates a new icon. - */ - public FileChooserUpFolderIcon() - { - // Nothing to do here. - } - - /** - * Paints the icon using colors from the {@link MetalLookAndFeel}. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - - // draw the folder - super.paintIcon(c, g, x, y); - - // now draw the up arrow - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 8, y + 9, x + 8, y + 16); - int xx = x + 8; - for (int i = 0; i < 4; i++) - g.drawLine(xx - i, y + 9 + i, xx + i, y + 9 + i); - g.setColor(savedColor); - } - } - - /** - * An icon representing a file (drawn as a piece of paper with the top-right - * corner turned down). - */ - public static class FileIcon16 implements Icon, Serializable - { - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. The height returned is - * <code>16</code> plus the value returned by - * {@link #getAdditionalHeight()}. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 16 + getAdditionalHeight(); - } - - /** - * Paints the icon at the location (x, y). - * - * @param c the component. - * @param g the graphics context. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - y = y + getShift(); - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x, y, x + 9, y); - g.drawLine(x, y + 1, x, y + 15); - g.drawLine(x, y + 15, x + 12, y + 15); - g.drawLine(x + 12, y + 15, x + 12, y + 6); - g.drawLine(x + 12, y + 6, x + 9, y); - - g.drawLine(x + 7, y + 2, x + 11, y + 6); - g.drawLine(x + 8, y + 1, x + 9, y + 1); - - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.drawLine(x + 1, y + 1, x + 7, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + 14); - g.drawLine(x + 1, y + 14, x + 11, y + 14); - g.drawLine(x + 11, y + 14, x + 11, y + 7); - g.drawLine(x + 8, y + 2, x + 10, y + 4); - } - - /** - * Returns the additional height for the icon. The - * {@link #getIconHeight()} method adds this value to the icon height it - * returns. Subclasses can override this method to adjust the icon height. - * - * @return The additional height (<code>0</code> unless overridden). - */ - public int getAdditionalHeight() - { - return 0; - } - - /** - * Returns the vertical shift, in pixels, applied when painting the icon. - * The default value is zero, but subclasses may override this (for - * example, see {@link TreeLeafIcon}). - * - * @return The shift. - */ - public int getShift() - { - return 0; - } - - } - - /** - * An icon representing a folder. - */ - public static class FolderIcon16 implements Icon, Serializable - { - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. The height returned is - * <code>16</code> plus the value returned by - * {@link #getAdditionalHeight()}. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 16 + getAdditionalHeight(); - } - - /** - * Paints the icon at the location (x, y). - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - y = y + getShift(); - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x, y + 6, x, y + 15); - g.drawLine(x, y + 15, x + 15, y + 15); - g.drawLine(x + 15, y + 15, x + 15, y + 5); - g.drawLine(x + 14, y + 6, x + 9, y + 6); - g.drawLine(x + 8, y + 5, x + 1, y + 5); - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 2, y + 7, 7, 8); - g.fillRect(x + 9, y + 8, 6, 7); - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - g.drawLine(x + 9, y + 5, x + 14, y + 5); - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - g.drawLine(x + 9, y + 4, x + 15, y + 4); - g.drawLine(x + 10, y + 3, x + 15, y + 3); - } - - /** - * Returns the additional height for the icon. The - * {@link #getIconHeight()} method adds this value to the icon height it - * returns. Subclasses can override this method to adjust the icon height. - * - * @return The additional height (<code>0</code> unless overridden). - */ - public int getAdditionalHeight() - { - return 0; - } - - /** - * Returns the vertical shift, in pixels, applied when painting the icon. - * The default value is zero, but subclasses may override this (for - * example, see {@link TreeFolderIcon}). - * - * @return The shift. - */ - public int getShift() - { - return 0; - } - - } - - /** - * An icon used by the {@link MetalInternalFrameUI} class when the frame - * is displayed as a palette. - * - * @since 1.3 - */ - public static class PaletteCloseIcon - implements Icon, Serializable, UIResource - { - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 7; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 7; - } - - /** - * Paints the icon using colors from the {@link MetalLookAndFeel}. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - AbstractButton button = (AbstractButton) c; - if (button.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.fillRect(x + 2, y + 2, 3, 3); - g.drawLine(x + 1, y, x + 1, y + 2); - g.drawLine(x, y + 1, x + 2, y + 1); - g.drawLine(x + 5, y, x + 5, y + 2); - g.drawLine(x + 4, y + 1, x + 6, y + 1); - g.drawLine(x + 1, y + 4, x + 1, y + 6); - g.drawLine(x, y + 5, x + 2, y + 5); - g.drawLine(x + 5, y + 4, x + 5, y + 6); - g.drawLine(x + 4, y + 5, x + 6, y + 5); - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(x + 2, y + 6, x + 3, y + 5); - g.drawLine(x + 5, y + 3, x + 6, y + 2); - g.drawLine(x + 6, y + 6, x + 6, y + 6); - g.setColor(savedColor); - } - } - - /** - * An {@link Icon} implementation for {@link JCheckBox}es in the - * Metal Look & Feel. - * - * @author Roman Kennke (roman@kennke.org) - */ - static class RadioButtonIcon implements Icon, UIResource, Serializable - { - - /** - * This is used as a mask when painting the gradient. See - * {@link MetalUtils#paintGradient(java.awt.Graphics, int, int, int, int, - * float, float, java.awt.Color, java.awt.Color, java.awt.Color, int, - * int[][])} for details. - */ - private static int[][] gradientMask = new int[][] {{3, 7}, {1, 9}, {1, 9}, - {0, 10}, {0, 10}, {0, 10}, - {0, 10}, {1, 9}, {1, 9}, - {3, 7}}; - - /** - * Returns the width of the icon in pixels. - * - * @return the width of the icon in pixels - */ - public int getIconWidth() - { - return 13; - } - - /** - * Returns the height of the icon in pixels. - * - * @return the height of the icon in pixels - */ - public int getIconHeight() - { - return 13; - } - - /** - * Paints the icon, taking into account whether or not the component is - * enabled, selected and/or armed. - * - * @param c the Component to draw on (must be an instance of - * {@link JRadioButton}) - * @param g the Graphics context to draw with - * @param x the X position - * @param y the Y position - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - if (UIManager.get("RadioButton.gradient") != null) - MetalUtils.paintGradient(g, x + 2, y + 2, 8, 8, - SwingConstants.VERTICAL, "RadioButton.gradient", - gradientMask); - - Color savedColor = g.getColor(); - JRadioButton b = (JRadioButton) c; - - // draw outer circle - if (b.isEnabled()) - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(x + 2, y + 1, x + 3, y + 1); - g.drawLine(x + 4, y, x + 7, y); - g.drawLine(x + 8, y + 1, x + 9, y + 1); - g.drawLine(x + 10, y + 2, x + 10, y + 3); - g.drawLine(x + 11, y + 4, x + 11, y + 7); - g.drawLine(x + 10, y + 8, x + 10, y + 9); - g.drawLine(x + 8, y + 10, x + 9, y + 10); - g.drawLine(x + 4, y + 11, x + 7, y + 11); - g.drawLine(x + 2, y + 10, x + 3, y + 10); - g.drawLine(x + 1, y + 9, x + 1, y + 8); - g.drawLine(x, y + 7, x, y + 4); - g.drawLine(x + 1, y + 2, x + 1, y + 3); - - if (b.getModel().isArmed()) - { - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x + 4, y + 1, x + 7, y + 1); - g.drawLine(x + 4, y + 10, x + 7, y + 10); - g.drawLine(x + 1, y + 4, x + 1, y + 7); - g.drawLine(x + 10, y + 4, x + 10, y + 7); - g.fillRect(x + 2, y + 2, 8, 8); - } - else - { - // only draw inner highlight if not filled - if (b.isEnabled()) - { - g.setColor(MetalLookAndFeel.getWhite()); - - g.drawLine(x + 2, y + 8, x + 2, y + 9); - g.drawLine(x + 1, y + 4, x + 1, y + 7); - g.drawLine(x + 2, y + 2, x + 2, y + 3); - g.drawLine(x + 3, y + 2, x + 3, y + 2); - g.drawLine(x + 4, y + 1, x + 7, y + 1); - g.drawLine(x + 8, y + 2, x + 9, y + 2); - } - } - - // draw outer highlight - if (b.isEnabled()) - { - g.setColor(MetalLookAndFeel.getWhite()); - - // outer - g.drawLine(x + 10, y + 1, x + 10, y + 1); - g.drawLine(x + 11, y + 2, x + 11, y + 3); - g.drawLine(x + 12, y + 4, x + 12, y + 7); - g.drawLine(x + 11, y + 8, x + 11, y + 9); - g.drawLine(x + 10, y + 10, x + 10, y + 10); - g.drawLine(x + 8, y + 11, x + 9, y + 11); - g.drawLine(x + 4, y + 12, x + 7, y + 12); - g.drawLine(x + 2, y + 11, x + 3, y + 11); - } - - if (b.isSelected()) - { - if (b.isEnabled()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(x + 4, y + 3, x + 7, y + 3); - g.fillRect(x + 3, y + 4, 6, 4); - g.drawLine(x + 4, y + 8, x + 7, y + 8); - } - g.setColor(savedColor); - } - } - - /** - * An icon displayed for {@link JRadioButtonMenuItem} components. - */ - private static class RadioButtonMenuItemIcon - implements Icon, UIResource, Serializable - { - /** - * Creates a new icon instance. - */ - public RadioButtonMenuItemIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 10; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 10; - } - - /** - * Paints the icon. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - JRadioButtonMenuItem item = (JRadioButtonMenuItem) c; - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 2, y, x + 6, y); - g.drawLine(x + 7, y + 1, x + 7, y + 1); - g.drawLine(x + 8, y + 2, x + 8, y + 6); - g.drawLine(x + 7, y + 7, x + 7, y + 7); - g.drawLine(x + 2, y + 8, x + 6, y + 8); - g.drawLine(x + 1, y + 7, x + 1, y + 7); - g.drawLine(x, y + 2, x, y + 6); - g.drawLine(x + 1, y + 1, x + 1, y + 1); - - if (item.isSelected()) - { - g.drawLine(x + 3, y + 2, x + 5, y + 2); - g.fillRect(x + 2, y + 3, 5, 3); - g.drawLine(x + 3, y + 6, x + 5, y + 6); - } - - // highlight - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(x + 3, y + 1, x + 6, y + 1); - g.drawLine(x + 8, y + 1, x + 8, y + 1); - g.drawLine(x + 9, y + 2, x + 9, y + 7); - g.drawLine(x + 8, y + 8, x + 8, y + 8); - g.drawLine(x + 2, y + 9, x + 7, y + 9); - g.drawLine(x + 1, y + 8, x + 1, y + 8); - g.drawLine(x + 1, y + 3, x + 1, y + 6); - g.drawLine(x + 2, y + 2, x + 2, y + 2); - g.setColor(savedColor); - } - } - - /** - * The icon used to display the thumb control on a horizontally oriented - * {@link JSlider} component. - */ - private static class HorizontalSliderThumbIcon - implements Icon, UIResource, Serializable - { - - /** - * This mask is used to paint the gradient in the shape of the thumb. - */ - int[][] gradientMask = new int[][] { {0, 12}, {0, 12}, {0, 12}, {0, 12}, - {0, 12}, {0, 12}, {0, 12}, {1, 11}, - {2, 10}, {3, 9}, {4, 8}, {5, 7}, - {6, 6}}; - - /** - * Creates a new instance. - */ - public HorizontalSliderThumbIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 15; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon, taking into account whether or not the component has - * the focus. - * - * @param c the component. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - boolean enabled = false; - boolean focus = false; - if (c != null) - { - enabled = c.isEnabled(); - focus = c.hasFocus(); - } - - // draw the outline - if (enabled) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x + 1, y, x + 13, y); - g.drawLine(x + 14, y + 1, x + 14, y + 7); - g.drawLine(x + 14, y + 8, x + 7, y + 15); - g.drawLine(x + 6, y + 14, x, y + 8); - g.drawLine(x, y + 7, x, y + 1); - -// The following is commented out until the masking for the gradient painting -// is working correctly -// // Fill the icon. -// if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme -// && enabled) -// { -// String gradient; -// if (focus) -// gradient = "Slider.focusGradient"; -// else -// gradient = "Slider.gradient"; -// MetalUtils.paintGradient(g, x + 1, y + 2, 12, 13, -// SwingConstants.VERTICAL, gradient, -// gradientMask); -// } -// else - { - if (focus) - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(x + 1, y + 2, 13, 7); - g.drawLine(x + 2, y + 9, x + 12, y + 9); - g.drawLine(x + 3, y + 10, x + 11, y + 10); - g.drawLine(x + 4, y + 11, x + 10, y + 11); - g.drawLine(x + 5, y + 12, x + 9, y + 12); - g.drawLine(x + 6, y + 13, x + 8, y + 13); - g.drawLine(x + 7, y + 14, x + 7, y + 14); - } - - // If the slider is enabled, draw dots and highlights. - if (c.isEnabled() - && !(MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)) - { - if (focus) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 3, y + 3, x + 3, y + 3); - g.drawLine(x + 7, y + 3, x + 7, y + 3); - g.drawLine(x + 11, y + 3, x + 11, y + 3); - - g.drawLine(x + 5, y + 5, x + 5, y + 5); - g.drawLine(x + 9, y + 5, x + 9, y + 5); - - g.drawLine(x + 3, y + 7, x + 3, y + 7); - g.drawLine(x + 7, y + 7, x + 7, y + 7); - g.drawLine(x + 11, y + 7, x + 11, y + 7); - - // Draw highlights - if (focus) - g.setColor(MetalLookAndFeel.getPrimaryControl()); - else - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 1, y + 1, x + 13, y + 1); - g.drawLine(x + 1, y + 2, x + 1, y + 8); - g.drawLine(x + 2, y + 2, x + 2, y + 2); - g.drawLine(x + 6, y + 2, x + 6, y + 2); - g.drawLine(x + 10, y + 2, x + 10, y + 2); - - g.drawLine(x + 4, y + 4, x + 4, y + 4); - g.drawLine(x + 8, y + 4, x + 8, y + 4); - - g.drawLine(x + 2, y + 6, x + 2, y + 6); - g.drawLine(x + 6, y + 6, x + 6, y + 6); - g.drawLine(x + 10, y + 6, x + 10, y + 6); - } - - } - } - - /** - * An icon used for the 'close' button in the title frame of a - * {@link JInternalFrame}. - */ - private static class InternalFrameCloseIcon - implements Icon, UIResource, Serializable - { - /** The icon size in pixels. */ - private int size; - - /** - * Creates a new icon. - * - * @param size the icon size (width and height) in pixels. - */ - public InternalFrameCloseIcon(int size) - { - this.size = size; - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return size; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return size; - } - - /** - * Paints the icon. - * - * @param c the component (an {@link JInternalFrame} is expected). - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - AbstractButton b = (AbstractButton) c; - - // fill the interior - if (b.getModel().isPressed()) - // FIXME: also need to take into account whether the internal frame is - // selected - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 2, y + 2, 10, 10); - - // draw the outline box and the cross - if (b.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getBlack()); - else - { - // FIXME: also need to take into account whether the internal frame is - // selected - boolean selected = true; - if (selected) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - } - g.drawLine(x + 1, y + 1, x + 13, y + 1); - g.drawLine(x + 1, y + 2, x + 1, y + 12); - g.drawLine(x + 1, y + 13, x + 13, y + 13); - g.drawLine(x + 13, y + 2, x + 13, y + 12); - g.drawLine(x + 2, y + 12, x + 2, y + 12); - g.drawLine(x + 12, y + 2, x + 12, y + 2); - - g.fillRect(x + 4, y + 4, 2, 2); - g.fillRect(x + 5, y + 5, 4, 4); - g.drawLine(x + 9, y + 4, x + 10, y + 4); - g.drawLine(x + 9, y + 4, x + 9, y + 5); - g.drawLine(x + 4, y + 9, x + 4, y + 10); - g.drawLine(x + 4, y + 9, x + 5, y + 9); - g.drawLine(x + 9, y + 8, x + 9, y + 10); - g.drawLine(x + 8, y + 9, x + 10, y + 9); - - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x, y, x + 13, y); - g.drawLine(x, y + 1, x, y + 13); - g.drawLine(x + 3, y + 4, x + 4, y + 3); - g.drawLine(x + 3, y + 9, x + 5, y + 7); - g.drawLine(x + 7, y + 5, x + 9, y + 3); - - g.drawLine(x + 12, y + 3, x + 12, y + 11); - g.drawLine(x + 3, y + 12, x + 12, y + 12); - - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 1, y + 14, x + 14, y + 14); - g.drawLine(x + 14, y + 1, x + 14, y + 14); - - if (!b.getModel().isPressed()) - { - g.drawLine(x + 5, y + 10, x + 5, y + 10); - g.drawLine(x + 6, y + 9, x + 7, y + 9); - g.drawLine(x + 10, y + 5, x + 10, y + 5); - g.drawLine(x + 9, y + 6, x + 9, y + 7); - g.drawLine(x + 10, y + 10, x + 11, y + 10); - g.drawLine(x + 10, y + 11, x + 10, y + 11); - } - g.setColor(savedColor); - } - } - - /** - * The icon displayed at the top-left corner of a {@link JInternalFrame}. - */ - private static class InternalFrameDefaultMenuIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new instance. - */ - public InternalFrameDefaultMenuIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon at the specified location. - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - g.fillRect(x + 1, y, 14, 2); - g.fillRect(x, y + 1, 2, 14); - g.fillRect(x + 1, y + 14, 14, 2); - g.fillRect(x + 14, y + 1, 2, 14); - g.drawLine(x + 2, y + 5, x + 14, y + 5); - - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 2, y + 2, 12, 3); - - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - g.drawLine(x + 3, y + 3, x + 3, y + 3); - g.drawLine(x + 6, y + 3, x + 6, y + 3); - g.drawLine(x + 9, y + 3, x + 9, y + 3); - g.drawLine(x + 12, y + 3, x + 12, y + 3); - - g.setColor(MetalLookAndFeel.getWhite()); - g.fillRect(x + 2, y + 6, 12, 8); - g.drawLine(x + 2, y + 2, x + 2, y + 2); - g.drawLine(x + 5, y + 2, x + 5, y + 2); - g.drawLine(x + 8, y + 2, x + 8, y + 2); - g.drawLine(x + 11, y + 2, x + 11, y + 2); - } - } - - /** - * An icon used in the title frame of a {@link JInternalFrame}. When you - * maximise an internal frame, this icon will replace the 'maximise' icon to - * provide a 'restore' option. - */ - private static class InternalFrameAltMaximizeIcon - implements Icon, UIResource, Serializable - { - /** The icon size in pixels. */ - private int size; - - /** - * Creates a new icon. - * - * @param size the icon size in pixels. - */ - public InternalFrameAltMaximizeIcon(int size) - { - this.size = size; - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return size; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return size; - } - - /** - * Paints the icon at the specified location. - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - - AbstractButton b = (AbstractButton) c; - - // fill the small box interior - if (b.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 2, y + 6, 7, 7); - - - if (b.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - - g.drawLine(x + 12, y + 1, x + 13, y + 1); - g.drawLine(x + 11, y + 2, x + 12, y + 2); - g.drawLine(x + 10, y + 3, x + 11, y + 3); - g.drawLine(x + 8, y + 2, x + 8, y + 3); - g.fillRect(x + 8, y + 4, 3, 3); - g.drawLine(x + 11, y + 6, x + 12, y + 6); - - g.drawLine(x + 1, y + 5, x + 5, y + 5); - g.drawLine(x + 1, y + 6, x + 1, y + 12); - g.drawLine(x + 9, y + 9, x + 9, y + 12); - g.drawLine(x + 1, y + 13, x + 9, y + 13); - - g.drawLine(x + 2, y + 12, x + 2, y + 12); - - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 12, y, x + 9, y + 3); - g.drawLine(x + 7, y + 1, x + 8, y + 1); - g.drawLine(x + 7, y + 2, x + 7, y + 6); - g.drawLine(x + 11, y + 5, x + 12, y + 5); - g.drawLine(x, y + 4, x + 5, y + 4); - g.drawLine(x, y + 5, x, y + 13); - g.drawLine(x + 3, y + 12, x + 8, y + 12); - g.drawLine(x + 8, y + 8, x + 8, y + 11); - g.drawLine(x + 9, y + 8, x + 9, y + 8); - - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 9, y + 2, x + 9, y + 2); - g.drawLine(x + 11, y + 4, x + 13, y + 2); - g.drawLine(x + 13, y + 6, x + 13, y + 6); - g.drawLine(x + 8, y + 7, x + 13, y + 7); - g.drawLine(x + 6, y + 5, x + 6, y + 5); - g.drawLine(x + 10, y + 8, x + 10, y + 13); - g.drawLine(x + 1, y + 14, x + 10, y + 14); - - if (!b.getModel().isPressed()) - { - g.drawLine(x + 2, y + 6, x + 6, y + 6); - g.drawLine(x + 2, y + 6, x + 2, y + 11); - } - - g.setColor(savedColor); - } - } - - /** - * An icon used for the 'maximize' button in the title frame of a - * {@link JInternalFrame}. - */ - private static class InternalFrameMaximizeIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new instance. - */ - public InternalFrameMaximizeIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon at the specified location. - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - - AbstractButton b = (AbstractButton) c; - - // fill the interior - if (b.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 2, y + 6, 7, 7); - - if (b.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - - g.drawLine(x + 9, y + 1, x + 10, y + 1); - g.fillRect(x + 11, y + 1, 3, 3); - g.fillRect(x + 12, y + 4, 2, 2); - g.drawLine(x + 10, y + 3, x + 10, y + 3); - g.drawLine(x + 9, y + 4, x + 10, y + 4); - g.drawLine(x + 1, y + 5, x + 9, y + 5); - g.drawLine(x + 1, y + 6, x + 1, y + 12); - g.drawLine(x + 9, y + 6, x + 9, y + 12); - g.drawLine(x + 1, y + 13, x + 9, y + 13); - - // fill - g.drawLine(x + 7, y + 6, x + 8, y + 6); - g.drawLine(x + 6, y + 7, x + 8, y + 7); - g.drawLine(x + 5, y + 8, x + 6, y + 8); - g.drawLine(x + 4, y + 9, x + 5, y + 9); - g.drawLine(x + 3, y + 10, x + 4, y + 10); - g.drawLine(x + 2, y + 11, x + 3, y + 11); - g.drawLine(x + 2, y + 12, x + 4, y + 12); - g.drawLine(x + 8, y + 8, x + 8, y + 8); - - // draw black - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 8, y, x + 13, y); - g.drawLine(x + 8, y + 1, x + 8, y + 1); - g.drawLine(x + 10, y + 2, x + 9, y + 3); - g.drawLine(x, y + 4, x + 8, y + 4); - g.drawLine(x, y + 5, x, y + 13); - - g.drawLine(x + 2, y + 10, x + 6, y + 6); - g.drawLine(x + 8, y + 9, x + 8, y + 11); - g.drawLine(x + 5, y + 12, x + 8, y + 12); - - // draw white - g.setColor(MetalLookAndFeel.getWhite()); - if (!b.getModel().isPressed()) - { - g.drawLine(x + 2, y + 6, x + 5, y + 6); - g.drawLine(x + 2, y + 7, x + 2, y + 9); - g.drawLine(x + 4, y + 11, x + 7, y + 8); - } - - g.drawLine(x + 1, y + 14, x + 10, y + 14); - g.drawLine(x + 10, y + 5, x + 10, y + 13); - - g.drawLine(x + 9, y + 2, x + 9, y + 2); - g.drawLine(x + 11, y + 4, x + 11, y + 5); - g.drawLine(x + 13, y + 6, x + 14, y + 6); - g.drawLine(x + 14, y + 1, x + 14, y + 5); - g.setColor(savedColor); - } - } - - /** - * An icon used in the title frame of a {@link JInternalFrame}. - */ - private static class InternalFrameMinimizeIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new instance. - */ - public InternalFrameMinimizeIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon at the specified location. - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color savedColor = g.getColor(); - - AbstractButton b = (AbstractButton) c; - - if (b.getModel().isPressed()) - g.setColor(MetalLookAndFeel.getBlack()); - else - // FIXME: here the color depends on whether or not the internal frame - // is selected - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - - g.drawLine(x + 12, y + 1, x + 13, y + 1); - g.drawLine(x + 11, y + 2, x + 12, y + 2); - g.drawLine(x + 10, y + 3, x + 11, y + 3); - g.drawLine(x + 8, y + 2, x + 8, y + 3); - g.fillRect(x + 8, y + 4, 3, 3); - g.drawLine(x + 11, y + 6, x + 12, y + 6); - - g.drawLine(x + 1, y + 8, x + 6, y + 8); - g.drawLine(x + 1, y + 9, x + 1, y + 12); - g.drawLine(x + 6, y + 9, x + 6, y + 12); - g.drawLine(x + 1, y + 13, x + 6, y + 13); - - g.drawLine(x + 5, y + 9, x + 5, y + 9); - g.drawLine(x + 2, y + 12, x + 2, y + 12); - - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 12, y, x + 9, y + 3); - g.drawLine(x + 7, y + 1, x + 8, y + 1); - g.drawLine(x + 7, y + 2, x + 7, y + 6); - g.drawLine(x, y + 7, x + 6, y + 7); - g.drawLine(x, y + 8, x, y + 13); - g.drawLine(x + 3, y + 12, x + 5, y + 12); - g.drawLine(x + 5, y + 10, x + 5, y + 11); - g.drawLine(x + 11, y + 5, x + 12, y + 5); - - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 9, y + 2, x + 9, y + 2); - g.drawLine(x + 11, y + 4, x + 13, y + 2); - g.drawLine(x + 13, y + 6, x + 13, y + 6); - g.drawLine(x + 8, y + 7, x + 13, y + 7); - g.drawLine(x + 7, y + 9, x + 7, y + 13); - g.drawLine(x + 1, y + 14, x + 7, y + 14); - - if (b.getModel().isPressed()) - { - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - g.fillRect(x + 2, y + 9, 3, 3); - } - else - { - g.drawLine(x + 2, y + 9, x + 4, y + 9); - g.drawLine(x + 2, y + 10, x + 2, y + 11); - } - - g.setColor(savedColor); - } - } - - /** - * The icon used to display the thumb control on a horizontally oriented - * {@link JSlider} component. - */ - private static class VerticalSliderThumbIcon - implements Icon, UIResource, Serializable - { - /** - * This mask is used to paint the gradient in the shape of the thumb. - */ - int[][] gradientMask = new int[][] { {0, 12}, {0, 12}, {0, 12}, {0, 12}, - {0, 12}, {0, 12}, {0, 12}, {1, 11}, - {2, 10}, {3, 9}, {4, 8}, {5, 7}, - {6, 6}}; - - /** - * Creates a new instance. - */ - public VerticalSliderThumbIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 15; - } - - /** - * Paints the icon taking into account whether the slider control has the - * focus or not. - * - * @param c the slider (must be a non-<code>null</code> instance of - * {@link JSlider}. - * @param g the graphics device. - * @param x the x-coordinate. - * @param y the y-coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - boolean enabled = false; - boolean focus = false; - if (c != null) - { - enabled = c.isEnabled(); - focus = c.hasFocus(); - } - - // draw the outline - if (enabled) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x + 1, y, x + 7, y); - g.drawLine(x + 8, y, x + 15, y + 7); - g.drawLine(x + 14, y + 8, x + 8, y + 14); - g.drawLine(x + 8, y + 14, x + 1, y + 14); - g.drawLine(x, y + 13, x, y + 1); - -// The following is commented out until the masking for the gradient painting -// is working correctly -// // Fill the icon. -// if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme -// && enabled) -// { -// String gradient; -// if (focus) -// gradient = "Slider.focusGradient"; -// else -// gradient = "Slider.gradient"; -// MetalUtils.paintGradient(g, x + 2, y + 1, 13, 12, -// SwingConstants.HORIZONTAL, gradient, -// gradientMask); -// } -// else - { - if (focus) - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(x + 2, y + 1, 7, 13); - g.drawLine(x + 9, y + 2, x + 9, y + 12); - g.drawLine(x + 10, y + 3, x + 10, y + 11); - g.drawLine(x + 11, y + 4, x + 11, y + 10); - g.drawLine(x + 12, y + 5, x + 12, y + 9); - g.drawLine(x + 13, y + 6, x + 13, y + 8); - g.drawLine(x + 14, y + 7, x + 14, y + 7); - } - - // if the slider is enabled, draw dots and highlights - if (enabled - && ! (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)) - { - if (focus) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 3, y + 3, x + 3, y + 3); - g.drawLine(x + 3, y + 7, x + 3, y + 7); - g.drawLine(x + 3, y + 11, x + 3, y + 11); - - g.drawLine(x + 5, y + 5, x + 5, y + 5); - g.drawLine(x + 5, y + 9, x + 5, y + 9); - - g.drawLine(x + 7, y + 3, x + 7, y + 3); - g.drawLine(x + 7, y + 7, x + 7, y + 7); - g.drawLine(x + 7, y + 11, x + 7, y + 11); - - // draw highlights - if (focus) - g.setColor(MetalLookAndFeel.getPrimaryControl()); - else - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 1, y + 1, x + 8, y + 1); - g.drawLine(x + 1, y + 2, x + 1, y + 13); - g.drawLine(x + 2, y + 2, x + 2, y + 2); - g.drawLine(x + 2, y + 6, x + 2, y + 6); - g.drawLine(x + 2, y + 10, x + 2, y + 10); - - g.drawLine(x + 4, y + 4, x + 4, y + 4); - g.drawLine(x + 4, y + 8, x + 4, y + 8); - - g.drawLine(x + 6, y + 2, x + 6, y + 2); - g.drawLine(x + 6, y + 6, x + 6, y + 6); - g.drawLine(x + 6, y + 10, x + 6, y + 10); - - } - } - } - - /** - * A tree control icon. This icon can be in one of two states: expanded and - * collapsed. - */ - public static class TreeControlIcon implements Icon, Serializable - { - - /** ???. */ - protected boolean isLight; - - /** A flag that controls whether or not the icon is collapsed. */ - private boolean collapsed; - - /** - * Creates a new icon. - * - * @param isCollapsed a flag that controls whether the icon is in the - * collapsed state or the expanded state. - */ - public TreeControlIcon(boolean isCollapsed) - { - collapsed = isCollapsed; - } - - /** - * Returns the width of the icon, in pixels. - * - * @return The width of the icon. - */ - public int getIconWidth() - { - return 18; - } - /** - * Returns the height of the icon, in pixels. - * - * @return The height of the icon. - */ - public int getIconHeight() - { - return 18; - } - - /** - * Paints the icon at the location (x, y). - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - // TODO: pick up appropriate UI colors - Color dark = new Color(99, 130, 191); - Color light = new Color(163, 184, 204); - Color white = Color.white; - - x += 8; - y += 6; - - final int w = 6; - final int wHalf = (w >> 2); - g.setColor(light); - g.drawOval(x, y, w, w); - g.setColor(dark); - g.fillOval(x + 1, y + 1, w - 1, w - 1); - - if (collapsed) - g.fillRect(x + w, y + wHalf + 1, w, 2); - else - g.fillRect(x + wHalf + 1, y + w, 2, w); - - g.setColor(white); - g.fillRect(x + wHalf + 1, y + wHalf + 1, 2, 2); - - } - - /** - * Simply calls {@link #paintIcon(Component, Graphics, int, int)}. - * - * @param c the component. - * @param g the graphics device. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void paintMe(Component c, Graphics g, int x, int y) - { - paintIcon(c, g, x, y); - } - } - - /** - * A tree folder icon. - */ - public static class TreeFolderIcon extends FolderIcon16 - { - /** - * Creates a new instance. - */ - public TreeFolderIcon() - { - // Nothing to do here. - } - - /** - * Returns the additional height for this icon, in this case <code>2</code> - * pixels. - * - * @return <code>2</code>. - */ - public int getAdditionalHeight() - { - return 2; - } - - /** - * Returns the vertical shift, in pixels, applied when painting the icon. - * This overridden method returns <code>-1</code>. - * - * @return The shift. - */ - public int getShift() - { - return -1; - } - } - - /** - * A tree leaf icon. - */ - public static class TreeLeafIcon extends FileIcon16 - { - /** - * Creates a new instance. - */ - public TreeLeafIcon() - { - // Nothing to do here. - } - - /** - * Returns the additional height for this icon, in this case <code>4</code> - * pixels. - * - * @return <code>4</code>. - */ - public int getAdditionalHeight() - { - return 4; - } - - /** - * Returns the vertical shift, in pixels, applied when painting the icon. - * This overridden method returns <code>2</code>. - * - * @return The shift. - */ - public int getShift() - { - return 2; - } - } - - /** - * An icon representing a hard disk. - * - * @see MetalIconFactory#getTreeHardDriveIcon() - */ - private static class TreeHardDriveIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new icon instance. - */ - public TreeHardDriveIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return <code>16</code>. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return <code>16</code>. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon at the specified location, using colors from the - * current theme. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 1, y + 4, x + 1, y + 5); - g.drawLine(x + 14, y + 4, x + 14, y + 5); - g.drawLine(x + 1, y + 7, x + 1, y + 8); - g.drawLine(x + 14, y + 7, x + 14, y + 8); - g.drawLine(x + 1, y + 10, x + 1, y + 11); - g.drawLine(x + 14, y + 10, x + 14, y + 11); - - g.drawLine(x + 2, y + 3, x + 3, y + 3); - g.drawLine(x + 12, y + 3, x + 13, y + 3); - g.drawLine(x + 2, y + 6, x + 3, y + 6); - g.drawLine(x + 12, y + 6, x + 13, y + 6); - g.drawLine(x + 2, y + 9, x + 3, y + 9); - g.drawLine(x + 12, y + 9, x + 13, y + 9); - g.drawLine(x + 2, y + 12, x + 3, y + 12); - g.drawLine(x + 12, y + 12, x + 13, y + 12); - - g.drawLine(x + 4, y + 2, x + 11, y + 2); - g.drawLine(x + 4, y + 7, x + 11, y + 7); - g.drawLine(x + 4, y + 10, x + 11, y + 10); - g.drawLine(x + 4, y + 13, x + 11, y + 13); - - g.setColor(MetalLookAndFeel.getWhite()); - g.fillRect(x + 4, y + 3, 2, 2); - g.drawLine(x + 6, y + 4, x + 6, y + 4); - g.drawLine(x + 7, y + 3, x + 9, y + 3); - g.drawLine(x + 8, y + 4, x + 8, y + 4); - g.drawLine(x + 11, y + 3, x + 11, y + 3); - g.fillRect(x + 2, y + 4, 2, 2); - g.fillRect(x + 2, y + 7, 2, 2); - g.fillRect(x + 2, y + 10, 2, 2); - g.drawLine(x + 4, y + 6, x + 4, y + 6); - g.drawLine(x + 4, y + 9, x + 4, y + 9); - g.drawLine(x + 4, y + 12, x + 4, y + 12); - - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x + 13, y + 4, x + 13, y + 4); - g.drawLine(x + 12, y + 5, x + 13, y + 5); - g.drawLine(x + 13, y + 7, x + 13, y + 7); - g.drawLine(x + 12, y + 8, x + 13, y + 8); - g.drawLine(x + 13, y + 10, x + 13, y + 10); - g.drawLine(x + 12, y + 11, x + 13, y + 11); - - g.drawLine(x + 10, y + 5, x + 10, y + 5); - g.drawLine(x + 7, y + 6, x + 7, y + 6); - g.drawLine(x + 9, y + 6, x + 9, y + 6); - g.drawLine(x + 11, y + 6, x + 11, y + 6); - - g.drawLine(x + 10, y + 8, x + 10, y + 8); - g.drawLine(x + 7, y + 9, x + 7, y + 9); - g.drawLine(x + 9, y + 9, x + 9, y + 9); - g.drawLine(x + 11, y + 9, x + 11, y + 9); - - g.drawLine(x + 10, y + 11, x + 10, y + 11); - g.drawLine(x + 7, y + 12, x + 7, y + 12); - g.drawLine(x + 9, y + 12, x + 9, y + 12); - g.drawLine(x + 11, y + 12, x + 11, y + 12); - - g.setColor(saved); - } - } - - /** - * An icon representing a floppy disk. - * - * @see MetalIconFactory#getTreeFloppyDriveIcon() - */ - private static class TreeFloppyDriveIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new icon instance. - */ - public TreeFloppyDriveIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return <code>16</code>. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return <code>16</code>. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon at the specified location, using colors from the - * current theme. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 1, y + 1, x + 13, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + 14); - g.drawLine(x + 1, y + 14, x + 14, y + 14); - g.drawLine(x + 14, y + 2, x + 14, y + 14); - - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 2, y + 2, 12, 12); - - g.setColor(MetalLookAndFeel.getControlShadow()); - g.fillRect(x + 5, y + 2, 6, 5); - g.drawLine(x + 4, y + 8, x + 11, y + 8); - g.drawLine(x + 3, y + 9, x + 3, y + 13); - g.drawLine(x + 12, y + 9, x + 12, y + 13); - - g.setColor(MetalLookAndFeel.getWhite()); - g.fillRect(x + 8, y + 3, 2, 3); - g.fillRect(x + 4, y + 9, 8, 5); - - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - g.drawLine(x + 5, y + 10, x + 9, y + 10); - g.drawLine(x + 5, y + 12, x + 8, y + 12); - - g.setColor(saved); - } - } - - /** - * An icon representing a computer. - * - * @see MetalIconFactory#getTreeComputerIcon() - */ - private static class TreeComputerIcon - implements Icon, UIResource, Serializable - { - - /** - * Creates a new icon instance. - */ - public TreeComputerIcon() - { - // Nothing to do here. - } - - /** - * Returns the width of the icon, in pixels. - * - * @return <code>16</code>. - */ - public int getIconWidth() - { - return 16; - } - - /** - * Returns the height of the icon, in pixels. - * - * @return <code>16</code>. - */ - public int getIconHeight() - { - return 16; - } - - /** - * Paints the icon at the specified location, using colors from the - * current theme. - * - * @param c the component (ignored). - * @param g the graphics device. - * @param x the x-coordinate for the top-left of the icon. - * @param y the y-coordinate for the top-left of the icon. - */ - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 3, y + 1, x + 12, y + 1); - g.drawLine(x + 2, y + 2, x + 2, y + 8); - g.drawLine(x + 13, y + 2, x + 13, y + 8); - g.drawLine(x + 3, y + 9, x + 3, y + 9); - g.drawLine(x + 12, y + 9, x + 12, y + 9); - g.drawRect(x + 1, y + 10, 13, 4); - g.drawLine(x + 5, y + 3, x + 10, y + 3); - g.drawLine(x + 5, y + 8, x + 10, y + 8); - g.drawLine(x + 4, y + 4, x + 4, y + 7); - g.drawLine(x + 11, y + 4, x + 11, y + 7); - - g.setColor(MetalLookAndFeel.getPrimaryControl()); - g.fillRect(x + 5, y + 4, 6, 4); - - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x + 6, y + 12, x + 8, y + 12); - g.drawLine(x + 10, y + 12, x + 12, y + 12); - g.setColor(saved); - } - } - - /** The icon returned by {@link #getCheckBoxIcon()}. */ - private static Icon checkBoxIcon; - - /** The icon returned by {@link #getCheckBoxMenuItemIcon()}. */ - private static Icon checkBoxMenuItemIcon; - - /** The icon returned by {@link #getFileChooserDetailViewIcon()}. */ - private static Icon fileChooserDetailViewIcon; - - /** The icon returned by {@link #getFileChooserHomeFolderIcon()}. */ - private static Icon fileChooserHomeFolderIcon; - - /** The icon returned by {@link #getFileChooserListViewIcon()}. */ - private static Icon fileChooserListViewIcon; - - /** The icon returned by {@link #getFileChooserNewFolderIcon()}. */ - private static Icon fileChooserNewFolderIcon; - - /** The icon returned by {@link #getFileChooserUpFolderIcon()}. */ - private static Icon fileChooserUpFolderIcon; - - /** The cached RadioButtonIcon instance. */ - private static RadioButtonIcon radioButtonIcon; - - /** The icon returned by {@link #getRadioButtonMenuItemIcon()}. */ - private static Icon radioButtonMenuItemIcon; - - /** The icon returned by {@link #getInternalFrameDefaultMenuIcon()}. */ - private static Icon internalFrameDefaultMenuIcon; - - /** The icon returned by {@link #getTreeComputerIcon()}. */ - private static Icon treeComputerIcon; - - /** The icon instance returned by {@link #getTreeFloppyDriveIcon()}. */ - private static Icon treeFloppyDriveIcon; - - /** The icon instance returned by {@link #getTreeHardDriveIcon()}. */ - private static Icon treeHardDriveIcon; - - /** The icon instance returned by {@link #getHorizontalSliderThumbIcon()}. */ - private static Icon horizontalSliderThumbIcon; - - /** The icon instance returned by {@link #getVerticalSliderThumbIcon()}. */ - private static Icon verticalSliderThumbIcon; - - /** - * Creates a new instance. All the methods are static, so creating an - * instance isn't necessary. - */ - public MetalIconFactory() - { - // Nothing to do here. - } - - /** - * Returns an icon for use when rendering the {@link JCheckBox} component. - * - * @return A check box icon. - * - * @since 1.3 - */ - public static Icon getCheckBoxIcon() - { - if (checkBoxIcon == null) - checkBoxIcon = new MetalCheckBoxIcon(); - return checkBoxIcon; - } - - /** - * Returns an icon for use when rendering the {@link JCheckBoxMenuItem} - * component. - * - * @return An icon. - */ - public static Icon getCheckBoxMenuItemIcon() - { - if (checkBoxMenuItemIcon == null) - checkBoxMenuItemIcon = new CheckBoxMenuItemIcon(); - return checkBoxMenuItemIcon; - } - - /** - * Returns an icon for use by the {@link JFileChooser} component. - * - * @return An icon. - */ - public static Icon getFileChooserDetailViewIcon() - { - if (fileChooserDetailViewIcon == null) - fileChooserDetailViewIcon = new FileChooserDetailViewIcon(); - return fileChooserDetailViewIcon; - } - - /** - * Returns an icon for use by the {@link JFileChooser} component. - * - * @return An icon. - */ - public static Icon getFileChooserHomeFolderIcon() - { - if (fileChooserHomeFolderIcon == null) - fileChooserHomeFolderIcon = new FileChooserHomeFolderIcon(); - return fileChooserHomeFolderIcon; - } - - /** - * Returns an icon for use by the {@link JFileChooser} component. - * - * @return An icon. - */ - public static Icon getFileChooserListViewIcon() - { - if (fileChooserListViewIcon == null) - fileChooserListViewIcon = new FileChooserListViewIcon(); - return fileChooserListViewIcon; - } - - /** - * Returns an icon for use by the {@link JFileChooser} component. - * - * @return An icon. - */ - public static Icon getFileChooserNewFolderIcon() - { - if (fileChooserNewFolderIcon == null) - fileChooserNewFolderIcon = new FileChooserNewFolderIcon(); - return fileChooserNewFolderIcon; - } - - /** - * Returns an icon for use by the {@link JFileChooser} component. - * - * @return An icon. - */ - public static Icon getFileChooserUpFolderIcon() - { - if (fileChooserUpFolderIcon == null) - fileChooserUpFolderIcon = new FileChooserUpFolderIcon(); - return fileChooserUpFolderIcon; - } - - /** - * Returns an icon for RadioButtons in the Metal L&F. - * - * @return an icon for RadioButtons in the Metal L&F - */ - public static Icon getRadioButtonIcon() - { - if (radioButtonIcon == null) - radioButtonIcon = new RadioButtonIcon(); - return radioButtonIcon; - } - - /** - * Creates a new instance of the icon used in a {@link JRadioButtonMenuItem}. - * - * @return A new icon instance. - */ - public static Icon getRadioButtonMenuItemIcon() - { - if (radioButtonMenuItemIcon == null) - radioButtonMenuItemIcon = new RadioButtonMenuItemIcon(); - return radioButtonMenuItemIcon; - } - - /** - * Returns the icon used to display the thumb for a horizontally oriented - * {@link JSlider}. - * - * @return The icon. - */ - public static Icon getHorizontalSliderThumbIcon() - { - if (horizontalSliderThumbIcon == null) - horizontalSliderThumbIcon = new HorizontalSliderThumbIcon(); - return horizontalSliderThumbIcon; - } - - /** - * Creates a new icon used to represent the 'close' button in the title - * pane of a {@link JInternalFrame}. - * - * @param size the icon size. - * - * @return A close icon. - */ - public static Icon getInternalFrameCloseIcon(int size) - { - return new InternalFrameCloseIcon(size); - } - - /** - * Creates a new icon for the menu in a {@link JInternalFrame}. This is the - * icon displayed at the top left of the frame. - * - * @return A menu icon. - */ - public static Icon getInternalFrameDefaultMenuIcon() - { - if (internalFrameDefaultMenuIcon == null) - internalFrameDefaultMenuIcon = new InternalFrameDefaultMenuIcon(); - return internalFrameDefaultMenuIcon; - } - - /** - * Creates a new icon for the 'maximize' button in a {@link JInternalFrame}. - * - * @param size the icon size in pixels. - * - * @return The icon. - * - * @see #getInternalFrameAltMaximizeIcon(int) - */ - public static Icon getInternalFrameMaximizeIcon(int size) - { - return new InternalFrameMaximizeIcon(); - } - - /** - * Returns the icon used for the minimize button in the frame title for a - * {@link JInternalFrame}. - * - * @param size the icon size in pixels (ignored by this implementation). - * - * @return The icon. - */ - public static Icon getInternalFrameMinimizeIcon(int size) - { - return new InternalFrameMinimizeIcon(); - } - - /** - * Creates a new icon for the 'restore' button in a {@link JInternalFrame} - * that has been maximised. - * - * @param size the icon size in pixels. - * - * @return The icon. - * - * @see #getInternalFrameMaximizeIcon(int) - */ - public static Icon getInternalFrameAltMaximizeIcon(int size) - { - return new InternalFrameAltMaximizeIcon(size); - } - - /** - * Returns the icon used to display the thumb for a vertically oriented - * {@link JSlider}. - * - * @return The icon. - */ - public static Icon getVerticalSliderThumbIcon() - { - if (verticalSliderThumbIcon == null) - verticalSliderThumbIcon = new VerticalSliderThumbIcon(); - return verticalSliderThumbIcon; - } - - /** - * Creates and returns a new tree folder icon. - * - * @return A new tree folder icon. - */ - public static Icon getTreeFolderIcon() - { - return new TreeFolderIcon(); - } - - /** - * Creates and returns a new tree leaf icon. - * - * @return A new tree leaf icon. - */ - public static Icon getTreeLeafIcon() - { - return new TreeLeafIcon(); - } - - /** - * Creates and returns a tree control icon. - * - * @param isCollapsed a flag that controls whether the icon is in the - * collapsed or expanded state. - * - * @return A tree control icon. - */ - public static Icon getTreeControlIcon(boolean isCollapsed) - { - return new TreeControlIcon(isCollapsed); - } - - /** - * Returns a <code>16x16</code> icon representing a computer. - * - * @return The icon. - */ - public static Icon getTreeComputerIcon() - { - if (treeComputerIcon == null) - treeComputerIcon = new TreeComputerIcon(); - return treeComputerIcon; - } - - /** - * Returns a <code>16x16</code> icon representing a floppy disk. - * - * @return The icon. - */ - public static Icon getTreeFloppyDriveIcon() - { - if (treeFloppyDriveIcon == null) - treeFloppyDriveIcon = new TreeFloppyDriveIcon(); - return treeFloppyDriveIcon; - } - - /** - * Returns a <code>16x16</code> icon representing a hard disk. - * - * @return The icon. - */ - public static Icon getTreeHardDriveIcon() - { - if (treeHardDriveIcon == null) - treeHardDriveIcon = new TreeHardDriveIcon(); - return treeHardDriveIcon; - } - - /** - * Returns a new instance of a 4 x 8 icon showing a small black triangle that - * points to the right. This is displayed in menu items that have a - * sub menu. - * - * @return The icon. - */ - public static Icon getMenuArrowIcon() - { - if (menuArrow == null) - menuArrow = new Icon() - { - public int getIconHeight() - { - return 8; - } - - public int getIconWidth() - { - return 4; - } - - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - g.setColor(Color.BLACK); - for (int i = 0; i < 4; i++) - g.drawLine(x + i, y + i, x + i, y + 7 - i); - g.setColor(saved); - } - }; - return menuArrow; - } - - /** - * Returns a new instance of a 4 x 8 icon showing a small black triangle that - * points to the right. This is displayed in menu items that have a sub menu. - * - * @return The icon. - */ - public static Icon getMenuItemArrowIcon() - { - if (menuItemArrow == null) - menuItemArrow = new Icon() - { - public int getIconHeight() - { - return 8; - } - - public int getIconWidth() - { - return 4; - } - - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - g.setColor(Color.BLACK); - for (int i = 0; i < 4; i++) - g.drawLine(x + i, y + i, x + i, y + 7 - i); - g.setColor(saved); - } - }; - return menuItemArrow; - } - - /** - * Returns a new instance of a 13 x 13 icon showing a small black check mark. - * - * @return The icon. - */ - public static Icon getMenuItemCheckIcon() - { - return new Icon() - { - public int getIconHeight() - { - return 13; - } - - public int getIconWidth() - { - return 13; - } - - public void paintIcon(Component c, Graphics g, int x, int y) - { - Color saved = g.getColor(); - g.setColor(Color.BLACK); - g.drawLine(3 + x, 5 + y, 3 + x, 9 + y); - g.drawLine(4 + x, 5 + y, 4 + x, 9 + y); - g.drawLine(5 + x, 7 + y, 9 + x, 3 + y); - g.drawLine(5 + x, 8 + y, 9 + x, 4 + y); - g.setColor(saved); - } - }; - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java b/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java deleted file mode 100644 index 08de774..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameTitlePane.java +++ /dev/null @@ -1,457 +0,0 @@ -/* MetalInternalFrameTitlePane.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.Icon; -import javax.swing.JInternalFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.basic.BasicInternalFrameTitlePane; - - -/** - * The title pane for a {@link JInternalFrame} (see - * {@link MetalInternalFrameUI#createNorthPane(JInternalFrame)}). This can - * be displayed in two styles: one for regular internal frames, and the other - * for "palette" style internal frames. - */ -public class MetalInternalFrameTitlePane extends BasicInternalFrameTitlePane -{ - - /** - * A property change handler that listens for changes to the - * <code>JInternalFrame.isPalette</code> property and updates the title - * pane as appropriate. - */ - class MetalInternalFrameTitlePanePropertyChangeHandler - extends PropertyChangeHandler - { - /** - * Creates a new handler. - */ - public MetalInternalFrameTitlePanePropertyChangeHandler() - { - super(); - } - - /** - * Handles <code>JInternalFrame.isPalette</code> property changes, with all - * other property changes being passed to the superclass. - * - * @param e the event. - */ - public void propertyChange(PropertyChangeEvent e) - { - String propName = e.getPropertyName(); - if (e.getPropertyName().equals(JInternalFrame.FRAME_ICON_PROPERTY)) - { - title.setIcon(frame.getFrameIcon()); - } - else if (propName.equals("JInternalFrame.isPalette")) - { - if (e.getNewValue().equals(Boolean.TRUE)) - setPalette(true); - else - setPalette(false); - } - else - super.propertyChange(e); - } - } - - /** - * A layout manager for the title pane. - * - * @see #createLayout() - */ - private class MetalTitlePaneLayout implements LayoutManager - { - /** - * Creates a new <code>TitlePaneLayout</code> object. - */ - public MetalTitlePaneLayout() - { - // Do nothing. - } - - /** - * Adds a Component to the Container. - * - * @param name The name to reference the added Component by. - * @param c The Component to add. - */ - public void addLayoutComponent(String name, Component c) - { - // Do nothing. - } - - /** - * This method is called to lay out the children of the Title Pane. - * - * @param c The Container to lay out. - */ - public void layoutContainer(Container c) - { - - Dimension size = c.getSize(); - Insets insets = c.getInsets(); - int width = size.width - insets.left - insets.right; - int height = size.height - insets.top - insets.bottom; - - - int loc = width - insets.right - 1; - int top = insets.top + 2; - int buttonHeight = height - 4; - if (closeButton.isVisible()) - { - int buttonWidth = closeIcon.getIconWidth(); - loc -= buttonWidth + 2; - closeButton.setBounds(loc, top, buttonWidth, buttonHeight); - loc -= 6; - } - - if (maxButton.isVisible()) - { - int buttonWidth = maxIcon.getIconWidth(); - loc -= buttonWidth + 4; - maxButton.setBounds(loc, top, buttonWidth, buttonHeight); - } - - if (iconButton.isVisible()) - { - int buttonWidth = minIcon.getIconWidth(); - loc -= buttonWidth + 4; - iconButton.setBounds(loc, top, buttonWidth, buttonHeight); - loc -= 2; - } - - Dimension titlePreferredSize = title.getPreferredSize(); - title.setBounds(insets.left + 5, insets.top, - Math.min(titlePreferredSize.width, loc - insets.left - 10), - height); - - } - - /** - * This method returns the minimum size of the given Container given the - * children that it has. - * - * @param c The Container to get a minimum size for. - * - * @return The minimum size of the Container. - */ - public Dimension minimumLayoutSize(Container c) - { - return preferredLayoutSize(c); - } - - /** - * Returns the preferred size of the given Container taking - * into account the children that it has. - * - * @param c The Container to lay out. - * - * @return The preferred size of the Container. - */ - public Dimension preferredLayoutSize(Container c) - { - if (isPalette) - return new Dimension(paletteTitleHeight, paletteTitleHeight); - else - return new Dimension(22, 22); - } - - /** - * Removes a Component from the Container. - * - * @param c The Component to remove. - */ - public void removeLayoutComponent(Component c) - { - // Nothing to do here. - } - } - - /** A flag indicating whether the title pane uses the palette style. */ - protected boolean isPalette; - - /** - * The icon used for the close button - this is fetched from the look and - * feel defaults using the key <code>InternalFrame.paletteCloseIcon</code>. - */ - protected Icon paletteCloseIcon; - - /** - * The height of the title pane when <code>isPalette</code> is - * <code>true</code>. This value is fetched from the look and feel defaults - * using the key <code>InternalFrame.paletteTitleHeight</code>. - */ - protected int paletteTitleHeight; - - /** The label used to display the title for the internal frame. */ - JLabel title; - - /** - * Creates a new title pane for the specified frame. - * - * @param f the internal frame. - */ - public MetalInternalFrameTitlePane(JInternalFrame f) - { - super(f); - isPalette = false; - } - - /** - * Fetches the colors used in the title pane. - */ - protected void installDefaults() - { - super.installDefaults(); - selectedTextColor = MetalLookAndFeel.getControlTextColor(); - selectedTitleColor = MetalLookAndFeel.getWindowTitleBackground(); - notSelectedTextColor = MetalLookAndFeel.getInactiveControlTextColor(); - notSelectedTitleColor = MetalLookAndFeel.getWindowTitleInactiveBackground(); - - paletteTitleHeight = UIManager.getInt("InternalFrame.paletteTitleHeight"); - paletteCloseIcon = UIManager.getIcon("InternalFrame.paletteCloseIcon"); - minIcon = MetalIconFactory.getInternalFrameAltMaximizeIcon(16); - - title = new JLabel(frame.getTitle(), - MetalIconFactory.getInternalFrameDefaultMenuIcon(), - SwingConstants.LEFT); - } - - /** - * Clears the colors used for the title pane. - */ - protected void uninstallDefaults() - { - super.uninstallDefaults(); - selectedTextColor = null; - selectedTitleColor = null; - notSelectedTextColor = null; - notSelectedTitleColor = null; - paletteCloseIcon = null; - minIcon = null; - title = null; - } - - /** - * Calls the super class to create the buttons, then calls - * <code>setBorderPainted(false)</code> and - * <code>setContentAreaFilled(false)</code> for each button. - */ - protected void createButtons() - { - super.createButtons(); - closeButton.setBorderPainted(false); - closeButton.setContentAreaFilled(false); - iconButton.setBorderPainted(false); - iconButton.setContentAreaFilled(false); - maxButton.setBorderPainted(false); - maxButton.setContentAreaFilled(false); - } - - /** - * Overridden to do nothing. - */ - protected void addSystemMenuItems(JMenu systemMenu) - { - // do nothing - } - - /** - * Overridden to do nothing. - */ - protected void showSystemMenu() - { - // do nothing - } - - /** - * Adds the sub components of the title pane. - */ - protected void addSubComponents() - { - // FIXME: this method is probably overridden to only add the required - // buttons - add(title); - add(closeButton); - add(iconButton); - add(maxButton); - } - - /** - * Creates a new instance of <code>MetalTitlePaneLayout</code> (not part of - * the public API). - * - * @return A new instance of <code>MetalTitlePaneLayout</code>. - */ - protected LayoutManager createLayout() - { - return new MetalTitlePaneLayout(); - } - - /** - * Draws the title pane in the palette style. - * - * @param g the graphics device. - * - * @see #paintComponent(Graphics) - */ - public void paintPalette(Graphics g) - { - Color savedColor = g.getColor(); - Rectangle b = SwingUtilities.getLocalBounds(this); - - if (UIManager.get("InternalFrame.activeTitleGradient") != null - && frame.isSelected()) - { - MetalUtils.paintGradient(g, b.x, b.y, b.width, b.height, - SwingConstants.VERTICAL, - "InternalFrame.activeTitleGradient"); - } - MetalUtils.fillMetalPattern(this, g, b.x + 4, b.y + 2, b.width - - paletteCloseIcon.getIconWidth() - 13, b.height - 5, - MetalLookAndFeel.getPrimaryControlHighlight(), - MetalLookAndFeel.getBlack()); - - // draw a line separating the title pane from the frame content - Dimension d = getSize(); - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - g.drawLine(0, d.height - 1, d.width - 1, d.height - 1); - - g.setColor(savedColor); - } - - /** - * Paints a representation of the current state of the internal frame. - * - * @param g the graphics device. - */ - public void paintComponent(Graphics g) - { - Color savedColor = g.getColor(); - if (isPalette) - paintPalette(g); - else - { - paintTitleBackground(g); - paintChildren(g); - Dimension d = getSize(); - if (frame.isSelected()) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - - // put a dot in each of the top corners - g.drawLine(0, 0, 0, 0); - g.drawLine(d.width - 1, 0, d.width - 1, 0); - - g.drawLine(0, d.height - 1, d.width - 1, d.height - 1); - - // draw the metal pattern - if (UIManager.get("InternalFrame.activeTitleGradient") != null - && frame.isSelected()) - { - MetalUtils.paintGradient(g, 0, 0, getWidth(), getHeight(), - SwingConstants.VERTICAL, - "InternalFrame.activeTitleGradient"); - } - - Rectangle b = title.getBounds(); - int startX = b.x + b.width + 5; - int endX = startX; - if (iconButton.isVisible()) - endX = Math.max(iconButton.getX(), endX); - else if (maxButton.isVisible()) - endX = Math.max(maxButton.getX(), endX); - else if (closeButton.isVisible()) - endX = Math.max(closeButton.getX(), endX); - endX -= 7; - if (endX > startX) - MetalUtils.fillMetalPattern(this, g, startX, 3, endX - startX, - getHeight() - 6, Color.white, Color.gray); - } - g.setColor(savedColor); - } - - /** - * Sets the flag that controls whether the title pane is drawn in the - * palette style or the regular style. - * - * @param b the new value of the flag. - */ - public void setPalette(boolean b) - { - isPalette = b; - title.setVisible(!isPalette); - iconButton.setVisible(!isPalette && frame.isIconifiable()); - maxButton.setVisible(!isPalette && frame.isMaximizable()); - if (isPalette) - closeButton.setIcon(paletteCloseIcon); - else - closeButton.setIcon(closeIcon); - } - - /** - * Creates and returns a property change handler for the title pane. - * - * @return The property change handler. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new MetalInternalFrameTitlePanePropertyChangeHandler(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameUI.java deleted file mode 100644 index 5eda2ff..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalInternalFrameUI.java +++ /dev/null @@ -1,183 +0,0 @@ -/* MetalInternalFrameUI.java - Copyright (C) 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.plaf.metal; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.ActionMap; -import javax.swing.JComponent; -import javax.swing.JInternalFrame; -import javax.swing.SwingUtilities; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicInternalFrameUI; - -/** - * A UI delegate for the {@link JInternalFrame} component. - */ -public class MetalInternalFrameUI - extends BasicInternalFrameUI -{ - /** - * The key (<code>JInternalFrame.isPalette</code>) for the client property - * that controls whether the internal frame is displayed using the palette - * style. - */ - protected static String IS_PALETTE = "JInternalFrame.isPalette"; - - /** - * Constructs a new instance of <code>MetalInternalFrameUI</code>. - * - * @param frame the frame. - */ - public MetalInternalFrameUI(JInternalFrame frame) - { - super(frame); - } - - /** - * Returns an instance of <code>MetalInternalFrameUI</code>. - * - * @param component the internal frame. - * - * @return an instance of <code>MetalInternalFrameUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalInternalFrameUI((JInternalFrame) component); - } - - /** - * Sets the fields and properties for the component. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - super.installUI(c); - JInternalFrame f = (JInternalFrame) c; - boolean isPalette = false; - Boolean p = (Boolean) f.getClientProperty(IS_PALETTE); - if (p != null) - isPalette = p.booleanValue(); - setPalette(isPalette); - } - - /** - * Creates and returns the component that will be used for the north pane - * of the {@link JInternalFrame}. - * - * @param w the internal frame. - * - * @return A new instance of {@link MetalInternalFrameTitlePane}. - */ - protected JComponent createNorthPane(JInternalFrame w) - { - titlePane = new MetalInternalFrameTitlePane(w); - return titlePane; - } - - /** - * Sets the state of the {@link JInternalFrame} to reflect whether or not - * it is using the palette style. When a frame is displayed as a palette, - * it uses a different border and the title pane is drawn differently. - * - * @param isPalette use the palette style? - */ - public void setPalette(boolean isPalette) - { - MetalInternalFrameTitlePane title = (MetalInternalFrameTitlePane) northPane; - title.setPalette(isPalette); - if (isPalette) - frame.setBorder(new MetalBorders.PaletteBorder()); - else - frame.setBorder(new MetalBorders.InternalFrameBorder()); - } - - /** A listener that is used to handle IS_PALETTE property changes. */ - private PropertyChangeListener paletteListener; - - /** - * Adds the required listeners. - */ - protected void installListeners() - { - super.installListeners(); - paletteListener = new PropertyChangeListener() - { - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(IS_PALETTE)) - { - if (Boolean.TRUE.equals(e.getNewValue())) - setPalette(true); - else - setPalette(false); - } - } - }; - frame.addPropertyChangeListener(paletteListener); - } - - /** - * Removes the listeners used. - */ - protected void uninstallListeners() - { - super.uninstallListeners(); - frame.removePropertyChangeListener(IS_PALETTE, paletteListener); - paletteListener = null; - } - - /** - * Installs keyboard actions. This is overridden to remove the - * <code>showSystemMenu</code> Action that is installed by the - * <code>BasicInternalFrameUI</code>, since Metal JInternalFrames don't have - * a system menu. - */ - protected void installKeyboardActions() - { - super.installKeyboardActions(); - ActionMap am = SwingUtilities.getUIActionMap(frame); - if (am != null) - { - am.remove("showSystemMenu"); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalLabelUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalLabelUI.java deleted file mode 100644 index 915e501..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalLabelUI.java +++ /dev/null @@ -1,108 +0,0 @@ -/* MetalLabelUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Graphics; - -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicGraphicsUtils; -import javax.swing.plaf.basic.BasicLabelUI; - -/** - * A UI delegate for the {@link JLabel} component. - */ -public class MetalLabelUI - extends BasicLabelUI -{ - - /** The shared instance of the UI delegate. */ - protected static MetalLabelUI metalLabelUI; - - /** - * Constructs a new instance of <code>MetalLabelUI</code>. - */ - public MetalLabelUI() - { - super(); - } - - /** - * Returns a shared instance of <code>MetalLabelUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A shared instance of <code>MetalLabelUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - if (metalLabelUI == null) - metalLabelUI = new MetalLabelUI(); - return metalLabelUI; - } - - /** - * Draws the text for a disabled label, using the color defined in the - * {@link UIManager} defaults with the key - * <code>Label.disabledForeground</code>. - * - * @param l the label. - * @param g the graphics device. - * @param s the label text. - * @param textX the x-coordinate for the label. - * @param textY the y-coordinate for the label. - */ - protected void paintDisabledText(JLabel l, Graphics g, String s, int textX, - int textY) - { - Color savedColor = g.getColor(); - g.setColor(UIManager.getColor("Label.disabledForeground")); - int mnemIndex = l.getDisplayedMnemonicIndex(); - if (mnemIndex != -1) - BasicGraphicsUtils.drawStringUnderlineCharAt(g, s, mnemIndex, textX, - textY); - else - g.drawString(s, textX, textY); - - g.setColor(savedColor); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java b/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java deleted file mode 100644 index acc3fed..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java +++ /dev/null @@ -1,1372 +0,0 @@ -/* MetalLookAndFeel.java - Copyright (C) 2002, 2005, 2006, 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.plaf.metal; - -import gnu.classpath.SystemProperties; - -import java.awt.Color; -import java.awt.Font; - -import javax.swing.LookAndFeel; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.plaf.BorderUIResource; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.FontUIResource; -import javax.swing.plaf.InsetsUIResource; -import javax.swing.plaf.BorderUIResource.LineBorderUIResource; -import javax.swing.plaf.basic.BasicLookAndFeel; - - -/** - * A custom look and feel that is designed to look similar across different - * operating systems. To install this look and feel, add the following code - * (or something similar) near the start of your application:</p> - * <pre> - * try - * { - * UIManager.setLookAndFeel(new MetalLookAndFeel()); - * } - * catch (UnsupportedLookAndFeelException e) - * { - * e.printStackTrace(); - * }</pre> - */ -public class MetalLookAndFeel extends BasicLookAndFeel -{ - private static final long serialVersionUID = 6680646159193457980L; - - /** The current theme. */ - private static MetalTheme theme; - - /** - * Creates a new instance of the Metal look and feel. - */ - public MetalLookAndFeel() - { - // Nothing to do here. - } - - /** - * Sets the current theme to a new instance of {@link DefaultMetalTheme}. - */ - protected void createDefaultTheme() - { - getCurrentTheme(); - } - - /** - * Returns <code>false</code> to indicate that this look and feel does not - * attempt to emulate the look and feel of native applications on the host - * platform. - * - * @return <code>false</code>. - */ - public boolean isNativeLookAndFeel() - { - return false; - } - - /** - * Returns <code>true</code> to indicate that this look and feel is supported - * on all platforms. - * - * @return <code>true</code>. - */ - public boolean isSupportedLookAndFeel() - { - return true; - } - - /** - * Returns a string describing the look and feel. In this case, the method - * returns "Metal look and feel". - * - * @return A string describing the look and feel. - */ - public String getDescription() - { - return "The Java(tm) Look and Feel"; - } - - /** - * Returns the look and feel identifier. - * - * @return "MetalLookAndFeel". - */ - public String getID() - { - return "Metal"; - } - - /** - * Returns the look and feel name. - * - * @return "MetalLookAndFeel". - */ - public String getName() - { - return "Metal"; - } - - public UIDefaults getDefaults() - { - createDefaultTheme(); - UIDefaults def = super.getDefaults(); - - theme.addCustomEntriesToTable(def); - return def; - } - - /** - * Returns the accelerator foreground color from the installed theme. - * - * @return The accelerator foreground color. - */ - public static ColorUIResource getAcceleratorForeground() - { - if (theme != null) - return theme.getAcceleratorForeground(); - return null; - } - - /** - * Returns the accelerator selected foreground color from the installed - * theme. - * - * @return The accelerator selected foreground color. - */ - public static ColorUIResource getAcceleratorSelectedForeground() - { - if (theme != null) - return theme.getAcceleratorSelectedForeground(); - return null; - } - - /** - * Returns the color black from the installed theme. - * - * @return The color black. - */ - public static ColorUIResource getBlack() - { - if (theme != null) - return theme.getBlack(); - return null; - } - - /** - * Returns the control color from the installed theme. - * - * @return The control color. - */ - public static ColorUIResource getControl() - { - if (theme != null) - return theme.getControl(); - return null; - } - - /** - * Returns the color used for dark shadows on controls, from the installed - * theme. - * - * @return The color used for dark shadows on controls. - */ - public static ColorUIResource getControlDarkShadow() - { - if (theme != null) - return theme.getControlDarkShadow(); - return null; - } - - /** - * Returns the color used for disabled controls, from the installed theme. - * - * @return The color used for disabled controls. - */ - public static ColorUIResource getControlDisabled() - { - if (theme != null) - return theme.getControlDisabled(); - return null; - } - - /** - * Returns the color used to draw highlights for controls, from the installed - * theme. - * - * @return The color used to draw highlights for controls. - */ - public static ColorUIResource getControlHighlight() - { - if (theme != null) - return theme.getControlHighlight(); - return null; - } - - /** - * Returns the color used to display control info, from the installed - * theme. - * - * @return The color used to display control info. - */ - public static ColorUIResource getControlInfo() - { - if (theme != null) - return theme.getControlInfo(); - return null; - } - - /** - * Returns the color used to draw shadows for controls, from the installed - * theme. - * - * @return The color used to draw shadows for controls. - */ - public static ColorUIResource getControlShadow() - { - if (theme != null) - return theme.getControlShadow(); - return null; - } - - /** - * Returns the color used for text on controls, from the installed theme. - * - * @return The color used for text on controls. - */ - public static ColorUIResource getControlTextColor() - { - if (theme != null) - return theme.getControlTextColor(); - return null; - } - - /** - * Returns the font used for text on controls, from the installed theme. - * - * @return The font used for text on controls. - */ - public static FontUIResource getControlTextFont() - { - if (theme != null) - return theme.getControlTextFont(); - return null; - } - - /** - * Returns the color used for the desktop background, from the installed - * theme. - * - * @return The color used for the desktop background. - */ - public static ColorUIResource getDesktopColor() - { - if (theme != null) - return theme.getDesktopColor(); - return null; - } - - /** - * Returns the color used to draw focus highlights, from the installed - * theme. - * - * @return The color used to draw focus highlights. - */ - public static ColorUIResource getFocusColor() - { - if (theme != null) - return theme.getFocusColor(); - return null; - } - - /** - * Returns the color used to draw highlighted text, from the installed - * theme. - * - * @return The color used to draw highlighted text. - */ - public static ColorUIResource getHighlightedTextColor() - { - if (theme != null) - return theme.getHighlightedTextColor(); - return null; - } - - /** - * Returns the color used to draw text on inactive controls, from the - * installed theme. - * - * @return The color used to draw text on inactive controls. - */ - public static ColorUIResource getInactiveControlTextColor() - { - if (theme != null) - return theme.getInactiveControlTextColor(); - return null; - } - - /** - * Returns the color used to draw inactive system text, from the installed - * theme. - * - * @return The color used to draw inactive system text. - */ - public static ColorUIResource getInactiveSystemTextColor() - { - if (theme != null) - return theme.getInactiveSystemTextColor(); - return null; - } - - /** - * Returns the background color for menu items, from the installed theme. - * - * @return The background color for menu items. - * - * @see #getMenuSelectedBackground() - */ - public static ColorUIResource getMenuBackground() - { - if (theme != null) - return theme.getMenuBackground(); - return null; - } - - /** - * Returns the foreground color for disabled menu items, from the installed - * theme. - * - * @return The foreground color for disabled menu items. - * - * @see #getMenuForeground() - */ - public static ColorUIResource getMenuDisabledForeground() - { - if (theme != null) - return theme.getMenuDisabledForeground(); - return null; - } - - /** - * Returns the foreground color for menu items, from the installed theme. - * - * @return The foreground color for menu items. - * - * @see #getMenuDisabledForeground() - * @see #getMenuSelectedForeground() - */ - public static ColorUIResource getMenuForeground() - { - if (theme != null) - return theme.getMenuForeground(); - return null; - } - - /** - * Returns the background color for selected menu items, from the installed - * theme. - * - * @return The background color for selected menu items. - * - * @see #getMenuBackground() - */ - public static ColorUIResource getMenuSelectedBackground() - { - if (theme != null) - return theme.getMenuSelectedBackground(); - return null; - } - - /** - * Returns the foreground color for selected menu items, from the installed - * theme. - * - * @return The foreground color for selected menu items. - * - * @see #getMenuForeground() - */ - public static ColorUIResource getMenuSelectedForeground() - { - if (theme != null) - return theme.getMenuSelectedForeground(); - return null; - } - - /** - * Returns the font used for text in menus, from the installed theme. - * - * @return The font used for text in menus. - */ - public static FontUIResource getMenuTextFont() - { - if (theme != null) - return theme.getMenuTextFont(); - return null; - } - - /** - * Returns the primary color for controls, from the installed theme. - * - * @return The primary color for controls. - */ - public static ColorUIResource getPrimaryControl() - { - if (theme != null) - return theme.getPrimaryControl(); - return null; - } - - /** - * Returns the primary color for the dark shadow on controls, from the - * installed theme. - * - * @return The primary color for the dark shadow on controls. - */ - public static ColorUIResource getPrimaryControlDarkShadow() - { - if (theme != null) - return theme.getPrimaryControlDarkShadow(); - return null; - } - - /** - * Returns the primary color for the highlight on controls, from the - * installed theme. - * - * @return The primary color for the highlight on controls. - */ - public static ColorUIResource getPrimaryControlHighlight() - { - if (theme != null) - return theme.getPrimaryControlHighlight(); - return null; - } - - /** - * Returns the primary color for the information on controls, from the - * installed theme. - * - * @return The primary color for the information on controls. - */ - public static ColorUIResource getPrimaryControlInfo() - { - if (theme != null) - return theme.getPrimaryControlInfo(); - return null; - } - - /** - * Returns the primary color for the shadow on controls, from the installed - * theme. - * - * @return The primary color for the shadow on controls. - */ - public static ColorUIResource getPrimaryControlShadow() - { - if (theme != null) - return theme.getPrimaryControlShadow(); - return null; - } - - /** - * Returns the background color for separators, from the installed theme. - * - * @return The background color for separators. - */ - public static ColorUIResource getSeparatorBackground() - { - if (theme != null) - return theme.getSeparatorBackground(); - return null; - } - - /** - * Returns the foreground color for separators, from the installed theme. - * - * @return The foreground color for separators. - */ - public static ColorUIResource getSeparatorForeground() - { - if (theme != null) - return theme.getSeparatorForeground(); - return null; - } - - /** - * Returns the font used for sub text, from the installed theme. - * - * @return The font used for sub text. - */ - public static FontUIResource getSubTextFont() - { - if (theme != null) - return theme.getSubTextFont(); - return null; - } - - /** - * Returns the color used for system text, from the installed theme. - * - * @return The color used for system text. - */ - public static ColorUIResource getSystemTextColor() - { - if (theme != null) - return theme.getSystemTextColor(); - return null; - } - - /** - * Returns the font used for system text, from the installed theme. - * - * @return The font used for system text. - */ - public static FontUIResource getSystemTextFont() - { - if (theme != null) - return theme.getSystemTextFont(); - return null; - } - - /** - * Returns the color used to highlight text, from the installed theme. - * - * @return The color used to highlight text. - */ - public static ColorUIResource getTextHighlightColor() - { - if (theme != null) - return theme.getTextHighlightColor(); - return null; - } - - /** - * Returns the color used to display user text, from the installed theme. - * - * @return The color used to display user text. - */ - public static ColorUIResource getUserTextColor() - { - if (theme != null) - return theme.getUserTextColor(); - return null; - } - - /** - * Returns the font used for user text, obtained from the current theme. - * - * @return The font used for user text. - */ - public static FontUIResource getUserTextFont() - { - if (theme != null) - return theme.getUserTextFont(); - return null; - } - - /** - * Returns the color used for white, from the installed theme. - * - * @return The color used for white. - */ - public static ColorUIResource getWhite() - { - if (theme != null) - return theme.getWhite(); - return null; - } - - /** - * Returns the window background color, from the installed theme. - * - * @return The window background color. - */ - public static ColorUIResource getWindowBackground() - { - if (theme != null) - return theme.getWindowBackground(); - return null; - } - - /** - * Returns the window title background color, from the installed theme. - * - * @return The window title background color. - */ - public static ColorUIResource getWindowTitleBackground() - { - if (theme != null) - return theme.getWindowTitleBackground(); - return null; - } - - /** - * Returns the window title font from the current theme. - * - * @return The window title font. - * - * @see MetalTheme - */ - public static FontUIResource getWindowTitleFont() - { - if (theme != null) - return theme.getWindowTitleFont(); - return null; - } - - /** - * Returns the window title foreground color, from the installed theme. - * - * @return The window title foreground color. - */ - public static ColorUIResource getWindowTitleForeground() - { - if (theme != null) - return theme.getWindowTitleForeground(); - return null; - } - - /** - * Returns the background color for an inactive window title, from the - * installed theme. - * - * @return The background color for an inactive window title. - */ - public static ColorUIResource getWindowTitleInactiveBackground() - { - if (theme != null) - return theme.getWindowTitleInactiveBackground(); - return null; - } - - /** - * Returns the foreground color for an inactive window title, from the - * installed theme. - * - * @return The foreground color for an inactive window title. - */ - public static ColorUIResource getWindowTitleInactiveForeground() - { - if (theme != null) - return theme.getWindowTitleInactiveForeground(); - return null; - } - - /** - * Sets the current theme for the look and feel. Note that the theme must be - * set <em>before</em> the look and feel is installed. To change the theme - * for an already running application that is using the - * {@link MetalLookAndFeel}, first set the theme with this method, then - * create a new instance of {@link MetalLookAndFeel} and install it in the - * usual way (see {@link UIManager#setLookAndFeel(LookAndFeel)}). - * - * @param theme the theme (<code>null</code> not permitted). - * - * @throws NullPointerException if <code>theme</code> is <code>null</code>. - * - * @see #getCurrentTheme() - */ - public static void setCurrentTheme(MetalTheme theme) - { - if (theme == null) - throw new NullPointerException("Null 'theme' not permitted."); - MetalLookAndFeel.theme = theme; - } - - /** - * Sets the ComponentUI classes for all Swing components to the Metal - * implementations. - * - * In particular this sets the following keys: - * - * <table> - * <tr> - * <th>Key</th><th>Value</th> - * </tr><tr> - * <td>ButtonUI</td><td>{@link MetalButtonUI}</td> - * </tr><tr> - * <td>CheckBoxUI</td><td>{@link MetalCheckBoxUI}</td> - * </tr><tr> - * <td>ComboBoxUI</td><td>{@link MetalComboBoxUI}</td> - * </tr><tr> - * <td>DesktopIconUI</td><td>{@link MetalDesktopIconUI}</td> - * </tr><tr> - * <td>InternalFrameUI</td><td>{@link MetalInternalFrameUI}</td> - * </tr><tr> - * <td>LabelUI</td><td>{@link MetalLabelUI}</td> - * </tr><tr> - * <td>PopupMenuSeparatorUI</td><td>{@link MetalPopupMenuSeparatorUI}</td> - * </tr><tr> - * <td>ProgressBarUI</td><td>{@link MetalProgressBarUI}</td> - * </tr><tr> - * <td>RadioButtonUI</td><td>{@link MetalRadioButtonUI}</td> - * </tr><tr> - * <td>RootPaneUI</td><td>{@link MetalRootPaneUI}</td> - * </tr><tr> - * <td>ScrollBarUI</td><td>{@link MetalScrollBarUI}</td> - * </tr><tr> - * <td>ScrollPaneUI</td><td>{@link MetalScrollPaneUI}</td> - * </tr><tr> - * <td>SeparatorUI</td><td>{@link MetalSeparatorUI}</td> - * </tr><tr> - * <td>SliderUI</td><td>{@link MetalSliderUI}</td> - * </tr><tr> - * <td>SplitPaneUI</td><td>{@link MetalSplitPaneUI}</td> - * </tr><tr> - * <td>TabbedPaneUI</td><td>{@link MetalTabbedPaneUI}</td> - * </tr><tr> - * <td>TextFieldUI</td><td>{@link MetalTextFieldUI}</td> - * </tr><tr> - * <td>ToggleButtonUI</td><td>{@link MetalToggleButtonUI}</td> - * </tr><tr> - * <td>ToolBarUI</td><td>{@link MetalToolBarUI}</td> - * </tr><tr> - * <td>ToolTipUI</td><td>{@link MetalToolTipUI}</td> - * </tr><tr> - * <td>TreeUI</td><td>{@link MetalTreeUI}</td> - * </tr><tr> - * </table> - * - * @param defaults the UIDefaults where the class defaults are added - */ - protected void initClassDefaults(UIDefaults defaults) - { - super.initClassDefaults(defaults); - - // Variables - Object[] uiDefaults; - // Initialize Class Defaults - uiDefaults = new Object[] { - "ButtonUI", "javax.swing.plaf.metal.MetalButtonUI", - "CheckBoxUI", "javax.swing.plaf.metal.MetalCheckBoxUI", - "ComboBoxUI", "javax.swing.plaf.metal.MetalComboBoxUI", - "DesktopIconUI", "javax.swing.plaf.metal.MetalDesktopIconUI", - "FileChooserUI", "javax.swing.plaf.metal.MetalFileChooserUI", - "InternalFrameUI", "javax.swing.plaf.metal.MetalInternalFrameUI", - "LabelUI", "javax.swing.plaf.metal.MetalLabelUI", - "MenuBarUI", "javax.swing.plaf.metal.MetalMenuBarUI", - "PopupMenuSeparatorUI", - "javax.swing.plaf.metal.MetalPopupMenuSeparatorUI", - "ProgressBarUI", "javax.swing.plaf.metal.MetalProgressBarUI", - "RadioButtonUI", "javax.swing.plaf.metal.MetalRadioButtonUI", - "RootPaneUI", "javax.swing.plaf.metal.MetalRootPaneUI", - "ScrollBarUI", "javax.swing.plaf.metal.MetalScrollBarUI", - "ScrollPaneUI", "javax.swing.plaf.metal.MetalScrollPaneUI", - "SeparatorUI", "javax.swing.plaf.metal.MetalSeparatorUI", - "SliderUI", "javax.swing.plaf.metal.MetalSliderUI", - "SplitPaneUI", "javax.swing.plaf.metal.MetalSplitPaneUI", - "TabbedPaneUI", "javax.swing.plaf.metal.MetalTabbedPaneUI", - "TextFieldUI", "javax.swing.plaf.metal.MetalTextFieldUI", - "ToggleButtonUI", "javax.swing.plaf.metal.MetalToggleButtonUI", - "ToolBarUI", "javax.swing.plaf.metal.MetalToolBarUI", - "ToolTipUI", "javax.swing.plaf.metal.MetalToolTipUI", - "TreeUI", "javax.swing.plaf.metal.MetalTreeUI", - }; - // Add Class Defaults to UI Defaults table - defaults.putDefaults(uiDefaults); - } - - /** - * Initializes the component defaults for the Metal Look & Feel. - * - * In particular this sets the following keys (the colors are given - * as RGB hex values): - * - * <table> - * <tr> - * <th>Key</th><th>Value</th> - * </tr><tr> - * <td>Button.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>Button.border</td><td>{@link MetalBorders#getButtonBorder()}</td> - * </tr><tr> - * <td>Button.font</td><td>{@link #getControlTextFont}</td> - * </tr><tr> - * <td>Button.margin</td><td><code>new java.awt.Insets(2, 14, 2, 14)</code> - * </td> - * </tr><tr> - * <td>CheckBox.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>CheckBoxMenuItem.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>ToolBar.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>Panel.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>Slider.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>OptionPane.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>ProgressBar.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>TabbedPane.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>Label.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>Label.font</td><td>{@link #getControlTextFont}</td> - * </tr><tr> - * <td>Menu.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>MenuBar.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>MenuItem.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>ScrollBar.background</td><td>0xcccccc</td> - * </tr><tr> - * <td>PopupMenu.border</td> - * <td><code>new javax.swing.plaf.metal.MetalBorders.PopupMenuBorder()</td> - * </tr><tr> - * </table> - * - * @param defaults the UIDefaults instance to which the values are added - */ - protected void initComponentDefaults(UIDefaults defaults) - { - super.initComponentDefaults(defaults); - Object[] myDefaults = new Object[] { - "Button.background", getControl(), - "Button.border", MetalBorders.getButtonBorder(), - "Button.darkShadow", getControlDarkShadow(), - "Button.disabledText", getInactiveControlTextColor(), - "Button.focus", getFocusColor(), - "Button.font", getControlTextFont(), - "Button.foreground", getControlTextColor(), - "Button.highlight", getControlHighlight(), - "Button.light", getControlHighlight(), - "Button.margin", new InsetsUIResource(2, 14, 2, 14), - "Button.select", getControlShadow(), - "Button.shadow", getControlShadow(), - - "CheckBox.background", getControl(), - "CheckBox.border", MetalBorders.getButtonBorder(), - "CheckBox.disabledText", getInactiveControlTextColor(), - "CheckBox.focus", getFocusColor(), - "CheckBox.font", getControlTextFont(), - "CheckBox.foreground", getControlTextColor(), - "CheckBox.icon", - new UIDefaults.ProxyLazyValue("javax.swing.plaf.metal.MetalCheckBoxIcon"), - "CheckBox.checkIcon", - new UIDefaults.ProxyLazyValue("javax.swing.plaf.metal.MetalCheckBoxIcon"), - "Checkbox.select", getControlShadow(), - - "CheckBoxMenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 10), - "CheckBoxMenuItem.acceleratorForeground", getAcceleratorForeground(), - "CheckBoxMenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(), - "CheckBoxMenuItem.background", getMenuBackground(), - "CheckBoxMenuItem.borderPainted", Boolean.TRUE, - "CheckBoxMenuItem.commandSound", "sounds/MenuItemCommand.wav", - "CheckBoxMenuItem.checkIcon", MetalIconFactory.getCheckBoxMenuItemIcon(), - "CheckBoxMenuItem.disabledForeground", getMenuDisabledForeground(), - "CheckBoxMenuItem.font", getMenuTextFont(), - "CheckBoxMenuItem.foreground", getMenuForeground(), - "CheckBoxMenuItem.selectionBackground", getMenuSelectedBackground(), - "CheckBoxMenuItem.selectionForeground", getMenuSelectedForeground(), - - "ColorChooser.background", getControl(), - "ColorChooser.foreground", getControlTextColor(), - "ColorChooser.rgbBlueMnemonic", new Integer(0), - "ColorChooser.rgbGreenMnemonic", new Integer(0), - "ColorChooser.rgbRedMnemonic", new Integer(0), - "ColorChooser.swatchesDefaultRecentColor", getControl(), - - "ComboBox.background", getControl(), - "ComboBox.buttonBackground", getControl(), - "ComboBox.buttonDarkShadow", getControlDarkShadow(), - "ComboBox.buttonHighlight", getControlHighlight(), - "ComboBox.buttonShadow", getControlShadow(), - "ComboBox.disabledBackground", getControl(), - "ComboBox.disabledForeground", getInactiveSystemTextColor(), - "ComboBox.font", getControlTextFont(), - "ComboBox.foreground", getControlTextColor(), - "ComboBox.selectionBackground", getPrimaryControlShadow(), - "ComboBox.selectionForeground", getControlTextColor(), - - "Desktop.background", getDesktopColor(), - - "DesktopIcon.background", getControl(), - "DesktopIcon.foreground", getControlTextColor(), - "DesktopIcon.width", new Integer(160), - "DesktopIcon.border", MetalBorders.getDesktopIconBorder(), - "DesktopIcon.font", getControlTextFont(), - - "EditorPane.background", getWindowBackground(), - "EditorPane.caretForeground", getUserTextColor(), - "EditorPane.font", getControlTextFont(), - "EditorPane.foreground", getUserTextColor(), - "EditorPane.inactiveForeground", getInactiveSystemTextColor(), - "EditorPane.selectionBackground", getTextHighlightColor(), - "EditorPane.selectionForeground", getHighlightedTextColor(), - - "FormattedTextField.background", getWindowBackground(), - "FormattedTextField.border", - new BorderUIResource(MetalBorders.getTextFieldBorder()), - "FormattedTextField.caretForeground", getUserTextColor(), - "FormattedTextField.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "FormattedTextField.foreground", getUserTextColor(), - "FormattedTextField.inactiveBackground", getControl(), - "FormattedTextField.inactiveForeground", getInactiveSystemTextColor(), - "FormattedTextField.selectionBackground", getTextHighlightColor(), - "FormattedTextField.selectionForeground", getHighlightedTextColor(), - - "FileChooser.upFolderIcon", - MetalIconFactory.getFileChooserUpFolderIcon(), - "FileChooser.listViewIcon", - MetalIconFactory.getFileChooserListViewIcon(), - "FileChooser.newFolderIcon", - MetalIconFactory.getFileChooserNewFolderIcon(), - "FileChooser.homeFolderIcon", - MetalIconFactory.getFileChooserHomeFolderIcon(), - "FileChooser.detailsViewIcon", - MetalIconFactory.getFileChooserDetailViewIcon(), - "FileChooser.fileNameLabelMnemonic", new Integer(78), - "FileChooser.filesOfTypeLabelMnemonic", new Integer(84), - "FileChooser.lookInLabelMnemonic", new Integer(73), - "FileView.computerIcon", MetalIconFactory.getTreeComputerIcon(), - "FileView.directoryIcon", MetalIconFactory.getTreeFolderIcon(), - "FileView.fileIcon", MetalIconFactory.getTreeLeafIcon(), - "FileView.floppyDriveIcon", MetalIconFactory.getTreeFloppyDriveIcon(), - "FileView.hardDriveIcon", MetalIconFactory.getTreeHardDriveIcon(), - - "InternalFrame.activeTitleBackground", getWindowTitleBackground(), - "InternalFrame.activeTitleForeground", getWindowTitleForeground(), - "InternalFrame.border", new MetalBorders.InternalFrameBorder(), - "InternalFrame.borderColor", getControl(), - "InternalFrame.borderDarkShadow", getControlDarkShadow(), - "InternalFrame.borderHighlight", getControlHighlight(), - "InternalFrame.borderLight", getControlHighlight(), - "InternalFrame.borderShadow", getControlShadow(), - "InternalFrame.icon", MetalIconFactory.getInternalFrameDefaultMenuIcon(), - "InternalFrame.closeIcon", - MetalIconFactory.getInternalFrameCloseIcon(16), - "InternalFrame.closeSound", "sounds/FrameClose.wav", - "InternalFrame.inactiveTitleBackground", getWindowTitleInactiveBackground(), - "InternalFrame.inactiveTitleForeground", getWindowTitleInactiveForeground(), - "InternalFrame.maximizeIcon", - MetalIconFactory.getInternalFrameMaximizeIcon(16), - "InternalFrame.maximizeSound", "sounds/FrameMaximize.wav", - "InternalFrame.iconifyIcon", - MetalIconFactory.getInternalFrameMinimizeIcon(16), - "InternalFrame.minimizeSound", "sounds/FrameMinimize.wav", - "InternalFrame.paletteBorder", new MetalBorders.PaletteBorder(), - "InternalFrame.paletteCloseIcon", new MetalIconFactory.PaletteCloseIcon(), - "InternalFrame.paletteTitleHeight", new Integer(11), - "InternalFrame.restoreDownSound", "sounds/FrameRestoreDown.wav", - "InternalFrame.restoreUpSound", "sounds/FrameRestoreUp.wav", - - "Label.background", getControl(), - "Label.disabledForeground", getInactiveSystemTextColor(), - "Label.disabledShadow", getControlShadow(), - "Label.font", getControlTextFont(), - "Label.foreground", getSystemTextColor(), - - "List.font", getControlTextFont(), - "List.background", getWindowBackground(), - "List.foreground", getUserTextColor(), - "List.selectionBackground", getTextHighlightColor(), - "List.selectionForeground", getHighlightedTextColor(), - "List.focusCellHighlightBorder", - new LineBorderUIResource(MetalLookAndFeel.getFocusColor()), - - "Menu.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 10), - "Menu.acceleratorForeground", getAcceleratorForeground(), - "Menu.acceleratorSelectionForeground", getAcceleratorSelectedForeground(), - "Menu.arrowIcon", MetalIconFactory.getMenuArrowIcon(), - "Menu.background", getMenuBackground(), - "Menu.border", new MetalBorders.MenuItemBorder(), - "Menu.borderPainted", Boolean.TRUE, - "MenuItem.commandSound", "sounds/MenuItemCommand.wav", - "Menu.disabledForeground", getMenuDisabledForeground(), - "Menu.font", getMenuTextFont(), - "Menu.foreground", getMenuForeground(), - "Menu.selectionBackground", getMenuSelectedBackground(), - "Menu.selectionForeground", getMenuSelectedForeground(), - "Menu.submenuPopupOffsetX", new Integer(-4), - "Menu.submenuPopupOffsetY", new Integer(-3), - - "MenuBar.background", getMenuBackground(), - "MenuBar.border", new MetalBorders.MenuBarBorder(), - "MenuBar.font", getMenuTextFont(), - "MenuBar.foreground", getMenuForeground(), - "MenuBar.highlight", getControlHighlight(), - "MenuBar.shadow", getControlShadow(), - - "MenuItem.acceleratorDelimiter", "-", - "MenuItem.acceleratorFont", new FontUIResource("Dialog", Font.PLAIN, 10), - "MenuItem.acceleratorForeground", getAcceleratorForeground(), - "MenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(), - "MenuItem.arrowIcon", MetalIconFactory.getMenuItemArrowIcon(), - "MenuItem.background", getMenuBackground(), - "MenuItem.border", new MetalBorders.MenuItemBorder(), - "MenuItem.borderPainted", Boolean.TRUE, - "MenuItem.disabledForeground", getMenuDisabledForeground(), - "MenuItem.font", getMenuTextFont(), - "MenuItem.foreground", getMenuForeground(), - "MenuItem.selectionBackground", getMenuSelectedBackground(), - "MenuItem.selectionForeground", getMenuSelectedForeground(), - - "OptionPane.background", getControl(), - "OptionPane.errorSound", "sounds/OptionPaneError.wav", - "OptionPane.informationSound", "sounds/OptionPaneInformation.wav", - "OptionPane.questionSound", "sounds/OptionPaneQuestion.wav", - "OptionPane.warningSound", "sounds/OptionPaneWarning.wav", - "OptionPane.errorDialog.border.background", new ColorUIResource(153, 51, 51), - "OptionPane.errorDialog.titlePane.background", new ColorUIResource(255, 153, 153), - "OptionPane.errorDialog.titlePane.foreground", new ColorUIResource(51, 0, 0), - "OptionPane.errorDialog.titlePane.shadow", new ColorUIResource(204, 102, 102), - "OptionPane.foreground", getControlTextColor(), - "OptionPane.messageForeground", getControlTextColor(), - "OptionPane.questionDialog.border.background", new ColorUIResource(51, 102, 51), - "OptionPane.questionDialog.titlePane.background", new ColorUIResource(153, 204, 153), - "OptionPane.questionDialog.titlePane.foreground", new ColorUIResource(0, 51, 0), - "OptionPane.questionDialog.titlePane.shadow", new ColorUIResource(102, 153, 102), - "OptionPane.warningDialog.border.background", new ColorUIResource(153, 102, 51), - "OptionPane.warningDialog.titlePane.background", new ColorUIResource(255, 204, 153), - "OptionPane.warningDialog.titlePane.foreground", new ColorUIResource(102, 51, 0), - "OptionPane.warningDialog.titlePane.shadow", new ColorUIResource(204, 153, 102), - - "Panel.background", getControl(), - "Panel.foreground", getUserTextColor(), - - "PasswordField.background", getWindowBackground(), - "PasswordField.border", - new BorderUIResource(MetalBorders.getTextFieldBorder()), - "PasswordField.caretForeground", getUserTextColor(), - "PasswordField.foreground", getUserTextColor(), - "PasswordField.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "PasswordField.inactiveBackground", getControl(), - "PasswordField.inactiveForeground", getInactiveSystemTextColor(), - "PasswordField.selectionBackground", getTextHighlightColor(), - "PasswordField.selectionForeground", getHighlightedTextColor(), - - "PopupMenu.background", getMenuBackground(), - "PopupMenu.border", new MetalBorders.PopupMenuBorder(), - "PopupMenu.font", getMenuTextFont(), - "PopupMenu.foreground", getMenuForeground(), - "PopupMenu.popupSound", "sounds/PopupMenuPopup.wav", - - "ProgressBar.background", getControl(), - "ProgressBar.border", new BorderUIResource.LineBorderUIResource(getControlDarkShadow(), 1), - "ProgressBar.font", getControlTextFont(), - "ProgressBar.foreground", getPrimaryControlShadow(), - "ProgressBar.selectionBackground", getPrimaryControlDarkShadow(), - "ProgressBar.selectionForeground", getControl(), - - "RadioButton.background", getControl(), - "RadioButton.darkShadow", getControlDarkShadow(), - "RadioButton.disabledText", getInactiveControlTextColor(), - "RadioButton.icon", - new UIDefaults.LazyValue() - { - public Object createValue(UIDefaults def) - { - return MetalIconFactory.getRadioButtonIcon(); - } - }, - "RadioButton.focus", MetalLookAndFeel.getFocusColor(), - "RadioButton.font", MetalLookAndFeel.getControlTextFont(), - "RadioButton.foreground", getControlTextColor(), - "RadioButton.highlight", getControlHighlight(), - "RadioButton.light", getControlHighlight(), - "RadioButton.select", getControlShadow(), - "RadioButton.shadow", getControlShadow(), - - "RadioButtonMenuItem.acceleratorFont", new Font("Dialog", Font.PLAIN, 10), - "RadioButtonMenuItem.acceleratorForeground", getAcceleratorForeground(), - "RadioButtonMenuItem.acceleratorSelectionForeground", getAcceleratorSelectedForeground(), - "RadioButtonMenuItem.background", getMenuBackground(), - "RadioButtonMenuItem.border", new MetalBorders.MenuItemBorder(), - "RadioButtonMenuItem.borderPainted", Boolean.TRUE, - "RadioButtonMenuItem.checkIcon", - MetalIconFactory.getRadioButtonMenuItemIcon(), - "RadioButtonMenuItem.commandSound", "sounds/MenuItemCommand.wav", - "RadioButtonMenuItem.disabledForeground", getMenuDisabledForeground(), - "RadioButtonMenuItem.font", getMenuTextFont(), - "RadioButtonMenuItem.foreground", getMenuForeground(), - "RadioButtonMenuItem.margin", new InsetsUIResource(2, 2, 2, 2), - "RadioButtonMenuItem.selectionBackground", - MetalLookAndFeel.getMenuSelectedBackground(), - "RadioButtonMenuItem.selectionForeground", - MetalLookAndFeel.getMenuSelectedForeground(), - - "ScrollBar.allowsAbsolutePositioning", Boolean.TRUE, - "ScrollBar.background", getControl(), - "ScrollBar.darkShadow", getControlDarkShadow(), - "ScrollBar.foreground", getControl(), - "ScrollBar.highlight", getControlHighlight(), - "ScrollBar.shadow", getControlShadow(), - "ScrollBar.thumb", getPrimaryControlShadow(), - "ScrollBar.thumbDarkShadow", getControlDarkShadow(), - "ScrollBar.thumbHighlight", getPrimaryControl(), - "ScrollBar.thumbShadow", getPrimaryControlDarkShadow(), - "ScrollBar.track", getControl(), - "ScrollBar.trackHighlight", getControlDarkShadow(), - "ScrollBar.width", new Integer(17), - - "ScrollPane.background", getControl(), - "ScrollPane.border", new MetalBorders.ScrollPaneBorder(), - "ScrollPane.foreground", getControlTextColor(), - - "Separator.background", getSeparatorBackground(), - "Separator.foreground", getSeparatorForeground(), - "Separator.highlight", getControlHighlight(), - "Separator.shadow", getControlShadow(), - - "Slider.background", getControl(), - "Slider.focus", getFocusColor(), - "Slider.focusInsets", new InsetsUIResource(0, 0, 0, 0), - "Slider.foreground", getPrimaryControlShadow(), - "Slider.highlight", getControlHighlight(), - "Slider.horizontalThumbIcon", - MetalIconFactory.getHorizontalSliderThumbIcon(), - "Slider.majorTickLength", new Integer(6), - "Slider.shadow", getControlShadow(), - "Slider.trackWidth", new Integer(7), - "Slider.verticalThumbIcon", - MetalIconFactory.getVerticalSliderThumbIcon(), - - "Spinner.arrowButtonInsets", new InsetsUIResource(0, 0, 0, 0), - "Spinner.background", getControl(), - "Spinner.border", MetalBorders.getTextFieldBorder(), - "Spinner.font", getControlTextFont(), - "Spinner.foreground", getControl(), - - "SplitPane.background", getControl(), - "SplitPane.darkShadow", getControlDarkShadow(), - "SplitPane.dividerFocusColor", getPrimaryControl(), - "SplitPane.dividerSize", new Integer(10), - "SplitPane.highlight", getControlHighlight(), - "SplitPane.shadow", getControlShadow(), - - "SplitPaneDivider.draggingColor", Color.DARK_GRAY, - - "TabbedPane.background", getControlShadow(), - "TabbedPane.contentBorderInsets", new InsetsUIResource(2, 2, 3, 3), - "TabbedPane.contentOpaque", Boolean.TRUE, - "TabbedPane.darkShadow", getControlDarkShadow(), - "TabbedPane.focus", getPrimaryControlDarkShadow(), - "TabbedPane.font", getControlTextFont(), - "TabbedPane.foreground", getControlTextColor(), - "TabbedPane.highlight", getControlHighlight(), - "TabbedPane.light", getControl(), - "TabbedPane.selected", getControl(), // overridden in OceanTheme - "TabbedPane.selectHighlight", getControlHighlight(), - "TabbedPane.selectedTabPadInsets", new InsetsUIResource(2, 2, 2, 1), - "TabbedPane.shadow", getControlShadow(), - "TabbedPane.tabAreaBackground", getControl(), // overridden in OceanTheme - "TabbedPane.tabAreaInsets", new InsetsUIResource(4, 2, 0, 6), // dito - "TabbedPane.tabInsets", new InsetsUIResource(0, 9, 1, 9), - - // new properties in OceanTheme: - // TabbedPane.contentAreaColor - // TabbedPane.unselectedBackground - - "Table.background", getWindowBackground(), - "Table.focusCellBackground", getWindowBackground(), - "Table.focusCellForeground", getControlTextColor(), - "Table.foreground", getControlTextColor(), - "Table.focusCellHighlightBorder", - new BorderUIResource.LineBorderUIResource(getFocusColor()), - "Table.focusCellBackground", getWindowBackground(), - "Table.gridColor", getControlDarkShadow(), - "Table.selectionBackground", new ColorUIResource(204, 204, 255), - "Table.selectionForeground", new ColorUIResource(0, 0, 0), - - "TableHeader.background", getControl(), - "TableHeader.cellBorder", new MetalBorders.TableHeaderBorder(), - "TableHeader.foreground", getControlTextColor(), - - "TextArea.background", getWindowBackground(), - "TextArea.caretForeground", getUserTextColor(), - "TextArea.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "TextArea.foreground", getUserTextColor(), - "TextArea.inactiveForeground", getInactiveSystemTextColor(), - "TextArea.selectionBackground", getTextHighlightColor(), - "TextArea.selectionForeground", getHighlightedTextColor(), - - "TextField.background", getWindowBackground(), - "TextField.border", - new BorderUIResource(MetalBorders.getTextFieldBorder()), - "TextField.caretForeground", getUserTextColor(), - "TextField.darkShadow", getControlDarkShadow(), - "TextField.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "TextField.foreground", getUserTextColor(), - "TextField.highlight", getControlHighlight(), - "TextField.inactiveBackground", getControl(), - "TextField.inactiveForeground", getInactiveSystemTextColor(), - "TextField.light", getControlHighlight(), - "TextField.selectionBackground", getTextHighlightColor(), - "TextField.selectionForeground", getHighlightedTextColor(), - "TextField.shadow", getControlShadow(), - - "TextPane.background", getWindowBackground(), - "TextPane.caretForeground", getUserTextColor(), - "TextPane.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "TextPane.foreground", getUserTextColor(), - "TextPane.inactiveForeground", getInactiveSystemTextColor(), - "TextPane.selectionBackground", getTextHighlightColor(), - "TextPane.selectionForeground", getHighlightedTextColor(), - - "TitledBorder.border", new LineBorderUIResource(getPrimaryControl(), 1), - "TitledBorder.font", getControlTextFont(), - "TitledBorder.titleColor", getSystemTextColor(), - - "ToggleButton.background", getControl(), - "ToggleButton.border", MetalBorders.getToggleButtonBorder(), - "ToggleButton.darkShadow", getControlDarkShadow(), - "ToggleButton.disabledText", getInactiveControlTextColor(), - "ToggleButton.focus", getFocusColor(), - "ToggleButton.font", getControlTextFont(), - "ToggleButton.foreground", getControlTextColor(), - "ToggleButton.highlight", getControlHighlight(), - "ToggleButton.light", getControlHighlight(), - "ToggleButton.margin", new InsetsUIResource(2, 14, 2, 14), - "ToggleButton.select", getControlShadow(), - "ToggleButton.shadow", getControlShadow(), - - "ToolBar.background", getMenuBackground(), - "ToolBar.darkShadow", getControlDarkShadow(), - "ToolBar.dockingBackground", getMenuBackground(), - "ToolBar.dockingForeground", getPrimaryControlDarkShadow(), - "ToolBar.floatingBackground", getMenuBackground(), - "ToolBar.floatingForeground", getPrimaryControl(), - "ToolBar.font", getMenuTextFont(), - "ToolBar.foreground", getMenuForeground(), - "ToolBar.highlight", getControlHighlight(), - "ToolBar.light", getControlHighlight(), - "ToolBar.shadow", getControlShadow(), - "ToolBar.border", new MetalBorders.ToolBarBorder(), - "ToolBar.rolloverBorder", MetalBorders.getToolbarButtonBorder(), - "ToolBar.nonrolloverBorder", MetalBorders.getToolbarButtonBorder(), - - "ToolTip.background", getPrimaryControl(), - "ToolTip.backgroundInactive", getControl(), - "ToolTip.border", new BorderUIResource.LineBorderUIResource(getPrimaryControlDarkShadow(), 1), - "ToolTip.borderInactive", new BorderUIResource.LineBorderUIResource(getControlDarkShadow(), 1), - "ToolTip.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "ToolTip.foreground", getPrimaryControlInfo(), - "ToolTip.foregroundInactive", getControlDarkShadow(), - "ToolTip.hideAccelerator", Boolean.FALSE, - - "Tree.background", getWindowBackground(), - "Tree.closedIcon", MetalIconFactory.getTreeFolderIcon(), - "Tree.collapsedIcon", MetalIconFactory.getTreeControlIcon(true), - "Tree.expandedIcon", MetalIconFactory.getTreeControlIcon(false), - "Tree.font", new FontUIResource("Dialog", Font.PLAIN, 12), - "Tree.foreground", getUserTextColor(), - "Tree.hash", getPrimaryControl(), - "Tree.leafIcon", MetalIconFactory.getTreeLeafIcon(), - "Tree.leftChildIndent", new Integer(7), - "Tree.line", getPrimaryControl(), - "Tree.openIcon", MetalIconFactory.getTreeFolderIcon(), - "Tree.rightChildIndent", new Integer(13), - "Tree.rowHeight", new Integer(0), - "Tree.scrollsOnExpand", Boolean.TRUE, - "Tree.selectionBackground", getTextHighlightColor(), - "Tree.selectionBorder", new BorderUIResource.LineBorderUIResource(new Color(102, 102, 153)), - "Tree.selectionBorderColor", getFocusColor(), - "Tree.selectionForeground", getHighlightedTextColor(), - "Tree.textBackground", getWindowBackground(), - "Tree.textForeground", getUserTextColor(), - - "Viewport.background", getControl(), - "Viewport.foreground", getUserTextColor() - }; - defaults.putDefaults(myDefaults); - } - - /** - * Initializes the system color defaults. - * - * In particular this sets the following keys: - * - * <table> - * <tr> - * <th>Key</th><th>Value</th><th>Description</th> - * </tr><tr> - * <td>control</td><td>0xcccccc</td><td>The default color for components</td> - * </tr> - * </table> - */ - protected void initSystemColorDefaults(UIDefaults defaults) - { - super.initSystemColorDefaults(defaults); - Object[] uiDefaults; - uiDefaults = new Object[] { - "control", new ColorUIResource(getControl()), - "desktop", new ColorUIResource(getDesktopColor()) - }; - defaults.putDefaults(uiDefaults); - } - - /** - * Returns the current theme for the Metal look and feel. The default is - * an instance of {@link OceanTheme}. - * - * @return The current theme (never <code>null</code>). - * - * @see #setCurrentTheme(MetalTheme) - */ - public static MetalTheme getCurrentTheme() - { - if (theme == null) - { - // swing.metalTheme property documented here: - // http://java.sun.com/j2se/1.5.0/docs/guide/swing/1.5/index.html - if ("steel".equals(SystemProperties.getProperty("swing.metalTheme"))) - theme = new DefaultMetalTheme(); - else - theme = new OceanTheme(); - } - return theme; - } - - /** - * Returns <code>true</code> because the Metal look - * and feel supports window decorations for toplevel - * containers. - * - * @return <code>true</code> - */ - public boolean getSupportsWindowDecorations() - { - return true; - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalMenuBarUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalMenuBarUI.java deleted file mode 100644 index 35f2b05..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalMenuBarUI.java +++ /dev/null @@ -1,94 +0,0 @@ -/* MetalMenuBarUI.java -- MenuBar UI for the Metal L&F - Copyright (C) 2005, 2006 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.plaf.metal; - -import java.awt.Graphics; - -import javax.swing.JComponent; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicMenuBarUI; - -/** - * A UI implementation for MenuBar in the Metal Look & Feel. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public class MetalMenuBarUI extends BasicMenuBarUI -{ - /** - * Creates and returns a new instance of this UI for the specified component. - * - * @param c the component to create a UI for - * - * @return the UI for the component - */ - public static ComponentUI createUI(JComponent c) - { - return new MetalMenuBarUI(); - } - - - /** - * If the property <code>MenuBar.gradient</code> is set, then a gradient - * is painted as background, otherwise the normal superclass behaviour is - * called. - */ - public void update(Graphics g, JComponent c) - { - int height = c.getHeight(); - if (c.isOpaque() - && UIManager.get("MenuBar.gradient") != null - && c.getBackground() instanceof UIResource - && height > 2) - { - MetalUtils.paintGradient(g, 0, 0, c.getWidth(), height, - SwingConstants.VERTICAL, "MenuBar.gradient"); - - paint(g, c); - } - else - super.update(g, c); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java deleted file mode 100644 index 7c580f9..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.java +++ /dev/null @@ -1,77 +0,0 @@ -/* MetalPopupMenuSeparatorUI.java - Copyright (C) 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.plaf.metal; - -import javax.swing.JComponent; -import javax.swing.JPopupMenu; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate for the {@link JPopupMenu.Separator} component. - */ -public class MetalPopupMenuSeparatorUI - extends MetalSeparatorUI -{ - - // FIXME: maybe replace by a Map of instances when this becomes stateful - /** The shared UI instance for MetalPopupMenuSeparatorUIs */ - private static MetalPopupMenuSeparatorUI instance; - - /** - * Constructs a new instance of <code>MetalPopupMenuSeparatorUI</code>. - */ - public MetalPopupMenuSeparatorUI() - { - super(); - } - - /** - * Returns a shared instance of <code>MetalPopupMenuSeparatorUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A shared instance of <code>MetalPopupMenuSeparatorUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - if (instance == null) - instance = new MetalPopupMenuSeparatorUI(); - return instance; - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalProgressBarUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalProgressBarUI.java deleted file mode 100644 index 005c5f0..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalProgressBarUI.java +++ /dev/null @@ -1,147 +0,0 @@ -/* MetalProgressBarUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Insets; - -import javax.swing.JComponent; -import javax.swing.JProgressBar; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicProgressBarUI; - -/** - * A UI delegate for the {@link JProgressBar} component. - */ -public class MetalProgressBarUI extends BasicProgressBarUI -{ - /** - * Constructs a new instance of <code>MetalProgressBarUI</code>. - */ - public MetalProgressBarUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalProgressBarUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalProgressBarUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalProgressBarUI(); - } - - /** - * Performs the painting for determinate progress bars. This calls the - * superclass behaviour and then adds some highlighting to the upper and left - * edge of the progress bar. - * - * @param g the graphics context - * @param c not used here - */ - public void paintDeterminate(Graphics g, JComponent c) - { - super.paintDeterminate(g, c); - Color saved = g.getColor(); - Insets i = progressBar.getInsets(); - int w = progressBar.getWidth(); - int h = progressBar.getHeight(); - int orientation = progressBar.getOrientation(); - - Color shadow = MetalLookAndFeel.getControlShadow(); - g.setColor(shadow); - - g.drawLine(i.left, i.top, w - i.right, i.top); - g.drawLine(i.left, i.top, i.left, h - i.bottom); - int full = getAmountFull(i, w, h); - if (full > 0) - { - Color darkShadow = MetalLookAndFeel.getPrimaryControlDarkShadow(); - g.setColor(darkShadow); - if (orientation == JProgressBar.HORIZONTAL) - { - g.drawLine(i.left, i.top, i.left, h - i.bottom); - g.drawLine(i.left, i.top, i.left + full - 1, i.top); - } - else - { - if (full >= (h - i.top - i.bottom)) - g.drawLine(i.left, i.top, w - i.right, i.top); - g.drawLine(i.left, h - i.bottom, i.left, h - i.bottom - full); - } - } - g.setColor(saved); - } - - /** - * Performs the painting for indeterminate progress bars. This calls the - * superclass behaviour and then adds some highlighting to the upper and left - * edge of the progress bar. - * - * @param g the graphics context - * @param c not used here - */ - public void paintIndeterminate(Graphics g, JComponent c) - { - super.paintIndeterminate(g, c); - Color saved = g.getColor(); - Insets i = progressBar.getInsets(); - int w = progressBar.getWidth(); - int h = progressBar.getHeight(); - Color shadow = MetalLookAndFeel.getControlShadow(); - g.setColor(shadow); - g.drawLine(i.left, i.top, w - i.right, i.top); - g.drawLine(i.left, i.top, i.left, h - i.bottom); - - boxRect = getBox(boxRect); - Color darkShadow = MetalLookAndFeel.getPrimaryControlDarkShadow(); - g.setColor(darkShadow); - int orientation = progressBar.getOrientation(); - if (orientation == JProgressBar.HORIZONTAL) - g.drawLine(boxRect.x, i.top, boxRect.x + boxRect.width - 1, i.top); - else - g.drawLine(i.left, boxRect.y, i.left, boxRect.y + boxRect.height - 1); - g.setColor(saved); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalRadioButtonUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalRadioButtonUI.java deleted file mode 100644 index 0f7f3b1..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalRadioButtonUI.java +++ /dev/null @@ -1,183 +0,0 @@ -/* MetalRadioButtonUI.java - Copyright (C) 2005, 2006, 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.plaf.metal; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.AbstractButton; -import javax.swing.JComponent; -import javax.swing.JRadioButton; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicRadioButtonUI; - - -/** - * A UI delegate for the {@link JRadioButton} component. - */ -public class MetalRadioButtonUI - extends BasicRadioButtonUI -{ - - /** Used to draw the focus rectangle. */ - protected Color focusColor; - - /** Used to fill the icon when the button is pressed. */ - protected Color selectColor; - - /** Used to draw disabled text. */ - protected Color disabledTextColor; - - /** - * Constructs a new instance of <code>MetalRadioButtonUI</code>. - */ - public MetalRadioButtonUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalRadioButtonUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalRadioButtonUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalRadioButtonUI(); - } - - /** - * Sets the default values for the specified button. - * - * @param b the button. - */ - public void installDefaults(AbstractButton b) - { - super.installDefaults(b); - String prefix = getPropertyPrefix(); - disabledTextColor = UIManager.getColor(prefix + "disabledText"); - focusColor = UIManager.getColor(prefix + "focus"); - selectColor = UIManager.getColor(prefix + "select"); - } - - /** - * Clears any defaults set in the installDefaults() method. - * - * @param b the {@link JRadioButton}. - */ - protected void uninstallDefaults(AbstractButton b) - { - super.uninstallDefaults(b); - disabledTextColor = null; - focusColor = null; - selectColor = null; - } - - /** - * Returns the color used to fill the {@link JRadioButton}'s icon when the - * button is pressed. The default color is obtained from the - * {@link UIManager} defaults via an entry with the key - * <code>RadioButton.select</code>. - * - * @return The select color. - */ - protected Color getSelectColor() - { - return selectColor; - } - - /** - * Returns the color for the {@link JRadioButton}'s text when the button is - * disabled. The default color is obtained from the {@link UIManager} - * defaults via an entry with the key <code>RadioButton.disabledText</code>. - * - * @return The disabled text color. - */ - protected Color getDisabledTextColor() - { - return disabledTextColor; - } - - /** - * Returns the color used to draw the focus rectangle when the - * {@link JRadioButton} has the focus. The default color is obtained from - * the {@link UIManager} defaults via an entry with the key - * <code>RadioButton.focus</code>. - * - * @return The color used to draw the focus rectangle. - * - * @see #paintFocus(Graphics, Rectangle, Dimension) - */ - protected Color getFocusColor() - { - return focusColor; - } - - /** - * Paints the {@link JRadioButton}. - * - * @param g the graphics device. - * @param c the component (an instance of {@link JRadioButton}). - */ - public void paint(Graphics g, JComponent c) - { - super.paint(g, c); - // FIXME: disabled text isn't being drawn correctly, it's possible that - // it could be done here... - } - - /** - * Paints the focus rectangle for the {@link JRadioButton}. - * - * @param g the graphics device. - * @param t the bounding rectangle for the text. - * @param d ??? - */ - protected void paintFocus(Graphics g, Rectangle t, Dimension d) - { - g.setColor(focusColor); - g.drawRect(t.x - 1, t.y - 1, t.width + 1, t.height + 1); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java deleted file mode 100644 index 84f1303..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalRootPaneUI.java +++ /dev/null @@ -1,1075 +0,0 @@ -/* MetalRootPaneUI.java - Copyright (C) 2005, 2006 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.plaf.metal; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Frame; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.LayoutManager; -import java.awt.LayoutManager2; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; - -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JLayeredPane; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JRootPane; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.AbstractBorder; -import javax.swing.event.MouseInputAdapter; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicRootPaneUI; - -/** - * A UI delegate for the {@link JRootPane} component. This implementation - * supports the JRootPane <code>windowDecorationStyle</code> property. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.4 - */ -public class MetalRootPaneUI - extends BasicRootPaneUI -{ - - /** - * The border that is used on JRootPane when the windowDecorationStyle - * property of the JRootPane is set to a different value than NONE. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private static class MetalFrameBorder - extends AbstractBorder - { - /** - * Returns the border insets. - * - * @param c the component - * @param newInsets the insets to be filled with the return value, may be - * <code>null</code> in which case a new object is created - * - * @return the border insets - */ - public Insets getBorderInsets(Component c, Insets newInsets) - { - if (newInsets == null) - newInsets = new Insets(5, 5, 5, 5); - else - { - newInsets.top = 5; - newInsets.left = 5; - newInsets.bottom = 5; - newInsets.right = 5; - } - return newInsets; - } - - /** - * Returns the border insets. - * - * @param c the component - * - * @return the border insets - */ - public Insets getBorderInsets(Component c) - { - return getBorderInsets(c, null); - } - - /** - * Paints the border for the specified component. - * - * @param c the component - * @param g the graphics device - * @param x the x-coordinate - * @param y the y-coordinate - * @param w the width - * @param h the height - */ - public void paintBorder(Component c, Graphics g, int x, int y, int w, - int h) - { - JRootPane f = (JRootPane) c; - Window frame = SwingUtilities.getWindowAncestor(f); - if (frame.isActive()) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - - // Fill the border background. - g.fillRect(x, y, w, 5); - g.fillRect(x, y, 5, h); - g.fillRect(x + w - 5, y, 5, h); - g.fillRect(x, y + h - 5, w, 5); - - // Draw a dot in each corner. - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(x, y, 1, 1); - g.fillRect(x + w - 1, y, 1, 1); - g.fillRect(x + w - 1, y + h - 1, 1, 1); - g.fillRect(x, y + h - 1, 1, 1); - - // Draw the lines. - g.setColor(MetalLookAndFeel.getBlack()); - g.drawLine(x + 14, y + 2, x + w - 15, y + 2); - g.drawLine(x + 14, y + h - 3, x + w - 15, y + h - 3); - g.drawLine(x + 2, y + 14, x + 2, y + h - 15); - g.drawLine(x + w - 3, y + 14, x + w - 3, y + h - 15); - - // Draw the line highlights. - if (frame.isActive()) - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x + 15, y + 3, x + w - 14, y + 3); - g.drawLine(x + 15, y + h - 2, x + w - 14, y + h - 2); - g.drawLine(x + 3, y + 15, x + 3, y + h - 14); - g.drawLine(x + w - 2, y + 15, x + w - 2, y + h - 14); - } - } - - /** - * The component that renders the title bar for frames. This duplicates - * most of {@link MetalInternalFrameTitlePane}. It is not reasonably possible - * to reuse that class because that is bound to the JInternalFrame and we - * need to handle JFrames/JRootPanes here. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private static class MetalTitlePane extends JComponent - { - - /** - * Handles dragging of the title pane and moves the window accordingly. - */ - private class MouseHandler - extends MouseInputAdapter - { - /** - * The point where the dragging started. - */ - Point lastDragLocation; - - /** - * Receives notification when the mouse gets pressed on the title pane. - * This updates the lastDragLocation. - * - * @param ev the mouse event - */ - public void mousePressed(MouseEvent ev) - { - lastDragLocation = ev.getPoint(); - } - - /** - * Receives notification when the mouse is dragged on the title pane. - * This will move the nearest window accordingly. - * - * @param ev the mouse event - */ - public void mouseDragged(MouseEvent ev) - { - Point dragLocation = ev.getPoint(); - int deltaX = dragLocation.x - lastDragLocation.x; - int deltaY = dragLocation.y - lastDragLocation.y; - Window window = SwingUtilities.getWindowAncestor(rootPane); - Point loc = window.getLocation(); - window.setLocation(loc.x + deltaX, loc.y + deltaY); - // Note that we do not update the lastDragLocation. This is because - // we move the underlying window while dragging the component, which - // results in having the same lastDragLocation under the mouse while - // dragging. - } - } - - /** - * The Action responsible for closing the JInternalFrame. - */ - private class CloseAction extends AbstractAction - { - /** - * Creates a new action. - */ - public CloseAction() - { - super("Close"); - } - - /** - * This method is called when something closes the frame. - * - * @param e the ActionEvent - */ - public void actionPerformed(ActionEvent e) - { - Window frame = SwingUtilities.getWindowAncestor(rootPane); - if (frame instanceof JFrame) - { - JFrame jframe = (JFrame) frame; - switch (jframe.getDefaultCloseOperation()) - { - case JFrame.EXIT_ON_CLOSE: - jframe.setVisible(false); - jframe.dispose(); - System.exit(0); - break; - case JFrame.DISPOSE_ON_CLOSE: - jframe.setVisible(false); - jframe.dispose(); - break; - case JFrame.HIDE_ON_CLOSE: - jframe.setVisible(false); - break; - case JFrame.DO_NOTHING_ON_CLOSE: - default: - break; - } - } - else if (frame instanceof JDialog) - { - JDialog jdialog = (JDialog) frame; - switch (jdialog.getDefaultCloseOperation()) - { - case JFrame.DISPOSE_ON_CLOSE: - jdialog.setVisible(false); - jdialog.dispose(); - break; - case JFrame.HIDE_ON_CLOSE: - jdialog.setVisible(false); - break; - case JFrame.DO_NOTHING_ON_CLOSE: - default: - break; - } - } - } - } - - /** - * This action is performed when the iconify button is pressed. - */ - private class IconifyAction - extends AbstractAction - { - - public void actionPerformed(ActionEvent event) - { - Window w = SwingUtilities.getWindowAncestor(rootPane); - if (w instanceof Frame) - { - Frame f = (Frame) w; - int state = f.getExtendedState(); - f.setExtendedState(Frame.ICONIFIED); - } - } - - } - - /** - * This action is performed when the maximize button is pressed. - */ - private class MaximizeAction - extends AbstractAction - { - - public void actionPerformed(ActionEvent event) - { - Window w = SwingUtilities.getWindowAncestor(rootPane); - if (w instanceof Frame) - { - Frame f = (Frame) w; - int state = f.getExtendedState(); - f.setExtendedState(Frame.MAXIMIZED_BOTH); - } - } - } - - /** - * This helper class is used to create the minimize, maximize and close - * buttons in the top right corner of the Title Pane. These buttons are - * special since they cannot be given focus and have no border. - */ - private class PaneButton extends JButton - { - /** - * Creates a new PaneButton object with the given Action. - * - * @param a The Action that the button uses. - */ - public PaneButton(Action a) - { - super(a); - setMargin(new Insets(0, 0, 0, 0)); - } - - /** - * This method returns true if the Component can be focused. - * - * @return false. - */ - public boolean isFocusable() - { - // These buttons cannot be given focus. - return false; - } - - } - - /** - * The layout for the JRootPane when the <code>windowDecorationStyle</code> - * property is set. In addition to the usual JRootPane.RootLayout behaviour - * this lays out the titlePane. - * - * @author Roman Kennke (kennke@aicas.com) - */ - private class MetalTitlePaneLayout implements LayoutManager - { - /** - * Creates a new <code>TitlePaneLayout</code> object. - */ - public MetalTitlePaneLayout() - { - // Do nothing. - } - - /** - * Adds a Component to the Container. - * - * @param name The name to reference the added Component by. - * @param c The Component to add. - */ - public void addLayoutComponent(String name, Component c) - { - // Do nothing. - } - - /** - * This method is called to lay out the children of the Title Pane. - * - * @param c The Container to lay out. - */ - public void layoutContainer(Container c) - { - - Dimension size = c.getSize(); - Insets insets = c.getInsets(); - int width = size.width - insets.left - insets.right; - int height = size.height - insets.top - insets.bottom; - - int loc = width - insets.right - 1; - int top = insets.top + 2; - int buttonHeight = height - 4; - if (closeButton.isVisible()) - { - int buttonWidth = closeIcon.getIconWidth(); - loc -= buttonWidth + 2; - closeButton.setBounds(loc, top, buttonWidth, buttonHeight); - loc -= 6; - } - - if (maxButton.isVisible()) - { - int buttonWidth = maxIcon.getIconWidth(); - loc -= buttonWidth + 4; - maxButton.setBounds(loc, top, buttonWidth, buttonHeight); - } - - if (iconButton.isVisible()) - { - int buttonWidth = minIcon.getIconWidth(); - loc -= buttonWidth + 4; - iconButton.setBounds(loc, top, buttonWidth, buttonHeight); - loc -= 2; - } - - Dimension titlePreferredSize = title.getPreferredSize(); - title.setBounds(insets.left + 5, insets.top, - Math.min(titlePreferredSize.width, loc - insets.left - 10), - height); - - } - - /** - * This method returns the minimum size of the given Container given the - * children that it has. - * - * @param c The Container to get a minimum size for. - * - * @return The minimum size of the Container. - */ - public Dimension minimumLayoutSize(Container c) - { - return preferredLayoutSize(c); - } - - /** - * Returns the preferred size of the given Container taking - * into account the children that it has. - * - * @param c The Container to lay out. - * - * @return The preferred size of the Container. - */ - public Dimension preferredLayoutSize(Container c) - { - return new Dimension(22, 22); - } - - /** - * Removes a Component from the Container. - * - * @param c The Component to remove. - */ - public void removeLayoutComponent(Component c) - { - // Nothing to do here. - } - } - - JRootPane rootPane; - - /** The button that closes the JInternalFrame. */ - JButton closeButton; - - /** The button that iconifies the JInternalFrame. */ - JButton iconButton; - - /** The button that maximizes the JInternalFrame. */ - JButton maxButton; - - Icon minIcon; - - /** The icon displayed in the maximize button. */ - Icon maxIcon; - - /** The icon displayed in the iconify button. */ - private Icon iconIcon; - - /** The icon displayed in the close button. */ - Icon closeIcon; - - /** - * The background color of the TitlePane when the JInternalFrame is not - * selected. - */ - private Color notSelectedTitleColor; - - /** - * The background color of the TitlePane when the JInternalFrame is - * selected. - */ - private Color selectedTitleColor; - - /** - * The label used to display the title. This label is not added to the - * TitlePane. - */ - JLabel title; - - /** The action associated with closing the JInternalFrame. */ - private Action closeAction; - - /** The action associated with iconifying the JInternalFrame. */ - private Action iconifyAction; - - /** The action associated with maximizing the JInternalFrame. */ - private Action maximizeAction; - - /** The JMenuBar that is located at the top left of the Title Pane. */ - private JMenuBar menuBar; - - /** The JMenu inside the menuBar. */ - protected JMenu windowMenu; - - MetalTitlePane(JRootPane rp) - { - rootPane = rp; - setLayout(createLayout()); - title = new JLabel(); - title.setHorizontalAlignment(SwingConstants.LEFT); - title.setHorizontalTextPosition(SwingConstants.LEFT); - title.setOpaque(false); - installTitlePane(); - } - - protected LayoutManager createLayout() - { - return new MetalTitlePaneLayout(); - } - - /** - * This method installs the TitlePane onto the JInternalFrameTitlePane. It - * also creates any children components that need to be created and adds - * listeners to the appropriate components. - */ - protected void installTitlePane() - { - installDefaults(); - installListeners(); - createActions(); - assembleSystemMenu(); - createButtons(); - setButtonIcons(); - addSubComponents(); - enableActions(); - } - - private void enableActions() - { - // TODO: Implement this. - } - - private void addSubComponents() - { - add(menuBar); - add(closeButton); - add(iconButton); - add(maxButton); - } - - private void installListeners() - { - MouseInputAdapter mouseHandler = new MouseHandler(); - addMouseListener(mouseHandler); - addMouseMotionListener(mouseHandler); - } - - private void createActions() - { - closeAction = new CloseAction(); - iconifyAction = new IconifyAction(); - maximizeAction = new MaximizeAction(); - } - - private void assembleSystemMenu() - { - menuBar = createSystemMenuBar(); - windowMenu = createSystemMenu(); - menuBar.add(windowMenu); - addSystemMenuItems(windowMenu); - enableActions(); - } - - protected JMenuBar createSystemMenuBar() - { - if (menuBar == null) - menuBar = new JMenuBar(); - menuBar.removeAll(); - return menuBar; - } - - protected JMenu createSystemMenu() - { - if (windowMenu == null) - windowMenu = new JMenu(); - windowMenu.removeAll(); - return windowMenu; - } - - private void addSystemMenuItems(JMenu menu) - { - // TODO: Implement this. - } - - protected void createButtons() - { - closeButton = new PaneButton(closeAction); - closeButton.setText(null); - iconButton = new PaneButton(iconifyAction); - iconButton.setText(null); - maxButton = new PaneButton(maximizeAction); - maxButton.setText(null); - closeButton.setBorderPainted(false); - closeButton.setContentAreaFilled(false); - iconButton.setBorderPainted(false); - iconButton.setContentAreaFilled(false); - maxButton.setBorderPainted(false); - maxButton.setContentAreaFilled(false); - } - - protected void setButtonIcons() - { - if (closeIcon != null && closeButton != null) - closeButton.setIcon(closeIcon); - if (iconIcon != null && iconButton != null) - iconButton.setIcon(iconIcon); - if (maxIcon != null && maxButton != null) - maxButton.setIcon(maxIcon); - } - - /** - * Paints a representation of the current state of the internal frame. - * - * @param g the graphics device. - */ - public void paintComponent(Graphics g) - { - Window frame = SwingUtilities.getWindowAncestor(rootPane); - Color savedColor = g.getColor(); - paintTitleBackground(g); - paintChildren(g); - Dimension d = getSize(); - if (frame.isActive()) - g.setColor(MetalLookAndFeel.getPrimaryControlDarkShadow()); - else - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - - // put a dot in each of the top corners - g.drawLine(0, 0, 0, 0); - g.drawLine(d.width - 1, 0, d.width - 1, 0); - - g.drawLine(0, d.height - 1, d.width - 1, d.height - 1); - - // draw the metal pattern - if (UIManager.get("InternalFrame.activeTitleGradient") != null - && frame.isActive()) - { - MetalUtils.paintGradient(g, 0, 0, getWidth(), getHeight(), - SwingConstants.VERTICAL, - "InternalFrame.activeTitleGradient"); - } - - Rectangle b = title.getBounds(); - int startX = b.x + b.width + 5; - int endX = startX; - if (iconButton.isVisible()) - endX = Math.max(iconButton.getX(), endX); - else if (maxButton.isVisible()) - endX = Math.max(maxButton.getX(), endX); - else if (closeButton.isVisible()) - endX = Math.max(closeButton.getX(), endX); - endX -= 7; - if (endX > startX) - MetalUtils.fillMetalPattern(this, g, startX, 3, endX - startX, getHeight() - 6, Color.white, Color.gray); - g.setColor(savedColor); - } - - /** - * This method paints the TitlePane's background. - * - * @param g The Graphics object to paint with. - */ - protected void paintTitleBackground(Graphics g) - { - Window frame = SwingUtilities.getWindowAncestor(rootPane); - - if (!isOpaque()) - return; - - Color saved = g.getColor(); - Dimension dims = getSize(); - - Color bg = getBackground(); - if (frame.isActive()) - bg = selectedTitleColor; - else - bg = notSelectedTitleColor; - g.setColor(bg); - g.fillRect(0, 0, dims.width, dims.height); - g.setColor(saved); - } - - /** - * This method installs the defaults determined by the look and feel. - */ - private void installDefaults() - { - title.setFont(UIManager.getFont("InternalFrame.titleFont")); - selectedTitleColor = UIManager.getColor("InternalFrame.activeTitleBackground"); - notSelectedTitleColor = UIManager.getColor("InternalFrame.inactiveTitleBackground"); - closeIcon = UIManager.getIcon("InternalFrame.closeIcon"); - iconIcon = UIManager.getIcon("InternalFrame.iconifyIcon"); - maxIcon = UIManager.getIcon("InternalFrame.maximizeIcon"); - minIcon = MetalIconFactory.getInternalFrameAltMaximizeIcon(16); - Frame frame = (Frame) SwingUtilities.getWindowAncestor(rootPane); - title = new JLabel(frame.getTitle(), - MetalIconFactory.getInternalFrameDefaultMenuIcon(), - SwingConstants.LEFT); - } - } - - private static class MetalRootLayout - implements LayoutManager2 - { - - /** - * The cached layout info for the glass pane. - */ - private Rectangle glassPaneBounds; - - /** - * The cached layout info for the layered pane. - */ - private Rectangle layeredPaneBounds; - - /** - * The cached layout info for the content pane. - */ - private Rectangle contentPaneBounds; - - /** - * The cached layout info for the menu bar. - */ - private Rectangle menuBarBounds; - - /** - * The cached layout info for the title pane. - */ - private Rectangle titlePaneBounds; - - /** - * The cached preferred size. - */ - private Dimension prefSize; - - /** - * The title pane for l&f decorated frames. - */ - private MetalTitlePane titlePane; - - /** - * Creates a new MetalRootLayout. - * - * @param tp the title pane - */ - MetalRootLayout(MetalTitlePane tp) - { - titlePane = tp; - } - - public void addLayoutComponent(Component component, Object constraints) - { - // Nothing to do here. - } - - public Dimension maximumLayoutSize(Container target) - { - return preferredLayoutSize(target); - } - - public float getLayoutAlignmentX(Container target) - { - return 0.0F; - } - - public float getLayoutAlignmentY(Container target) - { - return 0.0F; - } - - public void invalidateLayout(Container target) - { - synchronized (this) - { - glassPaneBounds = null; - layeredPaneBounds = null; - contentPaneBounds = null; - menuBarBounds = null; - titlePaneBounds = null; - prefSize = null; - } - } - - public void addLayoutComponent(String name, Component component) - { - // Nothing to do here. - } - - public void removeLayoutComponent(Component component) - { - // TODO Auto-generated method stub - - } - - public Dimension preferredLayoutSize(Container parent) - { - JRootPane rp = (JRootPane) parent; - JLayeredPane layeredPane = rp.getLayeredPane(); - Component contentPane = rp.getContentPane(); - Component menuBar = rp.getJMenuBar(); - - // We must synchronize here, otherwise we cannot guarantee that the - // prefSize is still non-null when returning. - synchronized (this) - { - if (prefSize == null) - { - Insets i = parent.getInsets(); - prefSize = new Dimension(i.left + i.right, i.top + i.bottom); - Dimension contentPrefSize = contentPane.getPreferredSize(); - prefSize.width += contentPrefSize.width; - prefSize.height += contentPrefSize.height - + titlePane.getPreferredSize().height; - if (menuBar != null) - { - Dimension menuBarSize = menuBar.getPreferredSize(); - if (menuBarSize.width > contentPrefSize.width) - prefSize.width += menuBarSize.width - contentPrefSize.width; - prefSize.height += menuBarSize.height; - } - } - // Return a copy here so the cached value won't get trashed by some - // other component. - return new Dimension(prefSize); - } - } - - public Dimension minimumLayoutSize(Container parent) - { - return preferredLayoutSize(parent); - } - - public void layoutContainer(Container parent) - { - JRootPane rp = (JRootPane) parent; - JLayeredPane layeredPane = rp.getLayeredPane(); - Component contentPane = rp.getContentPane(); - Component menuBar = rp.getJMenuBar(); - Component glassPane = rp.getGlassPane(); - - if (glassPaneBounds == null || layeredPaneBounds == null - || contentPaneBounds == null || menuBarBounds == null) - { - Insets i = rp.getInsets(); - int containerWidth = parent.getBounds().width - i.left - i.right; - int containerHeight = parent.getBounds().height - i.top - i.bottom; - - // 1. The glassPane fills entire viewable region (bounds - insets). - // 2. The layeredPane filles entire viewable region. - // 3. The titlePane is placed at the upper edge of the layeredPane. - // 4. The menuBar is positioned at the upper edge of layeredPane. - // 5. The contentPane fills viewable region minus menuBar minus - // titlePane, if present. - - // +-------------------------------+ - // | JLayeredPane | - // | +--------------------------+ | - // | | titlePane + | - // | +--------------------------+ | - // | +--------------------------+ | - // | | menuBar | | - // | +--------------------------+ | - // | +--------------------------+ | - // | |contentPane | | - // | | | | - // | | | | - // | | | | - // | +--------------------------+ | - // +-------------------------------+ - - // Setup titlePaneBounds. - if (titlePaneBounds == null) - titlePaneBounds = new Rectangle(); - titlePaneBounds.width = containerWidth; - titlePaneBounds.height = titlePane.getPreferredSize().height; - - // Setup menuBarBounds. - if (menuBarBounds == null) - menuBarBounds = new Rectangle(); - menuBarBounds.setBounds(0, - titlePaneBounds.y + titlePaneBounds.height, - containerWidth, 0); - if (menuBar != null) - { - Dimension menuBarSize = menuBar.getPreferredSize(); - if (menuBarSize.height > containerHeight) - menuBarBounds.height = containerHeight; - else - menuBarBounds.height = menuBarSize.height; - } - - // Setup contentPaneBounds. - if (contentPaneBounds == null) - contentPaneBounds = new Rectangle(); - contentPaneBounds.setBounds(0, - menuBarBounds.y + menuBarBounds.height, - containerWidth, - containerHeight - menuBarBounds.y - - menuBarBounds.height); - glassPaneBounds = new Rectangle(i.left, i.top, containerWidth, containerHeight); - layeredPaneBounds = new Rectangle(i.left, i.top, containerWidth, containerHeight); - } - - // Layout components. - glassPane.setBounds(glassPaneBounds); - layeredPane.setBounds(layeredPaneBounds); - if (menuBar != null) - menuBar.setBounds(menuBarBounds); - contentPane.setBounds(contentPaneBounds); - titlePane.setBounds(titlePaneBounds); - } - - } - - /** - * The shared UI instance for MetalRootPaneUIs. - */ - private static MetalRootPaneUI instance; - - /** - * Constructs a shared instance of <code>MetalRootPaneUI</code>. - */ - public MetalRootPaneUI() - { - super(); - } - - /** - * Returns a shared instance of <code>MetalRootPaneUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A shared instance of <code>MetalRootPaneUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - if (instance == null) - instance = new MetalRootPaneUI(); - return instance; - } - - /** - * Installs this UI to the root pane. If the - * <code>windowDecorationsStyle</code> property is set on the root pane, - * the Metal window decorations are installed on the root pane. - * - * @param c - */ - public void installUI(JComponent c) - { - super.installUI(c); - JRootPane rp = (JRootPane) c; - if (rp.getWindowDecorationStyle() != JRootPane.NONE) - installWindowDecorations(rp); - } - - /** - * Uninstalls the UI from the root pane. This performs the superclass - * behaviour and uninstalls the window decorations that have possibly been - * installed by {@link #installUI}. - * - * @param c the root pane - */ - public void uninstallUI(JComponent c) - { - JRootPane rp = (JRootPane) c; - if (rp.getWindowDecorationStyle() != JRootPane.NONE) - uninstallWindowDecorations(rp); - super.uninstallUI(c); - } - - /** - * Receives notification if any of the JRootPane's property changes. In - * particular this catches changes to the <code>windowDecorationStyle</code> - * property and installs the window decorations accordingly. - * - * @param ev the property change event - */ - public void propertyChange(PropertyChangeEvent ev) - { - super.propertyChange(ev); - String propertyName = ev.getPropertyName(); - if (propertyName.equals("windowDecorationStyle")) - { - JRootPane rp = (JRootPane) ev.getSource(); - if (rp.getWindowDecorationStyle() != JRootPane.NONE) - installWindowDecorations(rp); - else - uninstallWindowDecorations(rp); - } - } - - /** - * Installs the window decorations to the root pane. This sets up a border, - * a title pane and a layout manager that can layout the root pane with that - * title pane. - * - * @param rp the root pane. - */ - private void installWindowDecorations(JRootPane rp) - { - rp.setBorder(new MetalFrameBorder()); - MetalTitlePane titlePane = new MetalTitlePane(rp); - rp.setLayout(new MetalRootLayout(titlePane)); - // We should have a contentPane already. - assert rp.getLayeredPane().getComponentCount() > 0 - : "We should have a contentPane already"; - - rp.getLayeredPane().add(titlePane, - JLayeredPane.FRAME_CONTENT_LAYER, 1); - } - - /** - * Uninstalls the window decorations from the root pane. This should rarely - * be necessary, but we do it anyway. - * - * @param rp the root pane - */ - private void uninstallWindowDecorations(JRootPane rp) - { - rp.setBorder(null); - JLayeredPane lp = rp.getLayeredPane(); - for (int i = lp.getComponentCount() - 1; i >= 0; --i) - { - if (lp.getComponent(i) instanceof MetalTitlePane) - { - lp.remove(i); - break; - } - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java deleted file mode 100644 index 5f0cbe4..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalScrollBarUI.java +++ /dev/null @@ -1,584 +0,0 @@ -/* MetalScrollBarUI.java - Copyright (C) 2005, 2006, 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.plaf.metal; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JScrollBar; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicScrollBarUI; - -/** - * A UI delegate for the {@link JScrollBar} component. - */ -public class MetalScrollBarUI extends BasicScrollBarUI -{ - - /** - * A property change handler for the UI delegate that monitors for - * changes to the "JScrollBar.isFreeStanding" property, and updates - * the buttons and track rendering as appropriate. - */ - class MetalScrollBarPropertyChangeHandler - extends BasicScrollBarUI.PropertyChangeHandler - { - /** - * Creates a new handler. - * - * @see #createPropertyChangeListener() - */ - public MetalScrollBarPropertyChangeHandler() - { - // Nothing to do here. - } - - /** - * Handles a property change event. If the event name is - * <code>JSlider.isFreeStanding</code>, this method updates the - * delegate, otherwise the event is passed up to the super class. - * - * @param e the property change event. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(FREE_STANDING_PROP)) - { - Boolean prop = (Boolean) e.getNewValue(); - isFreeStanding = prop == null ? true : prop.booleanValue(); - if (increaseButton != null) - increaseButton.setFreeStanding(isFreeStanding); - if (decreaseButton != null) - decreaseButton.setFreeStanding(isFreeStanding); - } - else - super.propertyChange(e); - } - } - - /** The name for the 'free standing' property. */ - public static final String FREE_STANDING_PROP = "JScrollBar.isFreeStanding"; - - /** The minimum thumb size for a scroll bar that is not free standing. */ - private static final Dimension MIN_THUMB_SIZE = new Dimension(15, 15); - - /** The minimum thumb size for a scroll bar that is free standing. */ - private static final Dimension MIN_THUMB_SIZE_FREE_STANDING - = new Dimension(17, 17); - - /** The button that increases the value in the scroll bar. */ - protected MetalScrollButton increaseButton; - - /** The button that decreases the value in the scroll bar. */ - protected MetalScrollButton decreaseButton; - - /** - * The scroll bar width. - */ - protected int scrollBarWidth; - - /** - * A flag that indicates whether the scroll bar is "free standing", which - * means it has complete borders and can be used anywhere in the UI. A - * scroll bar which is not free standing has borders missing from one - * side, and relies on being part of another container with its own borders - * to look right visually. */ - protected boolean isFreeStanding = true; - - /** - * The color for the scroll bar shadow (this is read from the UIDefaults in - * the installDefaults() method). - */ - Color scrollBarShadowColor; - - /** - * Constructs a new instance of <code>MetalScrollBarUI</code>, with no - * specific initialisation. - */ - public MetalScrollBarUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalScrollBarUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return An instance of MetalScrollBarUI - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalScrollBarUI(); - } - - /** - * Installs the defaults. - */ - protected void installDefaults() - { - // need to initialise isFreeStanding before calling the super class, - // so that the value is set when createIncreaseButton() and - // createDecreaseButton() are called (unless there is somewhere earlier - // that we can do this). - Boolean prop = (Boolean) scrollbar.getClientProperty(FREE_STANDING_PROP); - isFreeStanding = prop == null ? true : prop.booleanValue(); - scrollBarShadowColor = UIManager.getColor("ScrollBar.shadow"); - scrollBarWidth = UIManager.getInt("ScrollBar.width"); - super.installDefaults(); - } - - /** - * Creates a property change listener for the delegate to use. This - * overrides the method to provide a custom listener for the - * {@link MetalLookAndFeel} that can handle the - * <code>JScrollBar.isFreeStanding</code> property. - * - * @return A property change listener. - */ - protected PropertyChangeListener createPropertyChangeListener() - { - return new MetalScrollBarPropertyChangeHandler(); - } - - /** - * Creates a new button to use as the control at the lower end of the - * {@link JScrollBar}. This method assigns the new button (an instance of - * {@link MetalScrollButton} to the {@link #decreaseButton} field, and also - * returns the button. The button width is determined by the - * <code>ScrollBar.width</code> setting in the UI defaults. - * - * @param orientation the orientation of the button ({@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} or {@link #WEST}). - * - * @return The button. - */ - protected JButton createDecreaseButton(int orientation) - { - decreaseButton = new MetalScrollButton(orientation, scrollBarWidth, - isFreeStanding); - return decreaseButton; - } - - /** - * Creates a new button to use as the control at the upper end of the - * {@link JScrollBar}. This method assigns the new button (an instance of - * {@link MetalScrollButton} to the {@link #increaseButton} field, and also - * returns the button. The button width is determined by the - * <code>ScrollBar.width</code> setting in the UI defaults. - * - * @param orientation the orientation of the button ({@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} or {@link #WEST}). - * - * @return The button. - */ - protected JButton createIncreaseButton(int orientation) - { - increaseButton = new MetalScrollButton(orientation, scrollBarWidth, - isFreeStanding); - return increaseButton; - } - - /** - * Paints the track for the scrollbar. - * - * @param g the graphics device. - * @param c the component. - * @param trackBounds the track bounds. - */ - protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) - { - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, - trackBounds.height); - if (scrollbar.getOrientation() == HORIZONTAL) - paintTrackHorizontal(g, c, trackBounds.x, trackBounds.y, - trackBounds.width, trackBounds.height); - else - paintTrackVertical(g, c, trackBounds.x, trackBounds.y, - trackBounds.width, trackBounds.height); - - } - - /** - * Paints the track for a horizontal scrollbar. - * - * @param g the graphics device. - * @param c the component. - * @param x the x-coordinate for the track bounds. - * @param y the y-coordinate for the track bounds. - * @param w the width for the track bounds. - * @param h the height for the track bounds. - */ - private void paintTrackHorizontal(Graphics g, JComponent c, - int x, int y, int w, int h) - { - if (c.isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x, y, x, y + h - 1); - g.drawLine(x, y, x + w - 1, y); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - - g.setColor(scrollBarShadowColor); - g.drawLine(x + 1, y + 1, x + 1, y + h - 1); - g.drawLine(x + 1, y + 1, x + w - 2, y + 1); - - if (isFreeStanding) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x, y + h - 2, x + w - 1, y + h - 2); - g.setColor(scrollBarShadowColor); - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - } - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - if (isFreeStanding) - g.drawRect(x, y, w - 1, h - 1); - else - { - g.drawLine(x, y, x + w - 1, y); - g.drawLine(x, y, x, y + h - 1); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - } - } - } - - /** - * Paints the track for a vertical scrollbar. - * - * @param g the graphics device. - * @param c the component. - * @param x the x-coordinate for the track bounds. - * @param y the y-coordinate for the track bounds. - * @param w the width for the track bounds. - * @param h the height for the track bounds. - */ - private void paintTrackVertical(Graphics g, JComponent c, - int x, int y, int w, int h) - { - if (c.isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x, y, x, y + h - 1); - g.drawLine(x, y, x + w - 1, y); - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - - g.setColor(scrollBarShadowColor); - g.drawLine(x + 1, y + 1, x + w - 1, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 2); - - if (isFreeStanding) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(x + w - 2, y, x + w - 2, y + h - 1); - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - } - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - if (isFreeStanding) - g.drawRect(x, y, w - 1, h - 1); - else - { - g.drawLine(x, y, x + w - 1, y); - g.drawLine(x, y, x, y + h - 1); - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - } - } - } - - /** - * Paints the slider button of the ScrollBar. - * - * @param g the Graphics context to use - * @param c the JComponent on which we paint - * @param thumbBounds the rectangle that is the slider button - */ - protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) - { - // a disabled scrollbar has no thumb in the metal look and feel - if (!c.isEnabled()) - return; - if (scrollbar.getOrientation() == HORIZONTAL) - paintThumbHorizontal(g, c, thumbBounds); - else - paintThumbVertical(g, c, thumbBounds); - - // Draw the pattern when the theme is not Ocean. - if (! (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme)) - { - MetalUtils.fillMetalPattern(c, g, thumbBounds.x + 3, thumbBounds.y + 3, - thumbBounds.width - 6, - thumbBounds.height - 6, - thumbHighlightColor, - thumbLightShadowColor); - } - } - - /** - * Paints the thumb for a horizontal scroll bar. - * - * @param g the graphics device. - * @param c the scroll bar component. - * @param thumbBounds the thumb bounds. - */ - private void paintThumbHorizontal(Graphics g, JComponent c, - Rectangle thumbBounds) - { - int x = thumbBounds.x; - int y = thumbBounds.y; - int w = thumbBounds.width; - int h = thumbBounds.height; - - // First we fill the background. - MetalTheme theme = MetalLookAndFeel.getCurrentTheme(); - if (theme instanceof OceanTheme - && UIManager.get("ScrollBar.gradient") != null) - { - MetalUtils.paintGradient(g, x + 2, y + 2, w - 4, h - 2, - SwingConstants.VERTICAL, - "ScrollBar.gradient"); - } - else - { - g.setColor(thumbColor); - if (isFreeStanding) - g.fillRect(x, y, w, h - 1); - else - g.fillRect(x, y, w, h); - } - - // then draw the dark box - g.setColor(thumbLightShadowColor); - if (isFreeStanding) - g.drawRect(x, y, w - 1, h - 2); - else - { - g.drawLine(x, y, x + w - 1, y); - g.drawLine(x, y, x, y + h - 1); - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - } - - // then the highlight - g.setColor(thumbHighlightColor); - if (isFreeStanding) - { - g.drawLine(x + 1, y + 1, x + w - 3, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 3); - } - else - { - g.drawLine(x + 1, y + 1, x + w - 3, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 1); - } - - // draw the shadow line - g.setColor(UIManager.getColor("ScrollBar.shadow")); - g.drawLine(x + w, y + 1, x + w, y + h - 1); - - // For the OceanTheme, draw the 3 lines in the middle. - if (theme instanceof OceanTheme) - { - g.setColor(thumbLightShadowColor); - int middle = x + w / 2; - g.drawLine(middle - 2, y + 4, middle - 2, y + h - 5); - g.drawLine(middle, y + 4, middle, y + h - 5); - g.drawLine(middle + 2, y + 4, middle + 2, y + h - 5); - g.setColor(UIManager.getColor("ScrollBar.highlight")); - g.drawLine(middle - 1, y + 5, middle - 1, y + h - 4); - g.drawLine(middle + 1, y + 5, middle + 1, y + h - 4); - g.drawLine(middle + 3, y + 5, middle + 3, y + h - 4); - } - } - - /** - * Paints the thumb for a vertical scroll bar. - * - * @param g the graphics device. - * @param c the scroll bar component. - * @param thumbBounds the thumb bounds. - */ - private void paintThumbVertical(Graphics g, JComponent c, - Rectangle thumbBounds) - { - int x = thumbBounds.x; - int y = thumbBounds.y; - int w = thumbBounds.width; - int h = thumbBounds.height; - - // First we fill the background. - MetalTheme theme = MetalLookAndFeel.getCurrentTheme(); - if (theme instanceof OceanTheme - && UIManager.get("ScrollBar.gradient") != null) - { - MetalUtils.paintGradient(g, x + 2, y + 2, w - 2, h - 4, - SwingConstants.HORIZONTAL, - "ScrollBar.gradient"); - } - else - { - g.setColor(thumbColor); - if (isFreeStanding) - g.fillRect(x, y, w - 1, h); - else - g.fillRect(x, y, w, h); - } - - // then draw the dark box - g.setColor(thumbLightShadowColor); - if (isFreeStanding) - g.drawRect(x, y, w - 2, h - 1); - else - { - g.drawLine(x, y, x + w - 1, y); - g.drawLine(x, y, x, y + h - 1); - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - } - - // then the highlight - g.setColor(thumbHighlightColor); - if (isFreeStanding) - { - g.drawLine(x + 1, y + 1, x + w - 3, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 3); - } - else - { - g.drawLine(x + 1, y + 1, x + w - 1, y + 1); - g.drawLine(x + 1, y + 1, x + 1, y + h - 3); - } - - // draw the shadow line - g.setColor(UIManager.getColor("ScrollBar.shadow")); - g.drawLine(x + 1, y + h, x + w - 2, y + h); - - // For the OceanTheme, draw the 3 lines in the middle. - if (theme instanceof OceanTheme) - { - g.setColor(thumbLightShadowColor); - int middle = y + h / 2; - g.drawLine(x + 4, middle - 2, x + w - 5, middle - 2); - g.drawLine(x + 4, middle, x + w - 5, middle); - g.drawLine(x + 4, middle + 2, x + w - 5, middle + 2); - g.setColor(UIManager.getColor("ScrollBar.highlight")); - g.drawLine(x + 5, middle - 1, x + w - 4, middle - 1); - g.drawLine(x + 5, middle + 1, x + w - 4, middle + 1); - g.drawLine(x + 5, middle + 3, x + w - 4, middle + 3); - } - } - - /** - * Returns the minimum thumb size. For a free standing scroll bar the - * minimum size is <code>17 x 17</code> pixels, whereas for a non free - * standing scroll bar the minimum size is <code>15 x 15</code> pixels. - * - * @return The minimum thumb size. - */ - protected Dimension getMinimumThumbSize() - { - Dimension retVal; - if (scrollbar != null) - { - if (isFreeStanding) - retVal = MIN_THUMB_SIZE_FREE_STANDING; - else - retVal = MIN_THUMB_SIZE; - } - else - retVal = new Dimension(0, 0); - return retVal; - } - - /** - * Returns the <code>preferredSize</code> for the specified scroll bar. - * For a vertical scrollbar the height is the sum of the preferred heights - * of the buttons plus <code>30</code>. The width is fetched from the - * <code>UIManager</code> property <code>ScrollBar.width</code>. - * - * For horizontal scrollbars the width is the sum of the preferred widths - * of the buttons plus <code>30</code>. The height is fetched from the - * <code>UIManager</code> property <code>ScrollBar.height</code>. - * - * @param c the scrollbar for which to calculate the preferred size - * - * @return the <code>preferredSize</code> for the specified scroll bar - */ - public Dimension getPreferredSize(JComponent c) - { - int height; - int width; - height = width = 0; - - if (scrollbar.getOrientation() == SwingConstants.HORIZONTAL) - { - width += incrButton.getPreferredSize().getWidth(); - width += decrButton.getPreferredSize().getWidth(); - width += 30; - height = UIManager.getInt("ScrollBar.width"); - } - else - { - height += incrButton.getPreferredSize().getHeight(); - height += decrButton.getPreferredSize().getHeight(); - height += 30; - width = UIManager.getInt("ScrollBar.width"); - } - - Insets insets = scrollbar.getInsets(); - - height += insets.top + insets.bottom; - width += insets.left + insets.right; - - return new Dimension(width, height); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalScrollButton.java b/libjava/classpath/javax/swing/plaf/metal/MetalScrollButton.java deleted file mode 100644 index 3273908..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalScrollButton.java +++ /dev/null @@ -1,483 +0,0 @@ -/* MetalScrollButton.java - Copyright (C) 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.plaf.metal; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.SwingUtilities; -import javax.swing.plaf.basic.BasicArrowButton; - -/** - * A button used by the {@link MetalScrollBarUI}. The button appearance - * varies according to the button direction, whether or not it is part of a - * "free standing" scroll bar, and the current state of the button. - */ -public class MetalScrollButton extends BasicArrowButton -{ - - /** - * The maximum size for buttons. - * @see #getMaximumSize() - */ - private static Dimension maximumSize; - - /** The width of the button. */ - private int buttonWidth; - - /** - * A flag that indicates whether the button is part of a free standing - * scroll bar. This affects how the border is drawn. - */ - private boolean freeStanding; - - /** - * Creates a new button. - * - * @param direction the direction (this should be one of {@link #NORTH}, - * {@link #SOUTH}, {@link #EAST} and {@link #WEST}, but - * this is not enforced). - * @param width the button width. - * @param freeStanding a flag indicating whether the scroll button is free - * standing or not. - */ - public MetalScrollButton(int direction, int width, boolean freeStanding) - { - super(direction); - buttonWidth = width; - this.freeStanding = freeStanding; - setFocusable(false); - } - - /** - * Returns the button width. - * - * @return The button width. - */ - public int getButtonWidth() - { - return buttonWidth; - } - - /** - * Sets the free standing flag. This controls how the button border is - * drawn. - * - * @param freeStanding the new value of the flag. - */ - public void setFreeStanding(boolean freeStanding) - { - this.freeStanding = freeStanding; - } - - /** - * Paints the button. - * - * @param g the graphics device. - */ - public void paint(Graphics g) - { - Rectangle bounds = SwingUtilities.getLocalBounds(this); - - // fill the background - if (getModel().isPressed()) - g.setColor(MetalLookAndFeel.getControlShadow()); - else - g.setColor(MetalLookAndFeel.getControl()); - g.fillRect(0, 0, bounds.width, bounds.height); - - paintArrow(g, bounds.width, bounds.height); - - // paint a border manually - I tried using a real (custom) Border - // but couldn't get it to stay set for the button, something was - // overwriting it... - if (freeStanding) - { - if (direction == WEST) - paintWestBorderFreeStanding(g, bounds.width, bounds.height); - else if (direction == EAST) - paintEastBorderFreeStanding(g, bounds.width, bounds.height); - else if (direction == SOUTH) - paintSouthBorderFreeStanding(g, bounds.width, bounds.height); - else // asume NORTH - paintNorthBorderFreeStanding(g, bounds.width, bounds.height); - } - else - { - if (direction == WEST) - paintWestBorder(g, bounds.width, bounds.height); - else if (direction == EAST) - paintEastBorder(g, bounds.width, bounds.height); - else if (direction == SOUTH) - paintSouthBorder(g, bounds.width, bounds.height); - else // asume NORTH - paintNorthBorder(g, bounds.width, bounds.height); - } - } - - private void paintArrow(Graphics g, int w, int h) - { - if (isEnabled()) - g.setColor(MetalLookAndFeel.getBlack()); - else - g.setColor(MetalLookAndFeel.getControlDisabled()); - - if (direction == SOUTH) - { - int x = w / 2; - int y = h / 2 + 2; - for (int i = 1; i < 5; i++) - g.drawLine(x - i, y - i, x + i - 1, y - i); - } - else if (direction == EAST) - { - int x = w / 2 + 2; - int y = h / 2; - for (int i = 1; i < 5; i++) - g.drawLine(x - i, y - i, x - i, y + i - 1); - } - else if (direction == WEST) - { - int x = w / 2 - 3; - int y = h / 2; - for (int i = 1; i < 5; i++) - g.drawLine(x + i, y - i, x + i, y + i - 1); - } - else // assume NORTH - { - int x = w / 2; - int y = h / 2 - 3; - for (int i = 1; i < 5; i++) - g.drawLine(x - i, y + i, x + i - 1, y + i); - } - } - /** - * Paints the border for a button with a {@link #NORTH} direction that - * belongs to a free standing scroll bar. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintNorthBorderFreeStanding(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 2, 0); - g.drawLine(0, 0, 0, h - 1); - g.drawLine(2, h - 1, w - 2, h - 1); - g.drawLine(w - 2, 2, w - 2, h - 1); - - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(1, 1, 1, h - 2); - g.drawLine(1, 1, w - 3, 1); - g.drawLine(w - 1, 1, w - 1, h - 1); - - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(1, h - 1, 1, h - 1); - g.drawLine(w - 2, 1, w - 2, 1); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(w - 1, 0, w - 1, h - 1); - g.drawLine(0, 0, 0, h - 1); - } - } - - /** - * Paints the border for a button with a {@link #SOUTH} direction that - * belongs to a free standing scroll bar. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintSouthBorderFreeStanding(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 2, 0); - g.drawLine(0, 0, 0, h - 1); - g.drawLine(2, h - 1, w - 2, h - 1); - g.drawLine(w - 2, 2, w - 2, h - 1); - - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(1, 1, 1, h - 1); - g.drawLine(1, 1, w - 1, 1); - g.drawLine(w - 1, 1, w - 1, h - 1); - - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(1, h - 1, 1, h - 1); - g.drawLine(w - 1, 1, w - 1, 1); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, h - 1, w - 1, h - 1); - g.drawLine(w - 1, 0, w - 1, h - 1); - g.drawLine(0, 0, 0, h - 1); - } - } - - /** - * Paints the border for a button with an {@link #EAST} direction that - * belongs to a free standing scroll bar. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintEastBorderFreeStanding(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 2, 0); - g.drawLine(w - 2, 0, w - 2, h - 2); - g.drawLine(0, h - 2, w - 2, h - 2); - - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(0, 1, w - 1, 1); - g.drawLine(w - 1, 1, w - 1, h - 1); - g.drawLine(0, h - 1, w - 1, h - 1); - - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(w - 2, 1, w - 2, 1); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(w - 1, 0, w - 1, h - 1); - g.drawLine(0, h - 1, w - 1, h - 1); - } - } - - /** - * Paints the border for a button with a {@link #WEST} direction that - * belongs to a free standing scroll bar. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintWestBorderFreeStanding(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(0, 0, 0, h - 2); - g.drawLine(0, h - 2, w - 1, h - 2); - - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(1, 1, w - 1, 1); - g.drawLine(1, 1, 1, h - 1); - g.drawLine(1, h - 1, w - 1, h - 1); - - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(1, h - 2, 1, h - 2); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(0, 0, 0, h - 1); - g.drawLine(0, h - 1, w - 1, h - 1); - } - } - - /** - * Paints the border for a button with a {@link #NORTH} direction that - * belongs to a scroll bar that is not free standing. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintNorthBorder(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, 0, h - 1); - - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(1, 0, 1, h - 1); - g.drawLine(1, 0, w - 1, 0); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, 0, h - 1); - } - } - - /** - * Paints the border for a button with a {@link #SOUTH} direction that - * belongs to a scroll bar that is not free standing. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintSouthBorder(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, 0, h - 1); - g.drawLine(0, h - 1, w - 1, h - 1); - - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(1, 0, 1, h - 1); - g.drawLine(1, 0, w - 1, 0); - - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(1, h - 1, 1, h - 1); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, 0, h - 1); - } - } - - /** - * Paints the border for a button with an {@link #EAST} direction that - * belongs to a scroll bar that is not free standing. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintEastBorder(Graphics g, int w, int h) - { - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, w - 1, 0); - g.drawLine(w - 1, 2, w - 1, h - 1); - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(0, 1, w - 2, 1); - g.drawLine(0, 1, 0, h - 1); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, w - 1, 0); - } - } - - /** - * Paints the border for a button with a {@link #WEST} direction that - * belongs to a scroll bar that is not free standing. - * - * @param g the graphics device. - * @param w the button width. - * @param h the button height. - */ - private void paintWestBorder(Graphics g, int w, int h) - { - Rectangle bounds = SwingUtilities.getLocalBounds(this); - if (isEnabled()) - { - g.setColor(MetalLookAndFeel.getControlDarkShadow()); - g.drawLine(0, 0, bounds.width - 1, 0); - g.setColor(MetalLookAndFeel.getControlHighlight()); - g.drawLine(0, 1, bounds.width - 1, 1); - g.drawLine(0, 1, 0, bounds.height - 1); - } - else - { - g.setColor(MetalLookAndFeel.getControlDisabled()); - g.drawLine(0, 0, bounds.width - 1, 0); - } - } - - /** - * Returns the preferred size for the button, which varies depending on - * the direction of the button and whether or not it is free standing. - * - * @return The preferred size. - */ - public Dimension getPreferredSize() - { - int adj = 1; - if (!freeStanding) - adj = 2; - - if (direction == EAST) - return new Dimension(buttonWidth - adj, buttonWidth); - else if (direction == WEST) - return new Dimension(buttonWidth - 2, buttonWidth); - else if (direction == SOUTH) - return new Dimension(buttonWidth, buttonWidth - adj); - else // assume NORTH - return new Dimension(buttonWidth, buttonWidth - 2); - } - - /** - * Returns the minimum size for the button. - * - * @return The minimum size for the button. - */ - public Dimension getMinimumSize() - { - return getPreferredSize(); - } - - /** - * Returns the maximum size for the button. - * - * @return <code>Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE)</code>. - */ - public Dimension getMaximumSize() - { - if (maximumSize == null) - maximumSize = new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - return maximumSize; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalScrollPaneUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalScrollPaneUI.java deleted file mode 100644 index 09a47c3..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalScrollPaneUI.java +++ /dev/null @@ -1,159 +0,0 @@ -/* MetalScrollPaneUI.java - Copyright (C) 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.plaf.metal; - -import java.beans.PropertyChangeListener; - -import javax.swing.JComponent; -import javax.swing.JScrollBar; -import javax.swing.JScrollPane; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicScrollPaneUI; - -/** - * A UI delegate for the {@link JScrollPane} component. - */ -public class MetalScrollPaneUI - extends BasicScrollPaneUI -{ - /** - * Constructs a new instance of <code>MetalScrollPaneUI</code>. - */ - public MetalScrollPaneUI() - { - super(); - } - - /** - * Returns a shared instance of <code>MetalScrollPaneUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A shared instance of <code>MetalScrollPaneUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalScrollPaneUI(); - } - - /** - * Configures the specified component appropriate for the look and feel. - * This method is invoked when the ComponentUI instance is being installed - * as the UI delegate on the specified component. This method should - * completely configure the component for the look and feel, - * including the following: - * 1. Install any default property values for color, fonts, borders, - * icons, opacity, etc. on the component. Whenever possible, property - * values initialized by the client program should not be overridden. - * 2. Install a LayoutManager on the component if necessary. - * 3. Create/add any required sub-components to the component. - * 4. Create/install event listeners on the component. - * 5. Create/install a PropertyChangeListener on the component in order - * to detect and respond to component property changes appropriately. - * 6. Install keyboard UI (mnemonics, traversal, etc.) on the component. - * 7. Initialize any appropriate instance data. - * - * @param c - the component to install the ui on - */ - public void installUI(JComponent c) - { - super.installUI(c); - JScrollBar hsb = scrollpane.getHorizontalScrollBar(); - hsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE); - JScrollBar vsb = scrollpane.getVerticalScrollBar(); - vsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, Boolean.FALSE); - } - - /** - * Reverses configuration which was done on the specified component - * during installUI. This method is invoked when this UIComponent - * instance is being removed as the UI delegate for the specified - * component. This method should undo the configuration performed in - * installUI, being careful to leave the JComponent instance in a - * clean state (no extraneous listeners, look-and-feel-specific property - * objects, etc.). This should include the following: - * 1. Remove any UI-set borders from the component. - * 2. Remove any UI-set layout managers on the component. - * 3. Remove any UI-added sub-components from the component. - * 4. Remove any UI-added event/property listeners from the component. - * 5. Remove any UI-installed keyboard UI from the component. - * 6. Nullify any allocated instance data objects to allow for GC. - * - * @param c - the component to uninstall the ui on - */ - public void uninstallUI(JComponent c) - { - JScrollBar hsb = scrollpane.getHorizontalScrollBar(); - hsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, null); - JScrollBar vsb = scrollpane.getVerticalScrollBar(); - vsb.putClientProperty(MetalScrollBarUI.FREE_STANDING_PROP, null); - super.uninstallUI(c); - } - - /** - * Installs listeners on scrollPane - * - * @param scrollPane - the component to install the listeners on - */ - public void installListeners(JScrollPane scrollPane) - { - super.installListeners(scrollPane); - } - - /** - * Uninstalls listeners on scrollPane - * - * @param scrollPane - the component to uninstall the listeners on - */ - public void uninstallListeners(JScrollPane scrollPane) - { - super.uninstallListeners(scrollPane); - } - - /** - * TODO - * - * @return TODO - */ - protected PropertyChangeListener createScrollBarSwapListener() - { - // FIXME: Anything else to do here? - return super.createPropertyChangeListener(); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalSeparatorUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalSeparatorUI.java deleted file mode 100644 index 8afa98c..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalSeparatorUI.java +++ /dev/null @@ -1,131 +0,0 @@ -/* MetalSeparatorUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.JComponent; -import javax.swing.JSeparator; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicSeparatorUI; - -/** - * A UI delegate for the {@link JSeparator} component. - */ -public class MetalSeparatorUI - extends BasicSeparatorUI -{ - - // FIXME: maybe replace by a Map of instances when this becomes stateful - /** The shared UI instance for MetalSeparatorUIs */ - private static MetalSeparatorUI instance; - - /** - * Constructs a new instance of <code>MetalSeparatorUI</code>. - */ - public MetalSeparatorUI() - { - super(); - } - - /** - * Returns a shared instance of <code>MetalSeparatorUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A shared instance of <code>MetalSeparatorUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - if (instance == null) - instance = new MetalSeparatorUI(); - return instance; - } - - /** - * The separator is made of two lines. The top line will be - * the Metal theme color separatorForeground (or left line if it's vertical). - * The bottom or right line will be the Metal theme color - * separatorBackground. - * The two lines will - * be centered inside the bounds box. If the separator is horizontal, - * then it will be vertically centered, or if it's vertical, it will - * be horizontally centered. - * - * @param g The Graphics object to paint with - * @param c The JComponent to paint. - */ - public void paint(Graphics g, JComponent c) - { - Rectangle r = new Rectangle(); - SwingUtilities.calculateInnerArea(c, r); - Color saved = g.getColor(); - Color c1 = UIManager.getColor("Separator.foreground"); - Color c2 = UIManager.getColor("Separator.background"); - JSeparator s; - if (c instanceof JSeparator) - s = (JSeparator) c; - else - return; - - if (s.getOrientation() == JSeparator.HORIZONTAL) - { - int midAB = r.height / 2; - g.setColor(c1); - g.drawLine(r.x, r.y + midAB - 1, r.x + r.width, r.y + midAB - 1); - - g.setColor(c2); - g.fillRect(r.x, r.y + midAB, r.x + r.width, r.y + midAB); - } - else - { - int midAD = r.height / 2 + r.y; - g.setColor(c1); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - - g.setColor(c2); - g.fillRect(r.x + midAD, r.y + r.height, r.x + midAD, r.y + r.height); - } - g.setColor(saved); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java deleted file mode 100644 index e85c324..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalSliderUI.java +++ /dev/null @@ -1,475 +0,0 @@ -/* MetalSliderUI.java - Copyright (C) 2005, 2006, 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.plaf.metal; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.JSlider; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicGraphicsUtils; -import javax.swing.plaf.basic.BasicSliderUI; - -/** - * A UI delegate for the {@link JSlider} component. - */ -public class MetalSliderUI extends BasicSliderUI -{ - /** - * A property change handler that updates the rendered component in response - * to specific property change events. This custom handler is used to - * intercept the "JSlider.isFilled" property, which is only recognised by - * the {@link MetalLookAndFeel}. - */ - protected class MetalPropertyListener - extends BasicSliderUI.PropertyChangeHandler - { - /** - * Creates a new listener. - */ - protected MetalPropertyListener() - { - // Nothing to do here. - } - - /** - * Handles property change events. Events with the name "JSlider.isFilled" - * are handled here, and other events are passed to the superclass. - * - * @param e the property change event. - */ - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(SLIDER_FILL)) - { - Boolean b = (Boolean) e.getNewValue(); - if (b == null) - filledSlider = false; - else - filledSlider = b.booleanValue(); - } - else - super.propertyChange(e); - } - } - - /** The thumb color (unused, because an icon is used to draw the thumb). */ - protected static Color thumbColor; - - /** - * The highlight color used for drawing the track rect when the slider is - * enabled. - */ - protected static Color highlightColor; - - /** - * The shadow color used for drawing the track rect when the slider is - * enabled. - */ - protected static Color darkShadowColor; - - /** The track width. */ - protected static int trackWidth = UIManager.getInt("Slider.trackWidth"); - - /** The length of the major tick marks. */ - protected static int tickLength = UIManager.getInt("Slider.majorTickLength"); - - /** The icon used for the thumb control of horizontally oriented sliders. */ - protected static Icon horizThumbIcon = UIManager.getIcon( - "Slider.horizontalThumbIcon"); - - /** The icon used for the thumb control of vertically oriented sliders. */ - protected static Icon vertThumbIcon = UIManager.getIcon( - "Slider.verticalThumbIcon"); - - /** The gap between the track and the tick marks. */ - protected final int TICK_BUFFER = 4; - - /** A key to look up the filledSlider setting in the {@link UIManager}. */ - protected final String SLIDER_FILL = "JSlider.isFilled"; - - /** - * A flag that controls whether or not the track is filled up to the value - * of the slider. - */ - protected boolean filledSlider; - - /** - * Constructs a new instance. - */ - public MetalSliderUI() - { - super(null); - filledSlider = UIManager.getBoolean(SLIDER_FILL); - darkShadowColor = MetalLookAndFeel.getControlDarkShadow(); - highlightColor = MetalLookAndFeel.getControlHighlight(); - } - - /** - * Returns a new instance of <code>MetalSliderUI</code>. - * - * @param component the component (ignored). - * - * @return A new instance of <code>MetalSliderUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalSliderUI(); - } - - /** - * Installs the default for this UI delegate in the supplied component. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - super.installUI(c); - Boolean b = (Boolean) c.getClientProperty(SLIDER_FILL); - if (b != null) - filledSlider = b.booleanValue(); - } - - /** - * Creates a property change listener for the slider. - * - * @param slider the slider. - * - * @return A new instance of {@link MetalPropertyListener}. - */ - protected PropertyChangeListener createPropertyChangeListener(JSlider slider) - { - return new MetalPropertyListener(); - } - - /** - * Paints the thumb icon for the slider. - * - * @param g the graphics device. - */ - public void paintThumb(Graphics g) - { - Color save = g.getColor(); - g.setColor(thumbColor); - if (slider.getOrientation() == JSlider.HORIZONTAL) - horizThumbIcon.paintIcon(slider, g, thumbRect.x, thumbRect.y); - else - vertThumbIcon.paintIcon(slider, g, thumbRect.x, thumbRect.y); - g.setColor(save); - } - - /** - * Paints the track along which the thumb control moves. - * - * @param g the graphics device. - */ - public void paintTrack(Graphics g) - { - Color shadowColor = MetalLookAndFeel.getControlShadow(); - if (slider.getOrientation() == JSlider.HORIZONTAL) - { - int trackX = trackRect.x; - int trackY = trackRect.y + (trackRect.height - getTrackWidth()) / 2; - int trackW = trackRect.width; - int trackH = getTrackWidth(); - - // draw border - if (slider.isEnabled()) - BasicGraphicsUtils.drawEtchedRect(g, trackX, trackY, trackW, trackH, - darkShadowColor, shadowColor, darkShadowColor, highlightColor); - else - { - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawRect(trackX, trackY, trackW - 2, trackH - 2); - } - - // fill track (if required) - if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme) - { - if (slider.isEnabled()) - { - int xPos = xPositionForValue(slider.getValue()); - int x = slider.getInverted() ? xPos : trackRect.x; - int w = slider.getInverted() ? trackX + trackW - xPos - : xPos - trackRect.x; - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 1, trackY + 1, x + w - 3, trackY + 1); - g.setColor(UIManager.getColor("Slider.altTrackColor")); - g.drawLine(x + 1, trackY + 2, x + w - 3, trackY + 2); - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x + 1, trackY + 3, x + w - 3, trackY + 3); - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - g.drawLine(x + 1, trackY + 4, x + w - 3, trackY + 4); - } - } - else if (filledSlider) - { - int xPos = xPositionForValue(slider.getValue()); - int x = slider.getInverted() ? xPos : trackRect.x; - int w = slider.getInverted() ? trackX + trackW - xPos - : xPos - trackRect.x; - g.setColor(MetalLookAndFeel.getControlShadow()); - g.fillRect(x + 1, trackY + 1, w - 3, getTrackWidth() - 3); - if (slider.isEnabled()) - { - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(x + 1, trackY + 1, x + w - 3, trackY + 1); - g.drawLine(x + 1, trackY + 1, x + 1, - trackY + getTrackWidth() - 3); - } - } - } - else - { - int trackX = trackRect.x + (trackRect.width - getTrackWidth()) / 2; - int trackY = trackRect.y; - int trackW = getTrackWidth(); - int trackH = trackRect.height; - if (slider.isEnabled()) - BasicGraphicsUtils.drawEtchedRect(g, trackX, trackY, trackW, trackH, - darkShadowColor, shadowColor, darkShadowColor, highlightColor); - else - { - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawRect(trackX, trackY, trackW - 2, trackH - 2); - } - - // Fill track if necessary. - if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme) - { - if (slider.isEnabled()) - { - int yPos = yPositionForValue(slider.getValue()); - int y = slider.getInverted() ? trackY : yPos; - int h = slider.getInverted() ? yPos - trackY - : trackY + trackH - yPos; - - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(trackX + 1, y + 1, trackX + 1, y + h - 3); - g.setColor(UIManager.getColor("Slider.altTrackColor")); - g.drawLine(trackX + 2, y + 1, trackX + 2, y + h - 3); - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(trackX + 3, y + 1, trackX + 3, y + h - 3); - g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); - g.drawLine(trackX + 4, y + 1, trackX + 4, y + h - 3); - } - } - else if (filledSlider) - { - int yPos = yPositionForValue(slider.getValue()); - int y = slider.getInverted() ? trackY : yPos; - int h = slider.getInverted() ? yPos - trackY - : trackY + trackH - yPos; - g.setColor(MetalLookAndFeel.getControlShadow()); - g.fillRect(trackX + 1, y + 1, getTrackWidth() - 3, h - 3); - if (slider.isEnabled()) - { - g.setColor(MetalLookAndFeel.getControl()); - g.drawLine(trackX + 1, y + 1, trackX + trackW - 3, y + 1); - g.drawLine(trackX + 1, y + 1, trackX + 1, y + h - 3); - } - } - } - } - - /** - * Draws the focus rectangle for the slider. The Metal look and feel - * indicates that the {@link JSlider} has the focus by changing the color of - * the thumb control - this is handled elsewhere and so this method is empty - * (it overrides the method in the {@link BasicSliderUI} class to prevent - * a default focus highlight from being drawn). - * - * @param g the graphics device. - */ - public void paintFocus(Graphics g) - { - thumbColor = getFocusColor(); - paintThumb(g); - } - - /** - * Returns the size of the thumb icon. - * - * @return The size of the thumb icon. - */ - protected Dimension getThumbSize() - { - if (slider.getOrientation() == JSlider.HORIZONTAL) - return new Dimension(horizThumbIcon.getIconWidth(), - horizThumbIcon.getIconHeight()); - else - return new Dimension(vertThumbIcon.getIconWidth(), - vertThumbIcon.getIconHeight()); - } - - /** - * Returns the length of the major tick marks. - * - * @return The length of the major tick marks. - */ - public int getTickLength() - { - int len = tickLength + TICK_BUFFER + 1; - if (slider.getOrientation() == JSlider.VERTICAL) - len += 2; - return len; - } - - /** - * Returns the track width. - * - * @return The track width. - */ - protected int getTrackWidth() - { - return trackWidth; - } - - /** - * Returns the track length. - * - * @return The track length. - */ - protected int getTrackLength() - { - return slider.getOrientation() == JSlider.HORIZONTAL - ? tickRect.width : tickRect.height; - } - - /** - * Returns the thumb overhang. - * - * @return The thumb overhang. - */ - protected int getThumbOverhang() - { - // FIXME: for what might this method be used? - return 0; - } - - protected void scrollDueToClickInTrack(int dir) - { - // FIXME: for what might this method be overridden? - super.scrollDueToClickInTrack(dir); - } - - /** - * Paints the minor ticks for a slider with a horizontal orientation. - * - * @param g the graphics device. - * @param tickBounds the tick bounds. - * @param x the x value for the tick. - */ - protected void paintMinorTickForHorizSlider(Graphics g, Rectangle tickBounds, - int x) - { - // Note the incoming 'g' has a translation in place to get us to the - // start of the tick rect already... - if (slider.isEnabled()) - g.setColor(slider.getForeground()); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x, TICK_BUFFER, x, TICK_BUFFER + tickLength / 2); - } - - /** - * Paints the major ticks for a slider with a horizontal orientation. - * - * @param g the graphics device. - * @param tickBounds the tick bounds. - * @param x the x value for the tick. - */ - protected void paintMajorTickForHorizSlider(Graphics g, Rectangle tickBounds, - int x) - { - // Note the incoming 'g' has a translation in place to get us to the - // start of the tick rect already... - if (slider.isEnabled()) - g.setColor(slider.getForeground()); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(x, TICK_BUFFER, x, TICK_BUFFER + tickLength - 1); - } - - /** - * Paints the minor ticks for a slider with a vertical orientation. - * - * @param g the graphics device. - * @param tickBounds the tick bounds. - * @param y the y value for the tick. - */ - protected void paintMinorTickForVertSlider(Graphics g, Rectangle tickBounds, - int y) - { - // Note the incoming 'g' has a translation in place to get us to the - // start of the tick rect already... - if (slider.isEnabled()) - g.setColor(slider.getForeground()); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(TICK_BUFFER, y, TICK_BUFFER + tickLength / 2, y); - } - - /** - * Paints the major ticks for a slider with a vertical orientation. - * - * @param g the graphics device. - * @param tickBounds the tick bounds. - * @param y the y value for the tick. - */ - protected void paintMajorTickForVertSlider(Graphics g, Rectangle tickBounds, - int y) - { - // Note the incoming 'g' has a translation in place to get us to the - // start of the tick rect already... - if (slider.isEnabled()) - g.setColor(slider.getForeground()); - else - g.setColor(MetalLookAndFeel.getControlShadow()); - g.drawLine(TICK_BUFFER, y, TICK_BUFFER + tickLength, y); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalSplitPaneDivider.java b/libjava/classpath/javax/swing/plaf/metal/MetalSplitPaneDivider.java deleted file mode 100644 index 0514998..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalSplitPaneDivider.java +++ /dev/null @@ -1,264 +0,0 @@ -/* MetalSplitPaneDivider.java -Copyright (C) 2005, 2006, 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.plaf.metal; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Insets; - -import javax.swing.JButton; -import javax.swing.JSplitPane; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.plaf.basic.BasicSplitPaneDivider; - -/** - * The divider that is used by the {@link MetalSplitPaneUI}. - * - * @author Roman Kennke (roman@kennke.org) - */ -class MetalSplitPaneDivider extends BasicSplitPaneDivider -{ - /** - * The button pixel data, as indices into the colors array below. - * This is the version for 'left' buttons. - * - * This is slightly different from the icon in Sun's version, it is - * one pixel smaller and is more consistent with BUTTON_SPRITE_R. - */ - static final byte[][] BUTTON_SPRITE_L = {{ 0, 0, 0, 2, 0, 0, 0, 0 }, - { 0, 0, 2, 1, 1, 0, 0, 0 }, - { 0, 2, 1, 1, 1, 1, 0, 0 }, - { 2, 1, 1, 1, 1, 1, 1, 0 }, - { 0, 3, 3, 3, 3, 3, 3, 3 }}; - - /** - * The button pixel data, as indices into the colors array below. - * This is the version for 'right' buttons. - */ - static final byte[][] BUTTON_SPRITE_R = {{ 2, 2, 2, 2, 2, 2, 2, 2 }, - { 0, 1, 1, 1, 1, 1, 1, 3 }, - { 0, 0, 1, 1, 1, 1, 3, 0 }, - { 0, 0, 0, 1, 1, 3, 0, 0 }, - { 0, 0, 0, 0, 3, 0, 0, 0 }}; - - private class MetalOneTouchButton - extends JButton - { - /** - * Denotes a left button. - */ - static final int LEFT = 0; - - /** - * Denotes a right button. - */ - static final int RIGHT = 1; - - /** - * The colors for the button sprite. - */ - private Color[] colors; - - /** - * Either LEFT or RIGHT. - */ - private int direction; - - /** - * Creates a new instance. - * - * @param dir either LEFT or RIGHT - */ - MetalOneTouchButton(int dir) - { - direction = dir; - colors = new Color[4]; - } - - /** - * Never allow borders. - */ - public void setBorder(Border b) - { - } - - /** - * Never allow focus traversal. - */ - public boolean isFocusTraversable() - { - return false; - } - - /** - * Paints the one touch button. - */ - public void paint(Graphics g) - { - if (splitPane != null) - { - // Update colors here to reflect dynamic changes to the theme. - colors[0] = getBackground(); - colors[1] = MetalLookAndFeel.getPrimaryControlDarkShadow(); - colors[2] = MetalLookAndFeel.getPrimaryControlInfo(); - colors[3] = MetalLookAndFeel.getPrimaryControlHighlight(); - - // Fill background. - g.setColor(getBackground()); - g.fillRect(0, 0, getWidth(), getHeight()); - - // Pressed buttons have slightly different color mapping. - if (getModel().isPressed()) - colors[1] = colors[2]; - - byte[][] sprite; - if (direction == LEFT) - sprite = BUTTON_SPRITE_L; - else - sprite = BUTTON_SPRITE_R; - - if (orientation == JSplitPane.VERTICAL_SPLIT) - { - // Draw the sprite as it is. - for (int y = 0; y < sprite.length; y++) - { - byte[] line = sprite[y]; - for (int x = 0; x < line.length; x++) - { - int c = line[x]; - if (c != 0) - { - g.setColor(colors[c]); - g.fillRect(x + 1, y + 1, 1, 1); - } - } - } - } - else - { - // Draw the sprite with swapped X and Y axis. - for (int y = 0; y < sprite.length; y++) - { - byte[] line = sprite[y]; - for (int x = 0; x < line.length; x++) - { - int c = line[x]; - if (c != 0) - { - g.setColor(colors[c]); - g.fillRect(y + 1, x + 1, 1, 1); - } - } - } - } - } - } - } - - /** The dark color in the pattern. */ - Color dark; - - /** The light color in the pattern. */ - Color light; - - /** The JSplitPane the divider is on. */ - JSplitPane splitPane; - - /** The split pane orientation. */ - int orientation; - - /** - * Creates a new instance of <code>MetalSplitPaneDivider</code>. - * - * @param ui the <code>MetalSplitPaneUI</code> that uses this divider - */ - public MetalSplitPaneDivider(MetalSplitPaneUI ui, Color light, Color dark) - { - super(ui); - this.splitPane = super.splitPane; - this.orientation = super.orientation; - this.light = light; - this.dark = dark; - } - - /** - * Paints the divider. - * - * @param g the <code>Graphics</code> context to use for painting - */ - public void paint(Graphics g) - { - Dimension s = getSize(); - - if (splitPane.hasFocus()) - { - g.setColor(UIManager.getColor("SplitPane.dividerFocusColor")); - g.fillRect(0, 0, s.width, s.height); - } - - // Paint border if one exists. - Border border = getBorder(); - if (border != null) - border.paintBorder(this, g, 0, 0, s.width, s.height); - - Insets i = getInsets(); - MetalUtils.fillMetalPattern(splitPane, g, i.left + 2, i.top + 2, - s.width - i.left - i.right - 4, - s.height - i.top - i.bottom - 4, - light, dark); - super.paint(g); - } - - protected JButton createLeftOneTouchButton() - { - JButton b = new MetalOneTouchButton(MetalOneTouchButton.LEFT); - b.setMinimumSize(new Dimension(ONE_TOUCH_SIZE, ONE_TOUCH_SIZE)); - b.setRequestFocusEnabled(false); - return b; - } - - protected JButton createRightOneTouchButton() - { - JButton b = new MetalOneTouchButton(MetalOneTouchButton.RIGHT); - b.setMinimumSize(new Dimension(ONE_TOUCH_SIZE, ONE_TOUCH_SIZE)); - b.setRequestFocusEnabled(false); - return b; - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalSplitPaneUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalSplitPaneUI.java deleted file mode 100644 index 5b8f2127..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalSplitPaneUI.java +++ /dev/null @@ -1,89 +0,0 @@ -/* MetalSplitPaneUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; - -import javax.swing.JComponent; -import javax.swing.JSplitPane; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicSplitPaneDivider; -import javax.swing.plaf.basic.BasicSplitPaneUI; - -/** - * A UI delegate for the {@link JSplitPane} component. - */ -public class MetalSplitPaneUI extends BasicSplitPaneUI -{ - /** - * Constructs a new instance of <code>MetalSplitPaneUI</code>. - */ - public MetalSplitPaneUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalSplitPaneUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalSplitPaneUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalSplitPaneUI(); - } - - /** - * Returns the divider that is used by the <code>JSplitPane</code>. - * - * The divider returned by this method is a {@link BasicSplitPaneDivider} - * that is drawn using the Metal look. - * - * @return the default divider to use for <code>JSplitPane</code>s. - */ - public BasicSplitPaneDivider createDefaultDivider() - { - Color light = UIManager.getColor("SplitPane.highlight"); - Color dark = UIManager.getColor("SplitPane.darkShadow"); - return new MetalSplitPaneDivider(this, light, dark); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java deleted file mode 100644 index 77705ba..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalTabbedPaneUI.java +++ /dev/null @@ -1,1269 +0,0 @@ -/* MetalTabbedPaneUI.java - Copyright (C) 2005, 2006 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.plaf.metal; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.LayoutManager; -import java.awt.Rectangle; - -import javax.swing.JComponent; -import javax.swing.JTabbedPane; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicTabbedPaneUI; - -/** - * A UI delegate for the {@link JTabbedPane} component. - */ -public class MetalTabbedPaneUI extends BasicTabbedPaneUI -{ - - /** - * A {@link LayoutManager} responsible for placing all the tabs and the - * visible component inside the {@link JTabbedPane}. This class is only used - * for {@link JTabbedPane#WRAP_TAB_LAYOUT}. - * - * @specnote Apparently this class was intended to be protected, - * but was made public by a compiler bug and is now - * public for compatibility. - */ - public class TabbedPaneLayout - extends BasicTabbedPaneUI.TabbedPaneLayout - { - /** - * Creates a new instance of the layout manager. - */ - public TabbedPaneLayout() - { - // Nothing to do here. - } - - /** - * Overridden to do nothing, because tab runs are not rotated in the - * {@link MetalLookAndFeel}. - * - * @param tabPlacement the tab placement (one of {@link #TOP}, - * {@link #BOTTOM}, {@link #LEFT} or {@link #RIGHT}). - * @param selectedRun the index of the selected run. - */ - protected void rotateTabRuns(int tabPlacement, int selectedRun) - { - // do nothing, because tab runs are not rotated in the MetalLookAndFeel - } - - /** - * Overridden to do nothing, because the selected tab does not have extra - * padding in the {@link MetalLookAndFeel}. - * - * @param tabPlacement the tab placement (one of {@link #TOP}, - * {@link #BOTTOM}, {@link #LEFT} or {@link #RIGHT}). - * @param selectedIndex the index of the selected tab. - */ - protected void padSelectedTab(int tabPlacement, int selectedIndex) - { - // do nothing, because the selected tab does not have extra padding in - // the MetalLookAndFeel - } - - /** - * Overridden because tab runs are only normalized for TOP and BOTTOM - * tab placement in the Metal L&F. - */ - protected void normalizeTabRuns(int tabPlacement, int tabCount, int start, - int max) - { - if (tabPlacement == TOP || tabPlacement == BOTTOM) - super.normalizeTabRuns(tabPlacement, tabCount, start, max); - } - } - - /** - * The minimum tab width. - */ - protected int minTabWidth; - - /** - * The color for the selected tab. - */ - protected Color selectColor; - - /** - * The color for a highlighted selected tab. - */ - protected Color selectHighlight; - - /** - * The background color used for the tab area. - */ - protected Color tabAreaBackground; - - /** The graphics to draw the highlight below the tab. */ - private Graphics hg; - - /** - * Indicates if the tabs are having their background filled. - */ - private boolean tabsOpaque; - - /** - * Constructs a new instance of MetalTabbedPaneUI. - */ - public MetalTabbedPaneUI() - { - super(); - } - - /** - * Returns an instance of MetalTabbedPaneUI. - * - * @param component the component for which we return an UI instance - * - * @return an instance of MetalTabbedPaneUI - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalTabbedPaneUI(); - } - - /** - * Creates and returns an instance of {@link TabbedPaneLayout}. - * - * @return A layout manager used by this UI delegate. - */ - protected LayoutManager createLayoutManager() - { - return (tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT) - ? new MetalTabbedPaneUI.TabbedPaneLayout() - : super.createLayoutManager(); - } - - /** - * Paints the border for a single tab. - * - * @param g the graphics device. - * @param tabPlacement the tab placement ({@link #TOP}, {@link #LEFT}, - * {@link #BOTTOM} or {@link #RIGHT}). - * @param tabIndex the index of the tab to draw the border for. - * @param x the x-coordinate for the tab's bounding rectangle. - * @param y the y-coordinate for the tab's bounding rectangle. - * @param w the width for the tab's bounding rectangle. - * @param h the height for the tab's bounding rectangle. - * @param isSelected indicates whether or not the tab is selected. - */ - protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex, - int x, int y, int w, int h, boolean isSelected) - { - int bottom = y + h - 1; - int right = x + w - 1; - - switch (tabPlacement) - { - case LEFT: - paintLeftTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected); - break; - case BOTTOM: - paintBottomTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected); - break; - case RIGHT: - paintRightTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected); - break; - case TOP: - default: - paintTopTabBorder(tabIndex, g, x, y, w, h, bottom, right, isSelected); - } - } - - /** - * Paints the border for a tab assuming that the tab position is at the top - * ({@link #TOP}). - * - * @param tabIndex the tab index. - * @param g the graphics device. - * @param x the x-coordinate for the tab's bounding rectangle. - * @param y the y-coordinate for the tab's bounding rectangle. - * @param w the width for the tab's bounding rectangle. - * @param h the height for the tab's bounding rectangle. - * @param btm the y coordinate of the bottom border - * @param rght the x coordinate of the right border - * @param isSelected indicates whether the tab is selected. - */ - protected void paintTopTabBorder(int tabIndex, Graphics g, int x, int y, - int w, int h, int btm, int rght, boolean isSelected) - { - int tabCount = tabPane.getTabCount(); - int currentRun = getRunForTab(tabCount, tabIndex); - int right = w - 1; - int bottom = h - 1; - - // Paint gap. - if (shouldFillGap(currentRun, tabIndex, x, y)) - { - g.translate(x, y); - g.setColor(getColorForGap(currentRun, x, y + 1)); - g.fillRect(1, 0, 5, 3); - g.fillRect(1, 3, 2, 2); - g.translate(-x, -y); - } - - g.translate(x, y); - - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - if (isOcean && isSelected) - g.setColor(oceanSelectedBorder); - else - g.setColor(darkShadow); - - // Slant - g.drawLine(1, 5, 6, 0); - // Top. - g.drawLine(6, 0, right, 0); - // Right. - int lastIndex = lastTabInRun(tabCount, currentRun); - if (tabIndex == lastIndex) - g.drawLine(right, 1, right, bottom); - // Left. - int selectedIndex = tabPane.getSelectedIndex(); - if (isOcean && tabIndex - 1 == selectedIndex - && currentRun == getRunForTab(tabCount, selectedIndex)) - { - g.setColor(oceanSelectedBorder); - } - if (tabIndex != tabRuns[runCount - 1]) - { - if (isOcean && isSelected) - { - g.drawLine(0, 6, 0, bottom); - g.setColor(darkShadow); - g.drawLine(0, 0, 0, 5); - } - else - { - g.drawLine(0, 0, 0, bottom); - } - } - else - { - g.drawLine(0, 6, 0, bottom); - } - - // Paint the highlight. - g.setColor(isSelected ? selectHighlight : highlight); - // Slant. - g.drawLine(1, 6, 6, 1); - // Top. - g.drawLine(6, 1, right, 1); - // Left. - g.drawLine(1, 6, 1, bottom); - int firstIndex = tabRuns[currentRun]; - if (tabIndex == firstIndex && tabIndex != tabRuns[runCount - 1]) - { - if (tabPane.getSelectedIndex() == tabRuns[currentRun + 1]) - g.setColor(selectHighlight); - else - g.setColor(highlight); - g.drawLine(1, 0, 1, 4); - } - - g.translate(-x, -y); - } - - /** - * Paints the border for a tab assuming that the tab position is at the left - * ({@link #LEFT}). - * - * @param tabIndex the tab index. - * @param g the graphics device. - * @param x the x-coordinate for the tab's bounding rectangle. - * @param y the y-coordinate for the tab's bounding rectangle. - * @param w the width for the tab's bounding rectangle. - * @param h the height for the tab's bounding rectangle. - * @param btm ??? - * @param rght ??? - * @param isSelected indicates whether the tab is selected. - */ - protected void paintLeftTabBorder(int tabIndex, Graphics g, int x, int y, - int w, int h, int btm, int rght, boolean isSelected) - { - g.translate(x, y); - int bottom = h - 1; - int right = w - 1; - - int tabCount = tabPane.getTabCount(); - int currentRun = getRunForTab(tabCount, tabIndex); - int firstIndex = tabRuns[currentRun]; - - // Paint the part of the above tab. - if (tabIndex != firstIndex && tabIndex > 0 && tabsOpaque) - { - Color c; - if (tabPane.getSelectedIndex() == tabIndex - 1) - c = selectColor; - else - c = getUnselectedBackground(tabIndex - 1); - g.setColor(c); - g.fillRect(2, 0, 4, 3); - g.drawLine(2, 3, 2, 3); - } - - // Paint the highlight. - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - if (isOcean) - { - g.setColor(isSelected ? selectHighlight : MetalLookAndFeel.getWhite()); - } - else - { - g.setColor(isSelected ? selectHighlight : highlight); - } - // Slant. - g.drawLine(1, 6, 6, 1); - // Left. - g.drawLine(1, 6, 1, bottom); - // Top. - g.drawLine(6, 1, right, 1); - if (tabIndex != firstIndex) - { - if (isOcean) - { - g.setColor(MetalLookAndFeel.getWhite()); - } - g.drawLine(1, 0, 1, 4); - } - - // Paint border. - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - if (isOcean && isSelected) - { - g.setColor(oceanSelectedBorder); - } - else - { - g.setColor(darkShadow); - } - - // Slant. - g.drawLine(1, 5, 6, 0); - // Top. - g.drawLine(6, 0, right, 0); - // Bottom. - int lastIndex = lastTabInRun(tabCount, currentRun); - if (tabIndex == lastIndex) - { - g.drawLine(0, bottom, right, bottom); - } - // Left. - if (isOcean) - { - if (tabPane.getSelectedIndex() == tabIndex - 1) - { - g.drawLine(0, 6, 0, bottom); - if (tabIndex != firstIndex) - { - g.setColor(oceanSelectedBorder); - g.drawLine(0, 0, 0, 5); - } - } - else if (isSelected) - { - g.drawLine(0, 5, 0, bottom); - if (tabIndex != firstIndex) - { - g.setColor(darkShadow); - g.drawLine(0, 0, 0, 5); - } - } - else if (tabIndex != firstIndex) - { - g.drawLine(0, 0, 0, bottom); - } - else - { - g.drawLine(0, 6, 0, bottom); - } - } - else - { - if (tabIndex != firstIndex) - { - g.drawLine(0, 0, 0, bottom); - } - else - { - g.drawLine(0, 6, 0, bottom); - } - } - - g.translate(-x, -y); - } - - /** - * Paints the border for a tab assuming that the tab position is at the right - * ({@link #RIGHT}). - * - * @param tabIndex the tab index. - * @param g the graphics device. - * @param x the x-coordinate for the tab's bounding rectangle. - * @param y the y-coordinate for the tab's bounding rectangle. - * @param w the width for the tab's bounding rectangle. - * @param h the height for the tab's bounding rectangle. - * @param btm ??? - * @param rght ??? - * @param isSelected indicates whether the tab is selected. - */ - protected void paintRightTabBorder(int tabIndex, Graphics g, int x, int y, - int w, int h, int btm, int rght, boolean isSelected) - { - g.translate(x, y); - int bottom = h - 1; - int right = w - 1; - - int tabCount = tabPane.getTabCount(); - int currentRun = getRunForTab(tabCount, tabIndex); - int firstIndex = tabRuns[currentRun]; - - // Paint part of the above tab. - if (tabIndex != firstIndex && tabIndex > 0 && tabsOpaque) - { - Color c; - if (tabPane.getSelectedIndex() == tabIndex - 1) - c = selectColor; - else - c = getUnselectedBackground(tabIndex - 1); - g.setColor(c); - g.fillRect(right - 5, 0, 5, 3); - g.fillRect(right - 2, 3, 2, 2); - } - - // Paint highlight. - g.setColor(isSelected ? selectHighlight : highlight); - - // Slant. - g.drawLine(right - 6, 1, right - 1, 6); - // Top. - g.drawLine(0, 1, right - 6, 1); - // Left. - if (! isSelected) - { - g.drawLine(0, 1, 0, bottom); - } - - // Paint border. - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - if (isOcean && isSelected) - { - g.setColor(oceanSelectedBorder); - } - else - { - g.setColor(darkShadow); - } - - // Bottom. - int lastIndex = lastTabInRun(tabCount, currentRun); - if (tabIndex == lastIndex) - { - g.drawLine(0, bottom, right, bottom); - } - // Slant. - if (isOcean && tabPane.getSelectedIndex() == tabIndex - 1) - { - g.setColor(oceanSelectedBorder); - } - g.drawLine(right - 6, 0, right, 6); - // Top. - g.drawLine(0, 0, right - 6, 0); - // Right. - if (isOcean && isSelected) - { - g.drawLine(right, 6, right, bottom); - if (tabIndex != firstIndex) - { - g.setColor(darkShadow); - g.drawLine(right, 0, right, 5); - } - } - else if (isOcean && tabPane.getSelectedIndex() == tabIndex - 1) - { - if (tabIndex != firstIndex) - { - g.setColor(oceanSelectedBorder); - g.drawLine(right, 0, right, 6); - } - g.setColor(darkShadow); - g.drawLine(right, 7, right, bottom); - } - else if (tabIndex != firstIndex) - { - g.drawLine(right, 0, right, bottom); - } - else - { - g.drawLine(right, 6, right, bottom); - } - g.translate(-x, -y); - } - - /** - * Paints the border for a tab assuming that the tab position is at the bottom - * ({@link #BOTTOM}). - * - * @param tabIndex the tab index. - * @param g the graphics device. - * @param x the x-coordinate for the tab's bounding rectangle. - * @param y the y-coordinate for the tab's bounding rectangle. - * @param w the width for the tab's bounding rectangle. - * @param h the height for the tab's bounding rectangle. - * @param btm ??? - * @param rght ??? - * @param isSelected indicates whether the tab is selected. - */ - protected void paintBottomTabBorder(int tabIndex, Graphics g, int x, int y, - int w, int h, int btm, int rght, boolean isSelected) - { - int bottom = h - 1; - int right = w - 1; - - int tabCount = tabPane.getTabCount(); - int currentRun = getRunForTab(tabCount, tabIndex); - // Paint gap if necessary. - if (shouldFillGap(currentRun, tabIndex, x, y)) - { - g.translate(x, y); - g.setColor(getColorForGap(currentRun, x, y)); - g.fillRect(1, bottom - 4, 3, 5); - g.fillRect(4, bottom - 1, 2, 2); - g.translate(-x, -y); - } - - g.translate(x, y); - - // Paint border. - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - if (isOcean && isSelected) - { - g.setColor(oceanSelectedBorder); - } - else - { - g.setColor(darkShadow); - } - // Slant. - g.drawLine(1, bottom - 5, 6, bottom); - // Bottom. - g.drawLine(6, bottom, right, bottom); - // Right. - int lastIndex = lastTabInRun(tabCount, currentRun); - if (tabIndex == lastIndex) - { - g.drawLine(right, 0, right, bottom); - } - // Left. - if (isOcean && isSelected) - { - g.drawLine(0, 0, 0, bottom - 5); - - // Paint a connecting line to the tab below for all - // but the first tab in the last run. - if (tabIndex != tabRuns[runCount-1]) - { - g.setColor(darkShadow); - g.drawLine(0, bottom - 5, 0, bottom); - } - } - else - { - if (isOcean && tabIndex == tabPane.getSelectedIndex() + 1) - { - g.setColor(oceanSelectedBorder); - } - if (tabIndex != tabRuns[runCount - 1]) - { - g.drawLine(0, 0, 0, bottom); - } - else - { - g.drawLine(0, 0, 0, bottom - 6); - } - } - - // Paint highlight. - g.setColor(isSelected ? selectHighlight : highlight); - // Slant. - g.drawLine(1, bottom - 6, 6, bottom - 1); - // Left. - g.drawLine(1, 0, 1, bottom - 6); - - int firstIndex = tabRuns[currentRun]; - if (tabIndex == firstIndex && tabIndex != tabRuns[runCount - 1]) - { - if (tabPane.getSelectedIndex() == tabRuns[currentRun + 1]) - { - g.setColor(selectHighlight); - } - else - { - g.setColor(highlight); - } - g.drawLine(1, bottom - 4, 1, bottom); - } - - g.translate(-x, -y); - } - - /** - * Paints the background for a tab. - * - * @param g the graphics device. - * @param tabPlacement the tab placement ({@link #TOP}, {@link #LEFT}, - * {@link #BOTTOM} or {@link #RIGHT}). - * @param tabIndex the index of the tab to draw the border for. - * @param x the x-coordinate for the tab's bounding rectangle. - * @param y the y-coordinate for the tab's bounding rectangle. - * @param w the width for the tab's bounding rectangle. - * @param h the height for the tab's bounding rectangle. - * @param isSelected indicates whether or not the tab is selected. - */ - protected void paintTabBackground(Graphics g, int tabPlacement, - int tabIndex, int x, int y, int w, int h, boolean isSelected) - { - if (isSelected) - g.setColor(selectColor); - else - g.setColor(getUnselectedBackground(tabIndex)); - - switch (tabPlacement) - { - case LEFT: - g.fillRect(x + 5, y + 1, w - 5, h - 1); - g.fillRect(x + 2, y + 4, 3, h - 4); - break; - case BOTTOM: - g.fillRect(x + 2, y, w - 2, h - 3); - g.fillRect(x + 5, y + h - 4, w - 5, 3); - break; - case RIGHT: - g.fillRect(x, y + 1, w - 4, h - 1); - g.fillRect(x + w - 4, y + 5, 3, h - 5); - break; - case TOP: - default: - g.fillRect(x + 4, y + 2, w - 4, h - 2); - g.fillRect(x + 2, y + 5, 2, h - 5); - } - } - - /** - * This method paints the focus rectangle around the selected tab. - * - * @param g The Graphics object to paint with. - * @param tabPlacement The JTabbedPane's tab placement. - * @param rects The array of rectangles keeping track of size and position. - * @param tabIndex The tab index. - * @param iconRect The icon bounds. - * @param textRect The text bounds. - * @param isSelected Whether this tab is selected. - */ - protected void paintFocusIndicator(Graphics g, int tabPlacement, - Rectangle[] rects, int tabIndex, - Rectangle iconRect, Rectangle textRect, - boolean isSelected) - { - if (tabPane.hasFocus() && isSelected) - { - Rectangle rect = rects[tabIndex]; - - g.setColor(focus); - g.translate(rect.x, rect.y); - - switch (tabPlacement) - { - case LEFT: - // Top line - g.drawLine(7, 2, rect.width-2, 2); - - // Right line - g.drawLine(rect.width-1, 2, rect.width-1, rect.height-3); - - // Bottom line - g.drawLine(rect.width-2, rect.height-2, 3, rect.height-2); - - // Left line - g.drawLine(2, rect.height-3, 2, 7); - - // Slant - g.drawLine(2, 6, 6, 2); - break; - case RIGHT: - // Top line - g.drawLine(1, 2, rect.width-8, 2); - - // Slant - g.drawLine(rect.width-7, 2, rect.width-3, 6); - - // Right line - g.drawLine(rect.width-3, 7, rect.width-3, rect.height-3); - - // Bottom line - g.drawLine(rect.width-3, rect.height-2, 2, rect.height-2); - - // Left line - g.drawLine(1, rect.height-2, 1, 2); - break; - case BOTTOM: - // Top line - g.drawLine(2, 1, rect.width-2, 1); - - // Right line - g.drawLine(rect.width-1, 2, rect.width-1, rect.height-3); - - // Bottom line - g.drawLine(7, rect.height-3, rect.width-2, rect.height-3); - - // Slant - g.drawLine(6, rect.height-3, 2, rect.height-7); - - // Left line - g.drawLine(2, rect.height-8, 2, 2); - - break; - case TOP: - default: - // Top line - g.drawLine(6, 2, rect.width-2, 2); - - // Right line - g.drawLine(rect.width-1, 2, rect.width-1, rect.height-3); - - // Bottom line - g.drawLine(3, rect.height-3, rect.width-2, rect.height-3); - - // Left line - g.drawLine(2, rect.height-3, 2, 7); - - // Slant - g.drawLine(2, 6, 6, 2); - - } - - g.translate(-rect.x, -rect.y); - } - } - - /** - * Returns <code>true</code> if the tabs in the specified run should be - * padded to make the run fill the width/height of the {@link JTabbedPane}. - * - * @param tabPlacement the tab placement for the {@link JTabbedPane} (one of - * {@link #TOP}, {@link #BOTTOM}, {@link #LEFT} and {@link #RIGHT}). - * @param run the run index. - * - * @return A boolean. - */ - protected boolean shouldPadTabRun(int tabPlacement, int run) - { - // as far as I can tell, all runs should be padded except the last run - // (which is drawn at the very top for tabPlacement == TOP) - return run < this.runCount - 1; - } - - /** - * Installs the defaults for this UI. This method calls super.installDefaults - * and then loads the Metal specific defaults for TabbedPane. - */ - protected void installDefaults() - { - super.installDefaults(); - selectColor = UIManager.getColor("TabbedPane.selected"); - selectHighlight = UIManager.getColor("TabbedPane.selectHighlight"); - tabAreaBackground = UIManager.getColor("TabbedPane.tabAreaBackground"); - tabsOpaque = UIManager.getBoolean("TabbedPane.tabsOpaque"); - minTabWidth = 0; - } - - /** - * Returns the color for the gap. - * - * @param currentRun - The current run to return the color for - * @param x - The x position of the current run - * @param y - The y position of the current run - * - * @return the color for the gap in the current run. - */ - protected Color getColorForGap(int currentRun, int x, int y) - { - int index = tabForCoordinate(tabPane, x, y); - int selected = tabPane.getSelectedIndex(); - if (selected == index) - return selectColor; - return tabAreaBackground; - } - - /** - * Returns true if the gap should be filled in. - * - * @param currentRun - The current run - * @param tabIndex - The current tab - * @param x - The x position of the tab - * @param y - The y position of the tab - * - * @return true if the gap at the current run should be filled - */ - protected boolean shouldFillGap(int currentRun, int tabIndex, int x, int y) - { - // As far as I can tell, the gap is never filled in. - return false; - } - - /** - * Paints the highlight below the tab, if there is one. - */ - protected void paintHighlightBelowTab() - { - int selected = tabPane.getSelectedIndex(); - int tabPlacement = tabPane.getTabPlacement(); - Rectangle bounds = getTabBounds(tabPane, selected); - - hg.setColor(selectColor); - int x = bounds.x; - int y = bounds.y; - int w = bounds.width; - int h = bounds.height; - - if (tabPlacement == TOP) - hg.fillRect(x, y + h - 2, w, 30); - else if (tabPlacement == LEFT) - hg.fillRect(x + w - 1, y, 20, h); - else if (tabPlacement == BOTTOM) - hg.fillRect(x, y - h + 2, w, 30); - else if (tabPlacement == RIGHT) - hg.fillRect(x - 18, y, 20, h); - else - throw new AssertionError("Unrecognised 'tabPlacement' argument."); - hg = null; - } - - /** - * Returns true if we should rotate the tab runs. - * - * @param tabPlacement - The current tab placement. - * @param selectedRun - The selected run. - * - * @return true if the tab runs should be rotated. - */ - protected boolean shouldRotateTabRuns(int tabPlacement, - int selectedRun) - { - // false because tab runs are not rotated in the MetalLookAndFeel - return false; - } - - protected int calculateMaxTabHeight(int tabPlacement) - { - // FIXME: Why is this overridden? - return super.calculateMaxTabHeight(tabPlacement); - } - - /** - * Returns the amount of overlay among the tabs. In - * the Metal L&F the overlay for LEFT and RIGHT placement - * is half of the maxTabHeight. For TOP and BOTTOM placement - * the tabs do not overlay. - * - * @param tabPlacement the placement - * - * @return the amount of overlay among the tabs - */ - protected int getTabRunOverlay(int tabPlacement) - { - int overlay = 0; - if (tabPlacement == LEFT || tabPlacement == RIGHT) - { - int maxHeight = calculateMaxTabHeight(tabPlacement); - overlay = maxTabHeight / 2; - } - return overlay; - } - - /** - * Paints the upper edge of the content border. - * - * @param g the graphics to use for painting - * @param tabPlacement the tab placement - * @param selectedIndex the index of the selected tab - * @param x the upper left coordinate of the content area - * @param y the upper left coordinate of the content area - * @param w the width of the content area - * @param h the height of the content area - */ - protected void paintContentBorderTopEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - if (isOcean) - { - g.setColor(oceanSelectedBorder); - } - else - { - g.setColor(selectHighlight); - } - - Rectangle rect = selectedIndex < 0 ? null : - getTabBounds(selectedIndex, calcRect); - - // If tabs are not placed on TOP, or if the selected tab is not in the - // run directly above the content or the selected tab is not visible, - // then we draw an unbroken line. - if (tabPlacement != TOP || selectedIndex < 0 - || rect.y + rect.height + 1 < y || rect.x < x || rect.x > x + w) - { - g.drawLine(x, y, x + w - 2, y); - if (isOcean && tabPlacement == TOP) - { - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x, y + 1, x + w - 2, y + 1); - } - } - else - { - boolean isLast = isLastTabInRun(selectedIndex); - if (isLast) - { - g.drawLine(x, y, rect.x + 1, y); - } - else - { - g.drawLine(x, y, rect.x, y); - } - - int right = x + w - 1; - if (rect.x + rect.width < right - 1) - { - if (isLast) - { - g.drawLine(rect.x + rect.width - 1, y, right - 1, y); - } - else - { - g.drawLine(rect.x + rect.width, y, right - 1, y); - } - } - else - { - g.setColor(shadow); - g.drawLine(x + w - 2, y, x + w - 2, y); - } - - // When in OceanTheme, draw another white line. - if (isOcean) - { - g.setColor(MetalLookAndFeel.getWhite()); - if (isLast) - { - g.drawLine(x, y + 1, rect.x + 1, y + 1); - } - else - { - g.drawLine(x, y + 1, rect.x, y + 1); - } - - if (rect.x + rect.width < right - 1) - { - if (isLast) - { - g.drawLine(rect.x + rect.width - 1, y + 1, right - 1, - y + 1); - } - else - { - g.drawLine(rect.x + rect.width, y + 1, right - 1, y + 1); - } - } - else - { - g.setColor(shadow); - g.drawLine(x + w - 2, y + 1, x + w - 2, y + 1); - } - } - } - } - - /** - * Paints the lower edge of the content border. - * - * @param g the graphics to use for painting - * @param tabPlacement the tab placement - * @param selectedIndex the index of the selected tab - * @param x the upper left coordinate of the content area - * @param y the upper left coordinate of the content area - * @param w the width of the content area - * @param h the height of the content area - */ - protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - g.setColor(darkShadow); - - // If tabs are not placed on BOTTOM, or if the selected tab is not in the - // run directly below the content or the selected tab is not visible, - // then we draw an unbroken line. - Rectangle rect = selectedIndex < 0 ? null : - getTabBounds(selectedIndex, calcRect); - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - if (tabPlacement != BOTTOM || selectedIndex < 0 || rect.y - 1 > h - || rect.x < x || rect.x > x + w) - { - if (isOcean && tabPlacement == BOTTOM) - { - g.setColor(oceanSelectedBorder); - } - g.drawLine(x, y + h - 1, x + w - 1, y + h - 1); - } - else - { - boolean isLast = isLastTabInRun(selectedIndex); - if (isOcean) - { - g.setColor(oceanSelectedBorder); - } - - int bottom = y + h - 1; - int right = x + w - 1; - if (isLast) - { - g.drawLine(x, bottom, rect.x, bottom); - } - else - { - g.drawLine(x, bottom, rect.x - 1, bottom); - } - - if (rect.x + rect.width < x + w - 2) - { - if (isLast) - { - g.drawLine(rect.x + rect.width - 1, bottom, right, bottom); - } - else - { - g.drawLine(rect.x + rect.width, bottom, right, bottom); - } - } - } - } - - /** - * Paints the left edge of the content border. - * - * @param g the graphics to use for painting - * @param tabPlacement the tab placement - * @param selectedIndex the index of the selected tab - * @param x the upper left coordinate of the content area - * @param y the upper left coordinate of the content area - * @param w the width of the content area - * @param h the height of the content area - */ - protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - Rectangle rect = selectedIndex < 0 ? null : - getTabBounds(selectedIndex, calcRect); - - if (isOcean) - { - g.setColor(oceanSelectedBorder); - } - else - { - g.setColor(selectHighlight); - } - - // If tabs are not placed on LEFT, or if the selected tab is not in the - // run directly left to the content or the selected tab is not visible, - // then we draw an unbroken line. - if (tabPlacement != LEFT || selectedIndex < 0 - || rect.x + rect.width + 1 < x || rect.y < y || rect.y > y + h) - { - g.drawLine(x, y + 1, x, y + h - 2); - if (isOcean && tabPlacement == LEFT) - { - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x, y + 1, x, y + h - 2); - } - } - else - { - g.drawLine(x, y, x, rect.y + 1); - if (rect.y + rect.height < y + h - 2) - { - g.drawLine(x, rect.y + rect.height + 1, x, y + h + 2); - } - if (isOcean) - { - g.setColor(MetalLookAndFeel.getWhite()); - g.drawLine(x + 1, y + 1, x + 1, rect.y + 1); - if (rect.y + rect.height < y + h - 2) - { - g.drawLine(x + 1, rect.y + rect.height + 1, x + 1, y + h + 2); - } - } - } - - } - - /** - * Paints the right edge of the content border. - * - * @param g the graphics to use for painting - * @param tabPlacement the tab placement - * @param selectedIndex the index of the selected tab - * @param x the upper left coordinate of the content area - * @param y the upper left coordinate of the content area - * @param w the width of the content area - * @param h the height of the content area - */ - protected void paintContentBorderRightEdge(Graphics g, int tabPlacement, - int selectedIndex, int x, int y, - int w, int h) - { - g.setColor(darkShadow); - Rectangle rect = selectedIndex < 0 ? null : - getTabBounds(selectedIndex, calcRect); - boolean isOcean = MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme; - Color oceanSelectedBorder = - UIManager.getColor("TabbedPane.borderHightlightColor"); - - // If tabs are not placed on RIGHT, or if the selected tab is not in the - // run directly right to the content or the selected tab is not visible, - // then we draw an unbroken line. - if (tabPlacement != RIGHT || selectedIndex < 0 || rect.x - 1 > w - || rect.y < y || rect.y > y + h) - { - if (isOcean && tabPlacement == RIGHT) - { - g.setColor(oceanSelectedBorder); - } - g.drawLine(x + w - 1, y, x + w - 1, y + h - 1); - } - else - { - if (isOcean) - { - g.setColor(oceanSelectedBorder); - } - g.drawLine(x + w - 1, y, x + w - 1, rect.y); - - if (rect.y + rect.height < y + h - 2) - { - g.drawLine(x + w - 1, rect.y + rect.height, x + w - 1, y + h - 2); - } - } - } - - /** - * Determines if the specified tab is the last tab in its tab run. - * - * @param tabIndex the index of the tab - * - * @return if the specified tab is the last tab in its tab run - */ - private boolean isLastTabInRun(int tabIndex) - { - int count = tabPane.getTabCount(); - int run = getRunForTab(count, tabIndex); - int lastIndex = lastTabInRun(count, run); - return tabIndex == lastIndex; - } - - /** - * Returns the background for an unselected tab. This first asks the - * JTabbedPane for the background at the specified tab index, if this - * is an UIResource (that means, it is inherited from the JTabbedPane) - * and the TabbedPane.unselectedBackground UI property is not null, - * this returns the value of the TabbedPane.unselectedBackground property, - * otherwise the value returned by the JTabbedPane. - * - * @param tabIndex the index of the tab for which we query the background - * - * @return the background for an unselected tab - */ - private Color getUnselectedBackground(int tabIndex) - { - Color bg = tabPane.getBackgroundAt(tabIndex); - Color unselectedBackground = - UIManager.getColor("TabbedPane.unselectedBackground"); - if (bg instanceof UIResource && unselectedBackground != null) - bg = unselectedBackground; - return bg; - } - - protected int getTabLabelShiftX(int tabPlacement, - int index, - boolean isSelected) - { - return 0; - } - - protected int getTabLabelShiftY(int tabPlacement, - int index, - boolean isSelected) - { - return 0; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalTextFieldUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalTextFieldUI.java deleted file mode 100644 index f7b18db..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalTextFieldUI.java +++ /dev/null @@ -1,82 +0,0 @@ -/* MetalTextFieldUI.java - Copyright (C) 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.plaf.metal; - -import java.beans.PropertyChangeEvent; - -import javax.swing.JComponent; -import javax.swing.JTextField; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicTextFieldUI; - -/** - * A UI delegate for the {@link JTextField} component. - */ -public class MetalTextFieldUI extends BasicTextFieldUI -{ - /** - * Constructs a new instance of MetalTextFieldUI. - */ - public MetalTextFieldUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalTextFieldUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalTextFieldUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalTextFieldUI(); - } - - /** - * This method gets called when a bound property is changed on the associated - * JTextComponent. This is a hook which UI implementations may change to - * reflect how the UI displays bound properties of JTextComponent subclasses. - */ - public void propertyChange(PropertyChangeEvent evt) - { - super.propertyChange(evt); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalTheme.java b/libjava/classpath/javax/swing/plaf/metal/MetalTheme.java deleted file mode 100644 index 209cbbe..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalTheme.java +++ /dev/null @@ -1,576 +0,0 @@ -/* MetalTheme.java -- - Copyright (C) 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.plaf.metal; - -import java.awt.Color; - -import javax.swing.UIDefaults; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.FontUIResource; - -/** - * The base class for themes used by the {@link MetalLookAndFeel}. A default - * theme ({@link DefaultMetalTheme}) is provided, or you can create and use - * your own. - * - * @see MetalLookAndFeel#setCurrentTheme(MetalTheme) - */ -public abstract class MetalTheme -{ - private ColorUIResource BLACK = new ColorUIResource(Color.BLACK); - private ColorUIResource WHITE = new ColorUIResource(Color.WHITE); - - /** - * Default constructor. - */ - public MetalTheme() - { - // Do nothing here. - } - - /** - * Returns the name of the theme. - * - * @return The name of the theme. - */ - public abstract String getName(); - - /** - * Adds custom entries to the UI defaults table. This method is empty. - * - * @param table the table. - */ - public void addCustomEntriesToTable(UIDefaults table) - { - // Do nothing here. - // This method needs to be overridden to actually do something. - // It is called from MetalLookAndFeel.getDefaults(). - } - - /** - * Returns the accelerator foreground color. The default implementation - * returns the color from {@link #getPrimary1()}. - * - * @return The accelerator foreground color. - */ - public ColorUIResource getAcceleratorForeground() - { - return getPrimary1(); - } - - /** - * Returns the accelerator selected foreground color. The default - * implementation returns the color from {@link #getBlack()}. - * - * @return The accelerator selected foreground color. - */ - public ColorUIResource getAcceleratorSelectedForeground() - { - return getBlack(); - } - - /** - * Returns the control color. The default implementation returns the color - * from {@link #getSecondary3()}. - * - * @return The control color. - */ - public ColorUIResource getControl() - { - return getSecondary3(); - } - - /** - * Returns the color used for dark shadows on controls. The default - * implementation returns the color from {@link #getSecondary1()}. - * - * @return The color used for dark shadows on controls. - */ - public ColorUIResource getControlDarkShadow() - { - return getSecondary1(); - } - - /** - * Returns the color used for disabled controls. The default implementation - * returns the color from {@link #getSecondary1()}. - * - * @return The color used for disabled controls. - */ - public ColorUIResource getControlDisabled() - { - return getSecondary2(); - } - - /** - * Returns the color used to draw highlights for controls. The default - * implementation returns the color from {@link #getWhite()}. - * - * @return The color used to draw highlights for controls. - */ - public ColorUIResource getControlHighlight() - { - return getWhite(); - } - - /** - * Returns the color used to display control info. The default - * implementation returns the color from {@link #getBlack()}. - * - * @return The color used to display control info. - */ - public ColorUIResource getControlInfo() - { - return getBlack(); - } - - /** - * Returns the color used to draw shadows for controls. The default - * implementation returns the color from {@link #getSecondary2()}. - * - * @return The color used to draw shadows for controls. - */ - public ColorUIResource getControlShadow() - { - return getSecondary2(); - } - - /** - * Returns the color used for text on controls. The default implementation - * returns the color from {@link #getControlInfo()}. - * - * @return The color used for text on controls. - */ - public ColorUIResource getControlTextColor() - { - return getControlInfo(); - } - - /** - * Returns the color used for the desktop background. The default - * implementation returns the color from {@link #getPrimary2()}. - * - * @return The color used for the desktop background. - */ - public ColorUIResource getDesktopColor() - { - return getPrimary2(); - } - - /** - * Returns the color used to draw focus highlights. The default - * implementation returns the color from {@link #getPrimary2()}. - * - * @return The color used to draw focus highlights. - */ - public ColorUIResource getFocusColor() - { - return getPrimary2(); - } - - /** - * Returns the color used to draw highlighted text. The default - * implementation returns the color from {@link #getHighlightedTextColor()}. - * - * @return The color used to draw highlighted text. - */ - public ColorUIResource getHighlightedTextColor() - { - return getControlTextColor(); - } - - /** - * Returns the color used to draw text on inactive controls. The default - * implementation returns the color from {@link #getControlDisabled()}. - * - * @return The color used to draw text on inactive controls. - */ - public ColorUIResource getInactiveControlTextColor() - { - return getControlDisabled(); - } - - /** - * Returns the color used to draw inactive system text. The default - * implementation returns the color from {@link #getSecondary2()}. - * - * @return The color used to draw inactive system text. - */ - public ColorUIResource getInactiveSystemTextColor() - { - return getSecondary2(); - } - - /** - * Returns the background color for menu items. The default implementation - * returns the color from {@link #getSecondary3()}. - * - * @return The background color for menu items. - * - * @see #getMenuSelectedBackground() - */ - public ColorUIResource getMenuBackground() - { - return getSecondary3(); - } - - /** - * Returns the foreground color for disabled menu items. The default - * implementation returns the color from {@link #getSecondary2()}. - * - * @return The foreground color for disabled menu items. - * - * @see #getMenuForeground() - */ - public ColorUIResource getMenuDisabledForeground() - { - return getSecondary2(); - } - - /** - * Returns the foreground color for menu items. The default implementation - * returns the color from {@link #getBlack()}. - * - * @return The foreground color for menu items. - * - * @see #getMenuDisabledForeground() - * @see #getMenuSelectedForeground() - */ - public ColorUIResource getMenuForeground() - { - return getBlack(); - } - - /** - * Returns the background color for selected menu items. The default - * implementation returns the color from {@link #getPrimary2()}. - * - * @return The background color for selected menu items. - * - * @see #getMenuBackground() - */ - public ColorUIResource getMenuSelectedBackground() - { - return getPrimary2(); - } - - /** - * Returns the foreground color for selected menu items. The default - * implementation returns the value from {@link #getBlack()}. - * - * @return The foreground color for selected menu items. - * - * @see #getMenuForeground() - */ - public ColorUIResource getMenuSelectedForeground() - { - return getBlack(); - } - - /** - * Returns the primary color for controls. The default implementation - * returns the color from {@link #getPrimary3()}. - * - * @return The primary color for controls. - */ - public ColorUIResource getPrimaryControl() - { - return getPrimary3(); - } - - /** - * Returns the primary color for the dark shadow on controls. The default - * implementation returns the color from {@link #getPrimary1()}. - * - * @return The primary color for the dark shadow on controls. - */ - public ColorUIResource getPrimaryControlDarkShadow() - { - return getPrimary1(); - } - - /** - * Returns the primary color for the highlight on controls. The default - * implementation returns the color from {@link #getWhite()}. - * - * @return The primary color for the highlight on controls. - */ - public ColorUIResource getPrimaryControlHighlight() - { - return getWhite(); - } - - /** - * Returns the primary color for the information on controls. The default - * implementation returns the color from {@link #getBlack()}. - * - * @return The primary color for the information on controls. - */ - public ColorUIResource getPrimaryControlInfo() - { - return getBlack(); - } - - /** - * Returns the primary color for the shadow on controls. The default - * implementation returns the color from {@link #getPrimary2()}. - * - * @return The primary color for the shadow on controls. - */ - public ColorUIResource getPrimaryControlShadow() - { - return getPrimary2(); - } - - /** - * Returns the background color for separators. The default implementation - * returns the color from {@link #getWhite()}. - * - * @return The background color for separators. - */ - public ColorUIResource getSeparatorBackground() - { - return getWhite(); - } - - /** - * Returns the foreground color for separators. The default implementation - * returns the value from {@link #getPrimary1()}. - * - * @return The foreground color for separators. - */ - public ColorUIResource getSeparatorForeground() - { - return getPrimary1(); - } - - /** - * Returns the color used for system text. The default implementation - * returns the color from {@link #getBlack()}. - * - * @return The color used for system text. - */ - public ColorUIResource getSystemTextColor() - { - return getBlack(); - } - - /** - * Returns the color used to highlight text. The default implementation - * returns the color from {@link #getPrimary3()}. - * - * @return The color used to highlight text. - */ - public ColorUIResource getTextHighlightColor() - { - return getPrimary3(); - } - - /** - * Returns the color used to display user text. The default implementation - * returns the color from {@link #getBlack()}. - * - * @return The color used to display user text. - */ - public ColorUIResource getUserTextColor() - { - return getBlack(); - } - - /** - * Returns the window background color. The default implementation returns - * the color from {@link #getWhite()}. - * - * @return The window background color. - */ - public ColorUIResource getWindowBackground() - { - return getWhite(); - } - - /** - * Returns the window title background color. The default implementation - * returns the color from {@link #getPrimary3()}. - * - * @return The window title background color. - */ - public ColorUIResource getWindowTitleBackground() - { - return getPrimary3(); - } - - /** - * Returns the window title foreground color. The default implementation - * returns the color from {@link #getBlack()}. - * - * @return The window title foreground color. - */ - public ColorUIResource getWindowTitleForeground() - { - return getBlack(); - } - - /** - * Returns the background color for an inactive window title. The default - * implementation returns the color from {@link #getSecondary3()}. - * - * @return The background color for an inactive window title. - */ - public ColorUIResource getWindowTitleInactiveBackground() - { - return getSecondary3(); - } - - /** - * Returns the foreground color for an inactive window title. The default - * implementation returns the color from {@link #getBlack()}. - * - * @return The foreground color for an inactive window title. - */ - public ColorUIResource getWindowTitleInactiveForeground() - { - return getBlack(); - } - - /** - * Returns the color used for black. - * - * @return The color used for black. - */ - protected ColorUIResource getBlack() - { - return BLACK; - } - - /** - * Returns the color used for white. - * - * @return The color used for white. - */ - protected ColorUIResource getWhite() - { - return WHITE; - } - - /** - * Returns the first primary color for this theme. - * - * @return The first primary color. - */ - protected abstract ColorUIResource getPrimary1(); - - /** - * Returns the second primary color for this theme. - * - * @return The second primary color. - */ - protected abstract ColorUIResource getPrimary2(); - - /** - * Returns the third primary color for this theme. - * - * @return The third primary color. - */ - protected abstract ColorUIResource getPrimary3(); - - /** - * Returns the first secondary color for this theme. - * - * @return The first secondary color. - */ - protected abstract ColorUIResource getSecondary1(); - - /** - * Returns the second secondary color for this theme. - * - * @return The second secondary color. - */ - protected abstract ColorUIResource getSecondary2(); - - /** - * Returns the third secondary color for this theme. - * - * @return The third secondary color. - */ - protected abstract ColorUIResource getSecondary3(); - - /** - * Returns the font used for text on controls. - * - * @return The font used for text on controls. - */ - public abstract FontUIResource getControlTextFont(); - - /** - * Returns the font used for text in menus. - * - * @return The font used for text in menus. - */ - public abstract FontUIResource getMenuTextFont(); - - /** - * Returns the font used for sub text. - * - * @return The font used for sub text. - */ - public abstract FontUIResource getSubTextFont(); - - /** - * Returns the font used for system text. - * - * @return The font used for system text. - */ - public abstract FontUIResource getSystemTextFont(); - - /** - * Returns the font used for user text. - * - * @return The font used for user text. - */ - public abstract FontUIResource getUserTextFont(); - - /** - * Returns the font used for window titles. - * - * @return The font used for window titles. - */ - public abstract FontUIResource getWindowTitleFont(); - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java deleted file mode 100644 index 2dacd7f..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalToggleButtonUI.java +++ /dev/null @@ -1,230 +0,0 @@ -/* MetalToggleButtonUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.AbstractButton; -import javax.swing.ButtonModel; -import javax.swing.JComponent; -import javax.swing.JToggleButton; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicButtonUI; -import javax.swing.plaf.basic.BasicToggleButtonUI; - -/** - * A UI delegate for the {@link JToggleButton} component. - */ -public class MetalToggleButtonUI - extends BasicToggleButtonUI -{ - - /** The color for the focus border. */ - protected Color focusColor; - - /** The color that indicates a selected button. */ - protected Color selectColor; - - /** The color for disabled button labels. */ - protected Color disabledTextColor; - - /** - * Returns a new instance of <code>MetalToggleButtonUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalToggleButtonUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalToggleButtonUI(); - } - - /** - * Constructs a new instance of <code>MetalToggleButtonUI</code>. - */ - public MetalToggleButtonUI() - { - super(); - } - - /** - * Returns the color for the focus border. - * - * @return the color for the focus border - */ - protected Color getFocusColor() - { - return focusColor; - } - - /** - * Returns the color that indicates a selected button. - * - * @return the color that indicates a selected button - */ - protected Color getSelectColor() - { - return selectColor; - } - - /** - * Returns the color for the text label of disabled buttons. The value - * is initialised in the {@link #installDefaults(AbstractButton)} method - * by reading the <code>ToggleButton.disabledText</code> item from the UI - * defaults. - * - * @return The color for the text label of disabled buttons. - */ - protected Color getDisabledTextColor() - { - return disabledTextColor; - } - - /** - * Updates the button with the defaults for this look and feel. - * - * @param b the button. - */ - public void installDefaults(AbstractButton b) - { - super.installDefaults(b); - focusColor = UIManager.getColor(getPropertyPrefix() + "focus"); - selectColor = UIManager.getColor(getPropertyPrefix() + "select"); - disabledTextColor = UIManager.getColor(getPropertyPrefix() + "disabledText"); - } - - /** - * Paints the button background when it is pressed/selected. - * - * @param g the graphics device. - * @param b the button. - */ - protected void paintButtonPressed(Graphics g, AbstractButton b) - { - if (b.isContentAreaFilled() && b.isOpaque()) - { - Color saved = g.getColor(); - Rectangle bounds = SwingUtilities.getLocalBounds(b); - g.setColor(selectColor); - g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height); - g.setColor(saved); - } - } - - /** - * Paints the text for the button. - * - * As of JDK 1.4 this method is obsolete. - * Use {@link BasicButtonUI#paintText(java.awt.Graphics, - * javax.swing.AbstractButton, java.awt.Rectangle, java.lang.String)}. - * - * @param g the graphics device. - * @param c the component. - * @param textRect the bounds for the text. - * @param text the text. - * - */ - protected void paintText(Graphics g, JComponent c, Rectangle textRect, - String text) - { - Font savedFont = g.getFont(); - Color savedColor = g.getColor(); - g.setFont(c.getFont()); - if (c.isEnabled()) - g.setColor(c.getForeground()); - else - g.setColor(disabledTextColor); - FontMetrics fm = g.getFontMetrics(c.getFont()); - int ascent = fm.getAscent(); - g.drawString(text, textRect.x, textRect.y + ascent); - g.setFont(savedFont); - g.setColor(savedColor); - } - - /** - * Draws the focus highlight around the text and icon. - * - * @param g the graphics device. - * @param b the button. - */ - protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, - Rectangle textRect, Rectangle iconRect) - { - if (!b.hasFocus()) - return; - Color saved = g.getColor(); - g.setColor(focusColor); - Rectangle fr = iconRect.union(textRect); - g.drawRect(fr.x - 1, fr.y - 1, fr.width + 1, fr.height + 1); - g.setColor(saved); - } - - /** - * If the property <code>ToggleButton.gradient</code> is set, then a gradient - * is painted as background, otherwise the normal superclass behaviour is - * called. - */ - public void update(Graphics g, JComponent c) - { - AbstractButton b = (AbstractButton) c; - ButtonModel m = b.getModel(); - if (b.getBackground() instanceof UIResource - && b.isContentAreaFilled() - && b.isEnabled() && ! m.isArmed() && ! m.isPressed() - && UIManager.get(getPropertyPrefix() + "gradient") != null) - { - MetalUtils.paintGradient(g, 0, 0, c.getWidth(), c.getHeight(), - SwingConstants.VERTICAL, - getPropertyPrefix() + "gradient"); - paint(g, c); - } - else - super.update(g, c); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java deleted file mode 100644 index 64e679c..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalToolBarUI.java +++ /dev/null @@ -1,298 +0,0 @@ -/* MetalToolBarUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Graphics; -import java.awt.Point; -import java.awt.event.ContainerListener; -import java.awt.event.MouseEvent; - -import java.beans.PropertyChangeListener; - -import javax.swing.JComponent; -import javax.swing.JToolBar; -import javax.swing.SwingConstants; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.event.MouseInputListener; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicToolBarUI; - -/** - * A UI delegate for the {@link JToolBar} component. - */ -public class MetalToolBarUI extends BasicToolBarUI -{ - - /** - * A listener (no longer used) that responds when components are added to or - * removed from the {@link JToolBar}. The required behaviour is now - * handled in the super class. - * - * @see MetalToolBarUI#createContainerListener() - */ - protected class MetalContainerListener - extends BasicToolBarUI.ToolBarContListener - { - /** - * Creates a new instance. - */ - protected MetalContainerListener() - { - // Nothing to do here. - } - } - - /** - * A listener (no longer used) that responds to property change events in a - * {@link JToolBar} component. The required behaviour is now handled in the - * super class. - * - * @see MetalToolBarUI#createRolloverListener() - */ - protected class MetalRolloverListener - extends BasicToolBarUI.PropertyListener - { - /** - * Creates a new instance. - */ - protected MetalRolloverListener() - { - // Nothing to do here. - } - } - - /** - * The container listener (an implementation specific field, according to the - * spec, and not used in GNU Classpath). - */ - protected ContainerListener contListener; - - /** - * The rollover listener (an implementation specific field, according to the - * spec, and not used in GNU Classpath). - */ - protected PropertyChangeListener rolloverListener; - - /** - * Creates a new instance of this UI delegate. - */ - public MetalToolBarUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalToolBarUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalToolBarUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalToolBarUI(); - } - - /** - * Returns <code>null</code> as permitted by recent versions of the API - * specification. Originally it seems this method returned a new instance of - * {@link MetalRolloverListener}, but this is now redundant. - * - * @return <code>null</code>. - */ - protected PropertyChangeListener createRolloverListener() - { - return null; - } - - /** - * Returns <code>null</code> as permitted by recent versions of the API - * specification. Originally it seems this method returned a new instance of - * {@link MetalContainerListener}, but this is now redundant. - * - * @return <code>null</code>. - */ - protected ContainerListener createContainerListener() - { - return null; - } - - /** - * Returns a border with no rollover effect for buttons in the tool bar. - * - * @return A border. - * - * @see MetalBorders#getToolbarButtonBorder() - */ - protected Border createNonRolloverBorder() - { - return MetalBorders.getToolbarButtonBorder(); - } - - /** - * Sets the offset for the window used for dragging the toolbar. - * It is set as long as the window is not null (it has been installed). - */ - protected void setDragOffset(Point p) - { - if (dragWindow != null) - dragWindow.setOffset(p); - } - - /** - * Creates and returns an instance of MetalDockingListener. - * - * @return an instance of MetalDockingListener. - */ - protected MouseInputListener createDockingListener() - { - return new MetalDockingListener(toolBar); - } - - /** - * This is the MouseHandler class that allows the user to drag the JToolBar - * in and out of the parent and dock it if it can. - */ - protected class MetalDockingListener extends BasicToolBarUI.DockingListener - { - /** - * Creates a new DockingListener object. - * - * @param t The JToolBar this DockingListener is being used for. - */ - public MetalDockingListener(JToolBar t) - { - super(t); - } - - /** - * This method is called when the mouse is pressed in the JToolBar. If the - * press doesn't occur in a place where it causes the JToolBar to be - * dragged, it returns. Otherwise, it starts a drag session. - * - * @param e The MouseEvent. - */ - public void mousePressed(MouseEvent e) - { - super.mousePressed(e); - setDragOffset(new Point(e.getX(), e.getY())); - } - - /** - * This method is called when the mouse is dragged. It delegates the drag - * painting to the dragTo method. - * - * @param e The MouseEvent. - */ - public void mouseDragged(MouseEvent e) - { - // Does not do anything differently than dragging - // BasicToolBarUI.DockingListener - super.mouseDragged(e); - } - } - - /** - * Installs the UI on the toolbar. This calls super and sets the rollover - * property according to the <code>UIManager</code> property - * "ToolBar.isRollover". - * - * @param c the component to install the UI on - */ - public void installUI(JComponent c) - { - super.installUI(c); - if (c instanceof JToolBar) - { - JToolBar tb = (JToolBar) c; - tb.setRollover(UIManager.getBoolean("ToolBar.isRollover")); - } - } - - /** - * Uninstalls the UI from the toolbar. This calls super and resets the - * rollover property. - * - * @param c the component to uninstall the UI from - */ - public void uninstallUI(JComponent c) - { - if (c instanceof JToolBar) - { - JToolBar tb = (JToolBar) c; - tb.setRollover(false); - } - super.uninstallUI(c); - } - - /** - * Paints the background of the component if necessary and then calls - * <code>paint(g, c)</code>. - * - * This is overridden to implement the OceanTheme gradient when an OceanTheme - * is installed. - * - * @param g the graphics to use - * @param c the component to paint. - * - * @since 1.5 - */ - public void update(Graphics g, JComponent c) - { - // TODO: Sun's implementation uses the MenuBar.gradient here. - // I would consider this a bug, but implement it like this - // for compatibility. - if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme - && UIManager.get("MenuBar.gradient") != null) - { - if (c.isOpaque()) - { - MetalUtils.paintGradient(g, 0, 0, c.getWidth(), c.getHeight(), - SwingConstants.VERTICAL, - "MenuBar.gradient"); - } - paint(g, c); - } - else - { - super.update(g, c); - } - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalToolTipUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalToolTipUI.java deleted file mode 100644 index 742ff22..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalToolTipUI.java +++ /dev/null @@ -1,276 +0,0 @@ -/* MetalToolTipUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; - -import javax.swing.AbstractButton; -import javax.swing.JComponent; -import javax.swing.JMenuItem; -import javax.swing.JToolTip; -import javax.swing.KeyStroke; -import javax.swing.UIManager; -import javax.swing.border.Border; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.plaf.basic.BasicToolTipUI; - -/** - * A UI delegate for the {@link JToolTip} component. - */ -public class MetalToolTipUI - extends BasicToolTipUI -{ - /** - * The amount of space between the tool tip text and the accelerator - * description (if visible). - */ - public static final int padSpaceBetweenStrings = 12; - - /** The shared UI instance. */ - private static MetalToolTipUI instance; - - /** A flag controlling the visibility of the accelerator (if there is one). */ - private boolean isAcceleratorHidden; - - /** A string representing the accelerator key for the component. */ - private String acceleratorString; - - /** - * The delimiter for the accelerator string. - */ - private String acceleratorDelimiter; - - /** The font for the accelerator string. */ - private Font acceleratorFont; - - /** The color for the accelerator string. */ - private Color acceleratorForeground; - - /** The active border. */ - private Border activeBorder; - - /** The inactive border. */ - private Border inactiveBorder; - - /** - * Constructs a new instance of <code>MetalToolTipUI</code>. - */ - public MetalToolTipUI() - { - super(); - activeBorder = UIManager.getBorder("ToolTip.border"); - inactiveBorder = UIManager.getBorder("ToolTip.borderInactive"); - isAcceleratorHidden = UIManager.getBoolean("ToolTip.hideAccelerator"); - acceleratorFont = UIManager.getFont("MenuItem.acceleratorFont"); - acceleratorForeground = UIManager.getColor("MenuItem.acceleratorForeground"); - acceleratorDelimiter = UIManager.getString("MenuItem.acceleratorDelimiter"); - } - - /** - * Returns a shared instance of the <code>MetalToolTipUI</code> class. - * Although this UI delegate does maintain state information, there is never - * more than one tool tip visible, so it is OK to use a shared instance. - * - * @param component the component (a {@link JToolTip}). - * - * @return A shared instance of the <code>MetalToolTipUI</code> class. - */ - public static ComponentUI createUI(JComponent component) - { - if (instance == null) - instance = new MetalToolTipUI(); - return instance; - } - - /** - * Returns a string representing the accelerator key (if there is one) for - * the component that the tool tip belongs to. - * - * @return A string representing the accelerator key. - */ - public String getAcceleratorString() - { - return acceleratorString; - } - - /** - * Installs the UI for the specified component (a {@link JToolTip}). - * - * @param c the {@link JToolTip} component. - */ - public void installUI(JComponent c) - { - super.installUI(c); - Border existingBorder = c.getBorder(); - if (existingBorder == null || existingBorder instanceof UIResource) - { - if (c.isEnabled()) - c.setBorder(activeBorder); - else - c.setBorder(inactiveBorder); - } - } - - /** - * Clears the defaults set in {@link #installUI(JComponent)}. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - if (c.getBorder() instanceof UIResource) - c.setBorder(null); - } - - /** - * Returns <code>true</code> if the accelerator string is hidden, and - * <code>false</code> otherwise. This setting is controlled by the - * <code>ToolTip.hideAccelerator</code> entry in the UI defaults table. - * - * @return A boolean. - */ - protected boolean isAcceleratorHidden() - { - return isAcceleratorHidden; - } - - /** - * Returns the preferred size for the {@link JToolTip} component. - * - * @param c the component (a {@link JToolTip}). - * - * @return The preferred size. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension d = super.getPreferredSize(c); - String acc = getAcceleratorString(); - if (acc != null && ! acc.equals("")) - { - FontMetrics fm = c.getFontMetrics(c.getFont()); - d.width += fm.stringWidth(acc); - } - return d; - } - - /** - * Paints the tool tip. - * - * @param g the graphics context. - * @param c the {@link JToolTip} component. - */ - public void paint(Graphics g, JComponent c) - { - super.paint(g, c); - // Somehow paint accelerator. Keep care for possible HTML rendering. - } - - /** - * Returns a string representing the accelerator for the component, or - * <code>null</code> if the component has no accelerator. - * - * @param c the component. - * - * @return A string representing the accelerator (possibly - * <code>null</code>). - */ - private String fetchAcceleratorString(JComponent c) - { - String result = null; - if (c instanceof JToolTip) - { - JToolTip toolTip = (JToolTip) c; - JComponent component = toolTip.getComponent(); - KeyStroke ks = null; - int mne = 0; - if (component instanceof JMenuItem) - { - JMenuItem item = (JMenuItem) component; - ks = item.getAccelerator(); - if (ks == null) - mne = item.getMnemonic(); - } - else if (component instanceof AbstractButton) - { - AbstractButton button = (AbstractButton) component; - mne = button.getMnemonic(); - } - if (mne > 0) - ks = KeyStroke.getKeyStroke(Character.toUpperCase((char) mne), - InputEvent.ALT_MASK, false); - if (ks != null) - result = acceleratorToString(ks); - } - return result; - } - - /** - * Returns a string representing an accelerator. - * - * @param accelerator the accelerator (<code>null</code> not permitted). - * - * @return A string representing an accelerator. - */ - private String acceleratorToString(KeyStroke accelerator) - { - // convert keystroke into string format - String modifiersText = ""; - int modifiers = accelerator.getModifiers(); - char keyChar = accelerator.getKeyChar(); - int keyCode = accelerator.getKeyCode(); - - if (modifiers != 0) - modifiersText = KeyEvent.getKeyModifiersText(modifiers) - + acceleratorDelimiter; - - if (keyCode == KeyEvent.VK_UNDEFINED) - return modifiersText + keyChar; - else - return modifiersText + KeyEvent.getKeyText(keyCode); - } - -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java b/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java deleted file mode 100644 index bdfa2d4..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalTreeUI.java +++ /dev/null @@ -1,317 +0,0 @@ -/* MetalTreeUI.java - Copyright (C) 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.plaf.metal; - -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JComponent; -import javax.swing.JTree; -import javax.swing.UIManager; -import javax.swing.tree.TreePath; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicTreeUI; - -/** - * A UI delegate for the {@link JTree} component. - */ -public class MetalTreeUI extends BasicTreeUI -{ - /** - * Listens for property changes of the line style and updates the - * internal setting. - */ - private class LineStyleListener - implements PropertyChangeListener - { - - public void propertyChange(PropertyChangeEvent e) - { - if (e.getPropertyName().equals(LINE_STYLE_PROPERTY)) - decodeLineStyle(e.getNewValue()); - } - - } - - /** - * The key to the lineStyle client property. - */ - private static final String LINE_STYLE_PROPERTY = "JTree.lineStyle"; - - /** - * The property value indicating no line style. - */ - private static final String LINE_STYLE_VALUE_NONE = "None"; - - /** - * The property value indicating angled line style. - */ - private static final String LINE_STYLE_VALUE_ANGLED = "Angled"; - - /** - * The property value indicating horizontal line style. - */ - private static final String LINE_STYLE_VALUE_HORIZONTAL = "Horizontal"; - - /** - * The line style for None. - */ - private static final int LINE_STYLE_NONE = 0; - - /** - * The line style for Angled. - */ - private static final int LINE_STYLE_ANGLED = 1; - - /** - * The line style for Horizontal. - */ - private static final int LINE_STYLE_HORIZONTAL = 2; - - /** - * The current line style. - */ - private int lineStyle; - - /** - * Listens for changes on the line style property and updates the - * internal settings. - */ - private PropertyChangeListener lineStyleListener; - - /** - * Constructs a new instance of <code>MetalTreeUI</code>. - */ - public MetalTreeUI() - { - super(); - } - - /** - * Returns a new instance of <code>MetalTreeUI</code>. - * - * @param component the component for which we return an UI instance - * - * @return A new instance of <code>MetalTreeUI</code>. - */ - public static ComponentUI createUI(JComponent component) - { - return new MetalTreeUI(); - } - - /** - * The horizontal element of legs between nodes starts at the right of the - * left-hand side of the child node by default. This method makes the - * leg end before that. - */ - protected int getHorizontalLegBuffer() - { - return super.getHorizontalLegBuffer(); - } - - /** - * Configures the specified component appropriate for the look and feel. - * This method is invoked when the ComponentUI instance is being installed - * as the UI delegate on the specified component. This method should completely - * configure the component for the look and feel, including the following: - * 1. Install any default property values for color, fonts, borders, icons, - * opacity, etc. on the component. Whenever possible, property values - * initialized by the client program should not be overridden. - * 2. Install a LayoutManager on the component if necessary. - * 3. Create/add any required sub-components to the component. - * 4. Create/install event listeners on the component. - * 5. Create/install a PropertyChangeListener on the component in order - * to detect and respond to component property changes appropriately. - * 6. Install keyboard UI (mnemonics, traversal, etc.) on the component. - * 7. Initialize any appropriate instance data. - */ - public void installUI(JComponent c) - { - super.installUI(c); - - Object lineStyleProp = c.getClientProperty(LINE_STYLE_PROPERTY); - decodeLineStyle(lineStyleProp); - if (lineStyleListener == null) - lineStyleListener = new LineStyleListener(); - c.addPropertyChangeListener(lineStyleListener); - } - - /** - * Reverses configuration which was done on the specified component during - * installUI. This method is invoked when this UIComponent instance is being - * removed as the UI delegate for the specified component. This method should - * undo the configuration performed in installUI, being careful to leave the - * JComponent instance in a clean state (no extraneous listeners, - * look-and-feel-specific property objects, etc.). This should include - * the following: - * 1. Remove any UI-set borders from the component. - * 2. Remove any UI-set layout managers on the component. - * 3. Remove any UI-added sub-components from the component. - * 4. Remove any UI-added event/property listeners from the component. - * 5. Remove any UI-installed keyboard UI from the component. - * 6. Nullify any allocated instance data objects to allow for GC. - */ - public void uninstallUI(JComponent c) - { - super.uninstallUI(c); - if (lineStyleListener != null) - c.removePropertyChangeListener(lineStyleListener); - lineStyleListener = null; - } - - /** - * This function converts between the string passed into the client - * property and the internal representation (currently an int). - * - * @param lineStyleFlag - String representation - */ - protected void decodeLineStyle(Object lineStyleFlag) - { - if (lineStyleFlag == null || lineStyleFlag.equals(LINE_STYLE_VALUE_ANGLED)) - lineStyle = LINE_STYLE_ANGLED; - else if (lineStyleFlag.equals(LINE_STYLE_VALUE_HORIZONTAL)) - lineStyle = LINE_STYLE_HORIZONTAL; - else if (lineStyleFlag.equals(LINE_STYLE_VALUE_NONE)) - lineStyle = LINE_STYLE_NONE; - else - lineStyle = LINE_STYLE_ANGLED; - } - - /** - * Checks if the location is in expand control. - * - * @param row - current row - * @param rowLevel - current level - * @param mouseX - current x location of the mouse click - * @param mouseY - current y location of the mouse click - */ - protected boolean isLocationInExpandControl(int row, int rowLevel, - int mouseX, int mouseY) - { - return super.isLocationInExpandControl(tree.getPathForRow(row), - mouseX, mouseY); - } - - /** - * Paints the specified component appropriate for the look and feel. - * This method is invoked from the ComponentUI.update method when the - * specified component is being painted. Subclasses should override this - * method and use the specified Graphics object to render the content of - * the component. - * - * @param g - the current graphics configuration. - * @param c - the current component to draw - */ - public void paint(Graphics g, JComponent c) - { - // Calls BasicTreeUI's paint since it takes care of painting all - // types of icons. - super.paint(g, c); - - if (lineStyle == LINE_STYLE_HORIZONTAL) - paintHorizontalSeparators(g, c); - } - - /** - * Paints the horizontal separators. - * - * @param g - the current graphics configuration. - * @param c - the current component to draw - */ - protected void paintHorizontalSeparators(Graphics g, JComponent c) - { - g.setColor(UIManager.getColor("Tree.line")); - Rectangle clip = g.getClipBounds(); - int row0 = getRowForPath(tree, getClosestPathForLocation(tree, 0, clip.y)); - int row1 = - getRowForPath(tree, getClosestPathForLocation(tree, 0, - clip.y + clip.height - 1)); - if (row0 >= 0 && row1 >= 0) - { - for (int i = row0; i <= row1; i++) - { - TreePath p = getPathForRow(tree, i); - if (p != null && p.getPathCount() == 2) - { - Rectangle r = getPathBounds(tree, getPathForRow(tree, i)); - if (r != null) - { - g.drawLine(clip.x, r.y, clip.x + clip.width, r.y); - } - } - } - } - } - - - /** - * Paints the vertical part of the leg. The receiver should NOT modify - * clipBounds, insets. - * - * @param g - the current graphics configuration. - * @param clipBounds - - * @param insets - - * @param path - the current path - */ - protected void paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds, - Insets insets, TreePath path) - { - if (lineStyle == LINE_STYLE_ANGLED) - super.paintVerticalPartOfLeg(g, clipBounds, insets, path); - } - - /** - * Paints the horizontal part of the leg. The receiver should NOT \ - * modify clipBounds, or insets. - * NOTE: parentRow can be -1 if the root is not visible. - */ - protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds, - Insets insets, Rectangle bounds, - TreePath path, int row, - boolean isExpanded, boolean hasBeenExpanded, - boolean isLeaf) - { - if (lineStyle == LINE_STYLE_ANGLED) - super.paintHorizontalPartOfLeg(g, clipBounds, insets, bounds, path, row, - isExpanded, hasBeenExpanded, isLeaf); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java b/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java deleted file mode 100644 index 247f922..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/MetalUtils.java +++ /dev/null @@ -1,597 +0,0 @@ -/* MetalUtils.java -Copyright (C) 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.plaf.metal; - -import gnu.classpath.SystemProperties; - -import java.awt.Color; -import java.awt.Component; -import java.awt.GradientPaint; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.TexturePaint; -import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; -import java.util.List; - -import javax.swing.SwingConstants; -import javax.swing.UIManager; - -/** - * Some utility and helper methods for the Metal Look & Feel. - * - * @author Roman Kennke (roman@kennke.org) - */ -class MetalUtils -{ - - /** - * The typical metal pattern for use with Graphics2D. - */ - static BufferedImage pattern2D; - - /** - * The light color to draw the pattern. - */ - static Color lightColor; - - /** - * The dark color to draw to draw the pattern. - */ - static Color darkColor; - - /** - * Fills a rectangle with the typical Metal pattern. - * - * @param g the <code>Graphics</code> context to use - * @param x the X coordinate of the upper left corner of the rectangle to - * fill - * @param y the Y coordinate of the upper left corner of the rectangle to - * fill - * @param w the width of the rectangle to fill - * @param h the height of the rectangle to fill - * @param light the light color to use - * @param dark the dark color to use - */ - static void fillMetalPattern(Component c, Graphics g, int x, int y, int w, int h, - Color light, Color dark) - { - if (g instanceof Graphics2D - && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") == null) - fillMetalPattern2D((Graphics2D) g, x, y, w, h, light, dark); - else - { - int xOff = 0; - for (int mY = y; mY < (y + h); mY++) - { - // set color alternating with every line - if (((mY - y) % 2) == 0) - g.setColor(light); - else - g.setColor(dark); - - for (int mX = x + xOff; mX < (x + w); mX += 4) - { - g.fillRect(mX, mY, 1, 1); - } - - // increase x offset - xOff++; - if (xOff > 3) - xOff = 0; - } - } - } - - /** - * Fills a rectangle with the typical Metal pattern using Java2D. - * - * @param g2d the <code>Graphics2D</code> context to use - * @param x the X coordinate of the upper left corner of the rectangle to - * fill - * @param y the Y coordinate of the upper left corner of the rectangle to - * fill - * @param w the width of the rectangle to fill - * @param h the height of the rectangle to fill - */ - static void fillMetalPattern2D(Graphics2D g2d, int x, int y, int w, int h, - Color light, Color dark) - { - if (pattern2D == null || !darkColor.equals(dark) || !lightColor.equals(light)) - initializePattern(light, dark); - - // Prepare the texture. - TexturePaint texture = - new TexturePaint(pattern2D, new Rectangle2D.Double(0., 0., 4., 4.)); - g2d.setPaint(texture); - g2d.fillRect(x, y, w, h); - } - - /** - * Initializes the pattern image. - */ - static void initializePattern(Color light, Color dark) - { - pattern2D = new BufferedImage(4, 4, BufferedImage.TYPE_INT_ARGB); - lightColor = light; - darkColor = dark; - Graphics g = pattern2D.getGraphics(); - g.setColor(light); - g.fillRect(0, 0, 1, 1); - g.fillRect(2, 2, 1, 1); - g.setColor(dark); - g.fillRect(1, 1, 1, 1); - g.fillRect(3, 3, 1, 1); - g.dispose(); - } - - /** - * Paints the typical Metal gradient. See {@link #paintGradient(Graphics, - * int, int, int, int, float, float, Color, Color, Color, int, int[][])} - * for more details. - * - * This variant paints a gradient without a mask. - * - * @param g the graphics context to use - * @param x the X coordinate of the upper left corner of the rectangle - * @param y the Y coordinate of the upper left corner of the rectangle - * @param w the width of the rectangle - * @param h the height of the rectangle - * @param dir the direction of the gradient, either - * @param uiProp the key of the UIManager property that has the parameters - */ - static void paintGradient(Graphics g, int x, int y, int w, int h, - int dir, String uiProp) - { - paintGradient(g, x, y, w, h, dir, uiProp, null); - } - - /** - * Paints the typical Metal gradient. See {@link #paintGradient(Graphics, - * int, int, int, int, float, float, Color, Color, Color, int, int[][])} - * for more details. - * - * The parameters are fetched from the UIManager using the key - * <code>uiProp</code>. The value is expected to be a {@link List} that - * contains 4 values: two {@link Double}s and 3 {@link Color} object that - * together make up the parameters passed to the painting method. - * - * @param g the graphics context to use - * @param x the X coordinate of the upper left corner of the rectangle - * @param y the Y coordinate of the upper left corner of the rectangle - * @param w the width of the rectangle - * @param h the height of the rectangle - * @param dir the direction of the gradient, either - * @param uiProp the key of the UIManager property that has the parameters - * @param mask the mask that should be used when painting the gradient as - * described above - */ - static void paintGradient(Graphics g, int x, int y, int w, int h, - int dir, String uiProp, int[][] mask) - { - List params = (List) UIManager.get(uiProp); - float g1 = ((Float) params.get(0)).floatValue(); - float g2 = ((Float) params.get(1)).floatValue(); - Color c1 = (Color) params.get(2); - Color c2 = (Color) params.get(3); - Color c3 = (Color) params.get(4); - paintGradient(g, x, y, w, h, g1, g2, c1, c2, c3, dir, mask); - } - - /** - * Paints the typical Metal gradient. The gradient is painted as follows: - * <pre> - * - * +-------+--------+--------+-----------------------------+ - * | | | | | - * +-------+--------+--------+-----------------------------+ - * c1 -> c2 -- c2 -> c1 --------> c3 - * < -g1- > < -g2- > < -g1- > - * </pre> - * - * There are 4 distinct areas in this gradient: - * <ol> - * <li>A gradient from color 1 to color 2 with the relative width specified - * by <code>g1</code></li> - * <li>A solid area with the color 2 and the relative width specified by - * <code>g2</code></li> - * <li>A gradient from color 2 to color 1 with the relative width specified - * by <code>g1</code></li> - * - * The <code>mask</code> parameter is an array if int arrays, where the first - * index specifies the row (in the gradient direction), and the second index - * is the starting and end offset of that line. This way you can specify a - * mask that should be laid over the gradient for paintint non-rectangular - * gradients. The following example should demonstrate this for painting - * a circular shaped gradient (note that the first and last line should not - * be drawn at all, they are only here to show the circular shape more - * clearly). Everything <em>inside</code> the surrounded area is filled by - * the gradient: - * - * <pre> - * 012345678 - * xxx - * 0 x x { {4, 7}, - * 1 x x {3, 8}, - * 2 x x {3, 8}, - * 3 x x {3, 8}, - * 4 x x {4, 7} } - * xxx - * </pre> - * - * The <code>mask</code> array is expected to have <code>w</code> or - * <code>h</code> array elements, depending on the direction. - * - * If the <code>mask</code> parameter is null, then the gradient is painted - * without a mask. - * - * @param g the graphics context to use - * @param x the X coordinate of the upper left corner of the rectangle - * @param y the Y coordinate of the upper left corner of the rectangle - * @param w the width of the rectangle - * @param h the height of the rectangle - * @param g1 the relative width of the c1->c2 gradients - * @param g2 the relative width of the c2 solid area - * @param c1 the color 1 - * @param c2 the color 2 - * @param c3 the color 3 - * @param dir the direction of the gradient, either - * {@link SwingConstants#HORIZONTAL} or {@link SwingConstants#VERTICAL} - * @param mask the mask that should be used when painting the gradient as - * described above - */ - static void paintGradient(Graphics g, int x, int y, int w, int h, float g1, - float g2, Color c1, Color c2, Color c3, int dir, - int[][] mask) - { - if (dir == SwingConstants.HORIZONTAL) - paintHorizontalGradient(g, x, y, w, h, g1, g2, c1, c2, c3, mask); - else - paintVerticalGradient(g, x, y, w, h, g1, g2, c1, c2, c3, mask); - } - - /** - * Paints a horizontal gradient. See {@link #paintGradient(Graphics, int, - * int, int, int, float, float, Color, Color, Color, int, int[][])} - * for details. - * - * @param x the X coordinate of the upper left corner of the rectangle - * @param y the Y coordinate of the upper left corner of the rectangle - * @param w the width of the rectangle - * @param h the height of the rectangle - * @param g1 the relative width of the c1->c2 gradients - * @param g2 the relative width of the c2 solid area - * @param c1 the color 1 - * @param c2 the color 2 - * @param c3 the color 3 - * @param mask the mask that should be used when painting the gradient as - * described above - */ - static void paintHorizontalGradient(Graphics g, int x, int y, int w, int h, - float g1, float g2, Color c1, Color c2, - Color c3, int[][] mask) - { - - if (g instanceof Graphics2D - && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") == null) - { - paintHorizontalGradient2D((Graphics2D) g, x, y, w, h, g1, g2, c1, c2, - c3, mask); - return; - } - - // Calculate the coordinates. - int y0 = y; - int y1 = y + h; - // The size of the first gradient area (c1->2). - int w1 = (int) (w * g1); - // The size of the solid c2 area. - int w2 = (int) (w * g2); - int x0 = x; - int x1 = x0 + w1; - int x2 = x1 + w2; - int x3 = x2 + w1; - int x4 = x + w; - - // Paint first gradient area (c1->c2). - int xc; // The current y coordinate. - for (xc = x0; xc < x1; xc++) - { - if (xc > x + w) - break; - - // Perform color interpolation; - double factor = (xc - x0) / (double) w1; - int rInt = (int) ((c2.getRed() - c1.getRed()) * factor + c1.getRed()); - int gInt = (int) ((c2.getGreen() - c1.getGreen()) * factor - + c1.getGreen()); - int bInt = (int) ((c2.getBlue() - c1.getBlue()) * factor - + c1.getBlue()); - Color interpolated = new Color(rInt, gInt, bInt); - g.setColor(interpolated); - if (mask != null) - { - y0 = mask[xc - x0][0] + y; - y1 = mask[xc - x0][1] + y; - } - g.fillRect(xc, y0, 1, y1 - y0); - } - // Paint solid c2 area. - g.setColor(c2); - if (mask == null) - { - g.fillRect(x1, y, x2 - x1, h); - } - else - { - for (xc = x1; xc < x2; xc++) - { - y0 = mask[xc - x0][0] + y; - y1 = mask[xc - x0][1] + y; - g.fillRect(xc, y0, 1, y1 - y0); - } - } - - // Paint second gradient area (c2->c1). - for (xc = x2; xc < x3; xc++) - { - if (xc > x + w) - break; - - // Perform color interpolation; - double factor = (xc - x2) / (double) w1; - int rInt = (int) ((c1.getRed() - c2.getRed()) * factor + c2.getRed()); - int gInt = (int) ((c1.getGreen() - c2.getGreen()) * factor - + c2.getGreen()); - int bInt = (int) ((c1.getBlue() - c2.getBlue()) * factor - + c2.getBlue()); - Color interpolated = new Color(rInt, gInt, bInt); - g.setColor(interpolated); - if (mask != null) - { - y0 = mask[xc - x0][0] + y; - y1 = mask[xc - x0][1] + y; - } - g.fillRect(xc, y0, 1, y1 - y0); - } - - // Paint third gradient area (c1->c3). - for (xc = x3; xc < x4; xc++) - { - if (xc > x + w) - break; - - // Perform color interpolation; - double factor = (xc - x3) / (double) (x4 - x3); - int rInt = (int) ((c3.getRed() - c1.getRed()) * factor + c1.getRed()); - int gInt = (int) ((c3.getGreen() - c1.getGreen()) * factor - + c1.getGreen()); - int bInt = (int) ((c3.getBlue() - c1.getBlue()) * factor - + c1.getBlue()); - Color interpolated = new Color(rInt, gInt, bInt); - g.setColor(interpolated); - if (mask != null) - { - y0 = mask[xc - x0][0] + y; - y1 = mask[xc - x0][1] + y; - } - g.drawLine(xc, y0, xc, y1); - } - } - - /** - * Paints a vertical gradient. See {@link #paintGradient(Graphics, int, int, - * int, int, float, float, Color, Color, Color, int, int[][])} for details. - * - * @param x the X coordinate of the upper left corner of the rectangle - * @param y the Y coordinate of the upper left corner of the rectangle - * @param w the width of the rectangle - * @param h the height of the rectangle - * @param g1 the relative width of the c1->c2 gradients - * @param g2 the relative width of the c2 solid area - * @param c1 the color 1 - * @param c2 the color 2 - * @param c3 the color 3 - * @param mask the mask that should be used when painting the gradient as - * described above - */ - static void paintVerticalGradient(Graphics g, int x, int y, int w, int h, - float g1, float g2, Color c1, Color c2, - Color c3, int[][] mask) - { - if (g instanceof Graphics2D - && SystemProperties.getProperty("gnu.javax.swing.noGraphics2D") == null) - { - paintVerticalGradient2D((Graphics2D) g, x, y, w, h, g1, g2, c1, c2, - c3, mask); - return; - } - - // Calculate the coordinates. - int x0 = x; - int x1 = x + w; - // The size of the first gradient area (c1->2). - int w1 = (int) (h * g1); - // The size of the solid c2 area. - int w2 = (int) (h * g2); - int y0 = y; - int y1 = y0 + w1; - int y2 = y1 + w2; - int y3 = y2 + w1; - int y4 = y + h; - - // Paint first gradient area (c1->c2). - int yc; // The current y coordinate. - for (yc = y0; yc < y1; yc++) - { - if (yc > y + h) - break; - - // Perform color interpolation; - double factor = (yc - y0) / (double) w1; - int rInt = (int) ((c2.getRed() - c1.getRed()) * factor + c1.getRed()); - int gInt = (int) ((c2.getGreen() - c1.getGreen()) * factor - + c1.getGreen()); - int bInt = (int) ((c2.getBlue() - c1.getBlue()) * factor - + c1.getBlue()); - Color interpolated = new Color(rInt, gInt, bInt); - g.setColor(interpolated); - if (mask != null) - { - x0 = mask[yc - y0][0] + x; - x1 = mask[yc - y0][1] + x; - } - g.fillRect(x0, yc, x1 - x0, 1); - } - // Paint solid c2 area. - g.setColor(c2); - if (mask == null) - { - g.fillRect(x, y1, w, y2 - y1); - } - else - { - for (yc = y1; yc < y2; yc++) - { - x0 = mask[yc - y0][0] + x; - x1 = mask[yc - y0][1] + x; - g.fillRect(x0, yc, x1 - x0, 1); - } - } - - // Paint second gradient area (c2->c1). - for (yc = y2; yc < y3; yc++) - { - if (yc > y + h) - break; - - // Perform color interpolation; - double factor = (yc - y2) / (double) w1; - int rInt = (int) ((c1.getRed() - c2.getRed()) * factor + c2.getRed()); - int gInt = (int) ((c1.getGreen() - c2.getGreen()) * factor - + c2.getGreen()); - int bInt = (int) ((c1.getBlue() - c2.getBlue()) * factor - + c2.getBlue()); - Color interpolated = new Color(rInt, gInt, bInt); - g.setColor(interpolated); - if (mask != null) - { - x0 = mask[yc - y0][0] + x; - x1 = mask[yc - y0][1] + x; - } - g.fillRect(x0, yc, x1 - x0, 1); - } - - // Paint third gradient area (c1->c3). - for (yc = y3; yc < y4; yc++) - { - if (yc > y + h) - break; - - // Perform color interpolation; - double factor = (yc - y3) / (double) (y4 - y3); - int rInt = (int) ((c3.getRed() - c1.getRed()) * factor + c1.getRed()); - int gInt = (int) ((c3.getGreen() - c1.getGreen()) * factor - + c1.getGreen()); - int bInt = (int) ((c3.getBlue() - c1.getBlue()) * factor - + c1.getBlue()); - Color interpolated = new Color(rInt, gInt, bInt); - g.setColor(interpolated); - if (mask != null) - { - x0 = mask[yc - y0][0] + x; - x1 = mask[yc - y0][1] + x; - } - g.fillRect(x0, yc, x1 - x0, 1); - } - } - - /** - * Paints a horizontal gradient using Graphics2D functionality. - * - * @param g the Graphics2D instance - * @param x the X coordinate of the upper left corner of the rectangle - * @param y the Y coordinate of the upper left corner of the rectangle - * @param w the width of the rectangle - * @param h the height of the rectangle - * @param g1 the relative width of the c1->c2 gradients - * @param g2 the relative width of the c2 solid area - * @param c1 the color 1 - * @param c2 the color 2 - * @param c3 the color 3 - * @param mask the mask that should be used when painting the gradient as - * described above - */ - private static void paintHorizontalGradient2D(Graphics2D g, int x, int y, - int w, int h, float g1, - float g2, Color c1, - Color c2, Color c3, - int[][] mask) - { - // FIXME: Handle the mask somehow, or do Graphics2D clipping instead. - GradientPaint p1 = new GradientPaint(x, y, c1, x + w * g1, y, c2); - g.setPaint(p1); - // This fills the first gradient and the solid area in one go. - g.fillRect(x, y, (int) (w * (g1 + g2)), h); - - GradientPaint p2 = new GradientPaint(x + (w * (g1 + g2)), y, c2, x + w, y, - c3); - g.setPaint(p2); - g.fillRect((int) (x + (w * (g1 + g2))), y, - (int) (w * (1. - (g1 + g2))), h); - } - - private static void paintVerticalGradient2D(Graphics2D g, int x, int y, - int w, int h, float g1, - float g2, Color c1, - Color c2, Color c3, - int[][] mask) - { - // FIXME: Handle the mask somehow, or do Graphics2D clipping instead. - GradientPaint p1 = new GradientPaint(x, y, c1, x, y + h * g1, c2); - g.setPaint(p1); - // This fills the first gradient and the solid area in one go. - g.fillRect(x, y, w, (int) (h * (g1 + g2))); - - GradientPaint p2 = new GradientPaint(x, y + (h * (g1 + g2)), c2, x, y + h, - c3); - g.setPaint(p2); - g.fillRect(x, (int) (y + (h * (g1 + g2))), w, - (int) (h * (1. - (g1 + g2)))); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java b/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java deleted file mode 100644 index 6a6a3f5..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/OceanTheme.java +++ /dev/null @@ -1,318 +0,0 @@ -/* DefaultMetalTheme.java -- A modern theme for the Metal L&F - Copyright (C) 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.plaf.metal; - -import java.awt.Color; -import java.awt.Insets; -import java.util.Arrays; - -import javax.swing.UIDefaults; -import javax.swing.plaf.ColorUIResource; -import javax.swing.plaf.BorderUIResource.LineBorderUIResource; - -/** - * A modern theme for the Metal Look & Feel. - * @since 1.5 - * - * @author Roman Kennke (roman@kennke.org) - */ -public class OceanTheme extends DefaultMetalTheme -{ - /** - * The OceanTheme value for black. - */ - static final ColorUIResource BLACK = new ColorUIResource(51, 51, 51); - - /** - * The OceanTheme value for primary1. - */ - static final ColorUIResource PRIMARY1 = new ColorUIResource(99, 130, 191); - - /** - * The OceanTheme value for primary1. - */ - static final ColorUIResource PRIMARY2 = new ColorUIResource(163, 184, 204); - - /** - * The OceanTheme value for primary1. - */ - static final ColorUIResource PRIMARY3 = new ColorUIResource(184, 207, 229); - - /** - * The OceanTheme value for secondary1. - */ - static final ColorUIResource SECONDARY1 = new ColorUIResource(122, 138, 153); - - /** - * The OceanTheme value for secondary2. - */ - static final ColorUIResource SECONDARY2 = new ColorUIResource(184, 207, 229); - - /** - * The OceanTheme value for secondary3. - */ - static final ColorUIResource SECONDARY3 = new ColorUIResource(238, 238, 238); - - /** - * The OceanTheme value for inactive control text. - */ - static final ColorUIResource INACTIVE_CONTROL_TEXT = - new ColorUIResource(153, 153, 153); - - /** - * Returns the name of this theme, "Ocean" - */ - public String getName() - { - return "Ocean"; - } - - /** - * Returns the color for control text, which is the - * value of the theme's black value. - */ - public ColorUIResource getControlTextColor() - { - return getBlack(); - } - - /** - * Returns the desktop color, which is the theme's white color. - */ - public ColorUIResource getDesktopColor() - { - return getWhite(); - } - - /** - * Returns the color for inactive control text, which is the - * RGB value (153, 153, 153). - */ - public ColorUIResource getInactiveControlTextColor() - { - return INACTIVE_CONTROL_TEXT; - } - - /** - * Returns the OceanTheme's color for disabled menu foreground, - * - */ - public ColorUIResource getMenuDisabledForeground() - { - return INACTIVE_CONTROL_TEXT; - } - - - /** - * Returns the OceanTheme's color for black, the RGB value - * (51, 51, 51). - * - * @return Returns the OceanTheme's value for black - */ - protected ColorUIResource getBlack() - { - return BLACK; - } - - /** - * Return the OceanTheme's value for primary 1, the RGB value - * (99, 130, 191). - */ - protected ColorUIResource getPrimary1() - { - return PRIMARY1; - } - - /** - * Return the OceanTheme's value for primary 2, the RGB value - * (163, 184, 204). - */ - protected ColorUIResource getPrimary2() - { - return PRIMARY2; - } - - /** - * Return the OceanTheme's value for primary 1, the RGB value - * (184, 207, 229). - */ - protected ColorUIResource getPrimary3() - { - return PRIMARY3; - } - - /** - * Return the OceanTheme's value for secondary 1, the RGB value - * (122, 138, 153). - */ - protected ColorUIResource getSecondary1() - { - return SECONDARY1; - } - - /** - * Return the OceanTheme's value for secondary 2, the RGB value - * (184, 207, 229). - */ - protected ColorUIResource getSecondary2() - { - return SECONDARY2; - } - /** - * Return the OceanTheme's value for secondary 3, the RGB value - * (238, 238, 238). - */ - protected ColorUIResource getSecondary3() - { - return SECONDARY3; - } - - /** - * Adds customized entries to the UIDefaults table. - * - * @param defaults the UI defaults table - */ - public void addCustomEntriesToTable(UIDefaults defaults) - { - // Gradients. - defaults.put("Button.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("CheckBox.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("CheckBoxMenuItem.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("MenuBar.gradient", Arrays.asList(new Object[] - {new Float(1.0), new Float(0.0), new ColorUIResource(Color.WHITE), - new ColorUIResource(218, 218, 218), new ColorUIResource(218, 218, 218)})); - defaults.put("RadioButton.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("RadioButtonMenuItem.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("ScrollBar.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("Slider.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.2), new ColorUIResource(200, 221, 242), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("Slider.focusGradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.2), new ColorUIResource(200, 221, 242), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("ToggleButton.gradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - defaults.put("InternalFrame.activeTitleGradient", Arrays.asList(new Object[] - {new Float(0.3), new Float(0.0), new ColorUIResource(221, 232, 243), - new ColorUIResource(Color.WHITE), new ColorUIResource(184, 207, 229)})); - - // Colors. - ColorUIResource c1 = new ColorUIResource(200, 221, 242); - ColorUIResource c2 = new ColorUIResource(153, 153, 153); - ColorUIResource c3 = new ColorUIResource(204, 204, 204); - ColorUIResource c4 = new ColorUIResource(210, 226, 239); - ColorUIResource c5 = new ColorUIResource(218, 218, 218); - defaults.put("Button.disabledToolBarBorderBackground", c3); - defaults.put("Button.toolBarBorderBackground", c2); - defaults.put("Label.disabledForeground", c2); - defaults.put("MenuBar.borderColor", c3); - defaults.put("Slider.altTrackColor", c4); - defaults.put("SplitPane.dividerFocusColor", c1); - defaults.put("TabbedPane.contentAreaColor", c1); - defaults.put("TabbedPane.borderHightlightColor", PRIMARY1); - defaults.put("TabbedPane.selected", c1); - defaults.put("TabbedPane.tabAreaBackground", c5); - defaults.put("TabbedPane.unselectedBackground", SECONDARY3); - defaults.put("Table.gridColor", SECONDARY1); - defaults.put("ToolBar.borderColor", c3); - defaults.put("Tree.selectionBorderColor", PRIMARY1); - - // Borders. - defaults.put("List.focusCellHighlightBorder", - new LineBorderUIResource(getPrimary1())); - defaults.put("Table.focusCellHighlightBorder", - new LineBorderUIResource(getPrimary1())); - - // Insets. - defaults.put("TabbedPane.contentBorderInsets", new Insets(4, 2, 3, 3)); - defaults.put("TabbedPane.tabAreaInsets", new Insets(2, 2, 0, 6)); - - // Flags. - defaults.put("SplitPane.oneTouchButtonsOpaque", Boolean.FALSE); - defaults.put("Menu.opaque", Boolean.FALSE); - defaults.put("ToolBar.isRollover", Boolean.TRUE); - defaults.put("RadioButton.rollover", Boolean.TRUE); - defaults.put("CheckBox.rollover", Boolean.TRUE); - defaults.put("Button.rollover", Boolean.TRUE); - - // Icons. - // FIXME: Add OceanTheme icons. -// defaults.put("Tree.leafIcon", XXX); -// defaults.put("Tree.expandedIcon", XXX); -// defaults.put("Tree.openIcon", XXX); -// defaults.put("Tree.closedIcon", XXX); -// defaults.put("Tree.collapsedIcon", XXX); -// defaults.put("FileChooser.newFolderIcon", XXX); -// defaults.put("FileChooser.homeFolderIcon", XXX); -// defaults.put("FileChooser.upFolderIcon", XXX); -// defaults.put("FileView.hardDriveIcon", XXX); -// defaults.put("FileView.floppyDriveIcon", XXX); -// defaults.put("FileView.fileIcon", XXX); -// defaults.put("FileView.computerIcon", XXX); -// defaults.put("FileView.directoryIcon", XXX); -// defaults.put("OptionPane.questionIcon", XXX); -// defaults.put("OptionPane.errorIcon", XXX); -// defaults.put("OptionPane.warningIcon", XXX); -// defaults.put("OptionPane.informationIcon", XXX); -// defaults.put("InternalFrame.icon", XXX); -// defaults.put("InternalFrame.closeIcon", XXX); -// defaults.put("InternalFrame.iconifyIcon", XXX); -// defaults.put("InternalFrame.minimizeIcon", XXX); -// defaults.put("InternalFrame.maximizeIcon", XXX); -// defaults.put("InternalFrame.paletteCloseIcon", XXX); - - // UI classes. - defaults.put("MenuBarUI", "javax.swing.plaf.metal.MetalMenuBarUI"); - - // Others. - defaults.put("Button.rolloverIconType", "ocean"); - } -} diff --git a/libjava/classpath/javax/swing/plaf/metal/package.html b/libjava/classpath/javax/swing/plaf/metal/package.html deleted file mode 100644 index 8675493..0000000 --- a/libjava/classpath/javax/swing/plaf/metal/package.html +++ /dev/null @@ -1,55 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- package.html - describes classes in javax.swing.plaf.metal package. - Copyright (C) 2002, 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. --> - -<html> -<head><title>GNU Classpath - javax.swing.plaf.metal</title></head> - -<body> -<p>Provides a cross-platform look and feel known as "Metal". To install this -look and feel, add the following code (or something similar) -near the start of your application:</p> -<pre>try - { - UIManager.setLookAndFeel(new MetalLookAndFeel()); - } -catch (UnsupportedLookAndFeelException e) - { - e.printStackTrace(); - }</pre> -</body> -</html> diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiButtonUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiButtonUI.java deleted file mode 100644 index 044f651..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiButtonUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiButtonUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ButtonUI; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate that that coordinates multiple {@link ButtonUI} instances, one - * from the primary look and feel, and one or more from the auxiliary look and - * feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiButtonUI extends ButtonUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiButtonUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiButtonUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiButtonUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiButtonUI mui = new MultiButtonUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiButtonUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiButtonUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiButtonUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiButtonUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiButtonUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiColorChooserUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiColorChooserUI.java deleted file mode 100644 index 1a96849..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiColorChooserUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiColorChooserUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ColorChooserUI; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate that that coordinates multiple {@link ColorChooserUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiColorChooserUI extends ColorChooserUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiColorChooserUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiColorChooserUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiColorChooserUI</code> - * is returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiColorChooserUI mui = new MultiColorChooserUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiColorChooserUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiColorChooserUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiColorChooserUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiColorChooserUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiColorChooserUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiComboBoxUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiComboBoxUI.java deleted file mode 100644 index f169873..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiComboBoxUI.java +++ /dev/null @@ -1,430 +0,0 @@ -/* MultiComboBoxUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComboBoxUI; -import javax.swing.plaf.ComponentUI; - -/** - * A UI delegate that that coordinates multiple {@link ComboBoxUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiComboBoxUI extends ComboBoxUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiComboBoxUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiComboBoxUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiComboBoxUI</code> - * is returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiComboBoxUI mui = new MultiComboBoxUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiComboBoxUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiComboBoxUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link ComboBoxUI#setPopupVisible(JComboBox, boolean)} method - * for all the UI delegates managed by this <code>MultiComboBoxUI</code>. - * - * @param c the component. - * @param visible the visible state. - */ - public void setPopupVisible(JComboBox c, boolean visible) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComboBoxUI ui = (ComboBoxUI) iterator.next(); - ui.setPopupVisible(c, visible); - } - } - - /** - * Calls the {@link ComboBoxUI#isPopupVisible(JComboBox)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The result for the UI delegate from the primary look and feel. - */ - public boolean isPopupVisible(JComboBox c) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComboBoxUI ui = (ComboBoxUI) iterator.next(); - result = ui.isPopupVisible(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComboBoxUI ui = (ComboBoxUI) iterator.next(); - /* boolean ignored = */ ui.isPopupVisible(c); - } - return result; - } - - /** - * Calls the {@link ComboBoxUI#isFocusTraversable(JComboBox)} method for all - * the UI delegates managed by this <code>MultiComboBoxUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return <code>true</code> if the combo box is traversable according to the - * UI delegate in the primary look and feel, and <code>false</code> - * otherwise. - */ - public boolean isFocusTraversable(JComboBox c) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComboBoxUI ui = (ComboBoxUI) iterator.next(); - result = ui.isFocusTraversable(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComboBoxUI ui = (ComboBoxUI) iterator.next(); - /* boolean ignored = */ ui.isFocusTraversable(c); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiDesktopIconUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiDesktopIconUI.java deleted file mode 100644 index 091566e..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiDesktopIconUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiDesktopIconUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.DesktopIconUI; - -/** - * A UI delegate that that coordinates multiple {@link DesktopIconUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiDesktopIconUI extends DesktopIconUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiDesktopIconUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiDesktopIconUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiDesktopIconUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiDesktopIconUI mui = new MultiDesktopIconUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiDesktopIconUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiDesktopIconUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopIconUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiDesktopIconUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiDesktopIconUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiDesktopPaneUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiDesktopPaneUI.java deleted file mode 100644 index fb62257..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiDesktopPaneUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiDesktopIconUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.DesktopPaneUI; - -/** - * A UI delegate that that coordinates multiple {@link DesktopPaneUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiDesktopPaneUI extends DesktopPaneUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiDesktopPaneUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiDesktopPaneUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiDesktopPaneUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiDesktopPaneUI mui = new MultiDesktopPaneUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiDesktopPaneUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiDesktopPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiDesktopPaneUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiDesktopPaneUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiDesktopPaneUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiFileChooserUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiFileChooserUI.java deleted file mode 100644 index 2ab8841..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiFileChooserUI.java +++ /dev/null @@ -1,511 +0,0 @@ -/* MultiFileChooserUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.io.File; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.JFileChooser; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileView; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.FileChooserUI; - -/** - * A UI delegate that that coordinates multiple {@link FileChooserUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiFileChooserUI extends FileChooserUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiFileChooserUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiFileChooserUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiFileChooserUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiFileChooserUI mui = new MultiFileChooserUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiFileChooserUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiFileChooserUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link FileChooserUI#getAcceptAllFileFilter(JFileChooser)} method - * for all the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the filter for the UI delegate from the primary look and - * feel. - * - * @param chooser the file chooser. - * - * @return The filter returned by the UI delegate from the primary - * look and feel. - */ - public FileFilter getAcceptAllFileFilter(JFileChooser chooser) - { - FileFilter result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - result = ui.getAcceptAllFileFilter(chooser); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - /* FileFilter ignored = */ ui.getAcceptAllFileFilter(chooser); - } - return result; - } - - /** - * Calls the {@link FileChooserUI#getFileView(JFileChooser)} method - * for all the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the view for the UI delegate from the primary look and - * feel. - * - * @param chooser the file chooser. - * - * @return The view returned by the UI delegate from the primary - * look and feel. - */ - public FileView getFileView(JFileChooser chooser) - { - FileView result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - result = ui.getFileView(chooser); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - /* FileView ignored = */ ui.getFileView(chooser); - } - return result; - } - - /** - * Calls the {@link FileChooserUI#getApproveButtonText(JFileChooser)} method - * for all the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the text for the UI delegate from the primary look and - * feel. - * - * @param chooser the file chooser. - * - * @return The text returned by the UI delegate from the primary - * look and feel. - */ - public String getApproveButtonText(JFileChooser chooser) - { - String result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - result = ui.getApproveButtonText(chooser); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - /* String ignored = */ ui.getApproveButtonText(chooser); - } - return result; - } - - /** - * Calls the {@link FileChooserUI#getDialogTitle(JFileChooser)} method - * for all the UI delegates managed by this <code>MultiFileChooserUI</code>, - * returning the title for the UI delegate from the primary look and - * feel. - * - * @param chooser the file chooser. - * - * @return The title returned by the UI delegate from the primary - * look and feel. - */ - public String getDialogTitle(JFileChooser chooser) - { - String result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - result = ui.getDialogTitle(chooser); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - /* String ignored = */ ui.getDialogTitle(chooser); - } - return result; - } - - /** - * Calls the {@link FileChooserUI#rescanCurrentDirectory(JFileChooser)} - * method for all the UI delegates managed by this - * <code>MultiFileChooserUI</code>. - * - * @param chooser the file chooser. - */ - public void rescanCurrentDirectory(JFileChooser chooser) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - ui.rescanCurrentDirectory(chooser); - } - } - - /** - * Calls the {@link FileChooserUI#ensureFileIsVisible(JFileChooser, File)} - * method for all the UI delegates managed by this - * <code>MultiFileChooserUI</code>. - * - * @param chooser the file chooser. - * @param file the file. - */ - public void ensureFileIsVisible(JFileChooser chooser, File file) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - FileChooserUI ui = (FileChooserUI) iterator.next(); - ui.ensureFileIsVisible(chooser, file); - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiInternalFrameUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiInternalFrameUI.java deleted file mode 100644 index 37b2ee3..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiInternalFrameUI.java +++ /dev/null @@ -1,353 +0,0 @@ -/* MultiInternalFrameUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.InternalFrameUI; - -/** - * A UI delegate that that coordinates multiple {@link InternalFrameUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiInternalFrameUI extends InternalFrameUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiInternalFrameUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiInternalFrameUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiInternalFrameUI</code> - * is returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiInternalFrameUI mui = new MultiInternalFrameUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiInternalFrameUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiInternalFrameUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiInternalFrameUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiInternalFrameUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiInternalFrameUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiLabelUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiLabelUI.java deleted file mode 100644 index 2f0e7d0..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiLabelUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiLabelUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.LabelUI; - -/** - * A UI delegate that that coordinates multiple {@link LabelUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiLabelUI extends LabelUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiLabelUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiLabelUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiLabelUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiLabelUI mui = new MultiLabelUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiLabelUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiLabelUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiLabelUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiLabelUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiLabelUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiListUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiListUI.java deleted file mode 100644 index d6b77f5..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiListUI.java +++ /dev/null @@ -1,449 +0,0 @@ -/* MultiListUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.JList; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ListUI; - -/** - * A UI delegate that that coordinates multiple {@link ListUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiListUI extends ListUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiListUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiListUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiListUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiListUI mui = new MultiListUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiListUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiListUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiListUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiListUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiListUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiListUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiListUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link ListUI#locationToIndex(JList, Point)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the index for the UI delegate from the primary look and - * feel. - * - * @param list the list. - * @param location the location. - * - * @return The index returned by the UI delegate from the primary - * look and feel. - */ - public int locationToIndex(JList list, Point location) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ListUI ui = (ListUI) iterator.next(); - result = ui.locationToIndex(list, location); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ListUI ui = (ListUI) iterator.next(); - /* int ignored = */ ui.locationToIndex(list, location); - } - return result; - } - - /** - * Calls the {@link ListUI#indexToLocation(JList, int)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the location for the UI delegate from the primary look and - * feel. - * - * @param list the list. - * @param index the index. - * - * @return The location returned by the UI delegate from the primary - * look and feel. - */ - public Point indexToLocation(JList list, int index) - { - Point result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ListUI ui = (ListUI) iterator.next(); - result = ui.indexToLocation(list, index); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ListUI ui = (ListUI) iterator.next(); - /* Point ignored = */ ui.indexToLocation(list, index); - } - return result; - } - - /** - * Calls the {@link ListUI#getCellBounds(JList, int, int)} method for all - * the UI delegates managed by this <code>MultiListUI</code>, - * returning the bounds for the UI delegate from the primary look and - * feel. - * - * @param list the list. - * @param index1 the first index. - * @param index2 the second index. - * - * @return The bounds returned by the UI delegate from the primary - * look and feel. - */ - public Rectangle getCellBounds(JList list, int index1, int index2) - { - Rectangle result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ListUI ui = (ListUI) iterator.next(); - result = ui.getCellBounds(list, index1, index2); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ListUI ui = (ListUI) iterator.next(); - /* Rectangle ignored = */ ui.getCellBounds(list, index1, index2); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiLookAndFeel.java b/libjava/classpath/javax/swing/plaf/multi/MultiLookAndFeel.java deleted file mode 100644 index 4e81fd0..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiLookAndFeel.java +++ /dev/null @@ -1,243 +0,0 @@ -/* MultiLookAndFeel.java -- - Copyright (C) 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.plaf.multi; - -import java.util.Vector; - -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; - -/** - * A look and feel that provides the ability to use auxiliary look and feels - * in addition to the primary look and feel. - */ -public class MultiLookAndFeel extends LookAndFeel -{ - - /** - * Creates a new instance of the look and feel. - */ - public MultiLookAndFeel() - { - // Nothing to do here. - } - - /** - * Returns the name for the look and feel. - * - * @return "Multiplexing Look and Feel". - */ - public String getName() - { - return "Multiplexing Look and Feel"; - } - - /** - * Returns an identifier for the look and feel. - * - * @return "Multiplex". - */ - public String getID() - { - return "Multiplex"; - } - - /** - * Returns a description of the look and feel. - * - * @return A description of the look and feel. - */ - public String getDescription() - { - return "Allows multiple UI instances per component instance"; - } - - /** - * Returns <code>false</code> to indicate that this look and feel is not - * native to any platform. - * - * @return <code>false</code>. - */ - public boolean isNativeLookAndFeel() - { - return false; - } - - /** - * Returns <code>true</code> always, since this look and feel is supported on - * all platforms. - * - * @return <code>true</code>. - */ - public boolean isSupportedLookAndFeel() - { - return true; - } - - /** - * Creates and returns the UI defaults for this look and feel. - * - * @return The UI defaults. - */ - public UIDefaults getDefaults() - { - UIDefaults defaults = new UIDefaults(); - defaults.put("ButtonUI", "javax.swing.plaf.multi.MultiButtonUI"); - defaults.put("CheckBoxUI", "javax.swing.plaf.multi.MultiButtonUI"); - defaults.put("CheckBoxMenuItemUI", "javax.swing.plaf.multi.MultiMenuItemUI"); - defaults.put("ColorChooserUI", - "javax.swing.plaf.multi.MultiColorChooserUI"); - defaults.put("ComboBoxUI", "javax.swing.plaf.multi.MultiComboBoxUI"); - defaults.put("DesktopPaneUI", "javax.swing.plaf.multi.MultiDesktopPaneUI"); - defaults.put("DesktopIconUI", "javax.swing.plaf.multi.MultiDesktopIconUI"); - defaults.put("EditorPaneUI", "javax.swing.plaf.multi.MultiTextUI"); - defaults.put("FileChooserUI", "javax.swing.plaf.multi.MultiFileChooserUI"); - defaults.put("FormattedTextFieldUI", "javax.swing.plaf.multi.MultiTextUI"); - defaults.put("InternalFrameUI", - "javax.swing.plaf.multi.MultiInternalFrameUI"); - defaults.put("LabelUI", "javax.swing.plaf.multi.MultiLabelUI"); - defaults.put("ListUI", "javax.swing.plaf.multi.MultiListUI"); - defaults.put("MenuItemUI", "javax.swing.plaf.multi.MultiMenuItemUI"); - defaults.put("MenuUI", "javax.swing.plaf.multi.MultiMenuItemUI"); - defaults.put("MenuBarUI", "javax.swing.plaf.multi.MultiMenuBarUI"); - defaults.put("OptionPaneUI", "javax.swing.plaf.multi.MultiOptionPaneUI"); - defaults.put("PanelUI", "javax.swing.plaf.multi.MultiPanelUI"); - defaults.put("PasswordFieldUI", "javax.swing.plaf.multi.MultiTextUI"); - defaults.put("PopupMenuUI", "javax.swing.plaf.multi.MultiPopupMenuUI"); - defaults.put("PopupMenuSeparatorUI", - "javax.swing.plaf.multi.MultiSeparatorUI"); - defaults.put("ProgressBarUI", "javax.swing.plaf.multi.MultiProgressBarUI"); - defaults.put("RadioButtonUI", "javax.swing.plaf.multi.MultiButtonUI"); - defaults.put("RadioButtonMenuItemUI", - "javax.swing.plaf.multi.MultiMenuItemUI"); - defaults.put("RootPaneUI", "javax.swing.plaf.multi.MultiRootPaneUI"); - defaults.put("ScrollBarUI", "javax.swing.plaf.multi.MultiScrollBarUI"); - defaults.put("ScrollPaneUI", "javax.swing.plaf.multi.MultiScrollPaneUI"); - defaults.put("SeparatorUI", "javax.swing.plaf.multi.MultiSeparatorUI"); - defaults.put("SliderUI", "javax.swing.plaf.multi.MultiSliderUI"); - defaults.put("SpinnerUI", "javax.swing.plaf.multi.MultiSpinnerUI"); - defaults.put("SplitPaneUI", "javax.swing.plaf.multi.MultiSplitPaneUI"); - defaults.put("TabbedPaneUI", "javax.swing.plaf.multi.MultiTabbedPaneUI"); - defaults.put("TableHeaderUI", "javax.swing.plaf.multi.MultiTableHeaderUI"); - defaults.put("TableUI", "javax.swing.plaf.multi.MultiTableUI"); - defaults.put("TextAreaUI", "javax.swing.plaf.multi.MultiTextUI"); - defaults.put("TextFieldUI", "javax.swing.plaf.multi.MultiTextUI"); - defaults.put("TextPaneUI", "javax.swing.plaf.multi.MultiTextUI"); - defaults.put("ToggleButtonUI", "javax.swing.plaf.multi.MultiButtonUI"); - defaults.put("ToolBarSeparatorUI", - "javax.swing.plaf.multi.MultiSeparatorUI"); - defaults.put("ToolBarUI", "javax.swing.plaf.multi.MultiToolBarUI"); - defaults.put("ToolTipUI", "javax.swing.plaf.multi.MultiToolTipUI"); - defaults.put("ViewportUI", "javax.swing.plaf.multi.MultiViewportUI"); - return defaults; - } - - /** - * Creates the UI delegates for the <code>target</code> component and - * returns a multiplexing UI delegate (<code>mui</code>) if there are - * multiple delegates. - * - * @param mui a multiplexing UI delegate appropriate for the component. - * @param uis a vector into which the UI delegates will be added. - * @param target the target component. - * - * @return A UI delegate. - */ - public static ComponentUI createUIs(ComponentUI mui, Vector uis, - JComponent target) - { - // get primary UI delegate for 'target', and add it to uis - ComponentUI ui = null; - LookAndFeel primary = UIManager.getLookAndFeel(); - if (primary != null) - { - ui = UIManager.getUI(target); - uis.add(ui); - } - // for any auxiliary look and feels in use, get the UI delegate and add - // it to uis - LookAndFeel[] auxlafs = UIManager.getAuxiliaryLookAndFeels(); - for (int i = 0; i < auxlafs.length; i++) - { - LookAndFeel auxlaf = auxlafs[i]; - // FIXME: here I call getDefaults() to get the UI delegate from the - // auxiliary look and feel. But getDefaults() creates a new set of - // defaults every time it is called, which is wasteful. Unfortunately - // I cannot find another way to get the UI delegate, so I'm doing it - // anyway... - UIDefaults defaults = auxlaf.getDefaults(); - ui = defaults.getUI(target); - if (ui != null) - uis.add(ui); - } - // if uis contains more than 1 delegate, return mui, otherwise return - // the primary delegate - if (uis.size() > 1) - return mui; - else - return ui; - } - - /** - * Returns an array containing the same {@link ComponentUI} instances as - * <code>uis</code>. If <code>uis</code> is <code>null</code>, a zero-length - * array is returned. - * - * @param uis a list of {@link ComponentUI} references (<code>null</code> - * permitted). - * - * @return An array containing the same {@link ComponentUI} instances as - * <code>uis</code>, or <code>null</code> if <code>uis</code> is - * empty. - */ - protected static ComponentUI[] uisToArray(Vector uis) - { - if (uis == null) - return new ComponentUI[0]; - int size = uis.size(); - if (size == 0) - return null; - ComponentUI[] result = new ComponentUI[size]; - uis.copyInto(result); - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiMenuBarUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiMenuBarUI.java deleted file mode 100644 index 5b43f6b..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiMenuBarUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiMenuBarUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.MenuBarUI; - -/** - * A UI delegate that that coordinates multiple {@link MenuBarUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiMenuBarUI extends MenuBarUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiMenuBarUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiMenuBarUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiMenuBarUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiMenuBarUI mui = new MultiMenuBarUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiMenuBarUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiMenuBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuBarUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiMenuBarUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiMenuBarUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiMenuItemUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiMenuItemUI.java deleted file mode 100644 index 6d361b0..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiMenuItemUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiMenuItemUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.MenuItemUI; - -/** - * A UI delegate that that coordinates multiple {@link MenuItemUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiMenuItemUI extends MenuItemUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiMenuItemUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiMenuItemUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiItemUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiMenuItemUI mui = new MultiMenuItemUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiMenuItemUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiMenuItemUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiMenuItemUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiMenuItemUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiMenuItemUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiOptionPaneUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiOptionPaneUI.java deleted file mode 100644 index eaa4a42..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiOptionPaneUI.java +++ /dev/null @@ -1,398 +0,0 @@ -/* MultiOptionPaneUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.JOptionPane; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.OptionPaneUI; - -/** - * A UI delegate that that coordinates multiple {@link OptionPaneUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiOptionPaneUI extends OptionPaneUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiOptionPaneUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiOptionPaneUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiOptionPaneUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiOptionPaneUI mui = new MultiOptionPaneUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiOptionPaneUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiOptionPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiOptionPaneUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiOptionPaneUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiOptionPaneUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link OptionPaneUI#selectInitialValue(JOptionPane)} method for - * all the UI delegates managed by this <code>MultiOptionPaneUI</code>. - * - * @param pane the option pane. - */ - public void selectInitialValue(JOptionPane pane) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - OptionPaneUI ui = (OptionPaneUI) iterator.next(); - ui.selectInitialValue(pane); - } - } - - /** - * Calls the {@link OptionPaneUI#containsCustomComponents(JOptionPane)} - * method for all the UI delegates managed by this - * <code>MultiOptionPaneUI</code>, returning the result for the UI delegate - * from the primary look and feel. - * - * @param pane the option pane. - * - * @return The result for the UI delegate from the primary look and feel. - */ - public boolean containsCustomComponents(JOptionPane pane) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - OptionPaneUI ui = (OptionPaneUI) iterator.next(); - result = ui.containsCustomComponents(pane); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - OptionPaneUI ui = (OptionPaneUI) iterator.next(); - /* boolean ignored = */ ui.containsCustomComponents(pane); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiPanelUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiPanelUI.java deleted file mode 100644 index 7b84599..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiPanelUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiPanelUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.PanelUI; - -/** - * A UI delegate that that coordinates multiple {@link PanelUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiPanelUI extends PanelUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiPanelUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiPanelUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiPanelUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiPanelUI mui = new MultiPanelUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiPanelUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiPanelUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiPanelUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiPanelUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiPanelUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiPopupMenuUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiPopupMenuUI.java deleted file mode 100644 index 0afaaf7..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiPopupMenuUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiPopupMenuUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.PopupMenuUI; - -/** - * A UI delegate that that coordinates multiple {@link PopupMenuUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiPopupMenuUI extends PopupMenuUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiPopupMenuUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiPopupMenuUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiPopupMenuUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiPopupMenuUI mui = new MultiPopupMenuUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiPopupMenuUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiPopupMenuUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiPopupMenuUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiPopupMenuUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiPopupMenuUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiProgressBarUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiProgressBarUI.java deleted file mode 100644 index 0395bdd..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiProgressBarUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiProgressBarUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ProgressBarUI; - -/** - * A UI delegate that that coordinates multiple {@link ProgressBarUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiProgressBarUI extends ProgressBarUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiProgressBarUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiProgressBarUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiProgressBarUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiProgressBarUI mui = new MultiProgressBarUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiProgressBarUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiProgressBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiProgressBarUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiProgressBarUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiProgressBarUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiRootPaneUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiRootPaneUI.java deleted file mode 100644 index 69c7ffe..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiRootPaneUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiRootPaneUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.RootPaneUI; - -/** - * A UI delegate that that coordinates multiple {@link RootPaneUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiRootPaneUI extends RootPaneUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiRootPanelUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiRootPaneUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiRootPaneUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiRootPaneUI mui = new MultiRootPaneUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiRootPaneUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiRootPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiRootPaneUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiRootPaneUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiRootPaneUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiScrollBarUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiScrollBarUI.java deleted file mode 100644 index 4ec8b3f..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiScrollBarUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiScrollBarUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ScrollBarUI; - -/** - * A UI delegate that that coordinates multiple {@link ScrollBarUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiScrollBarUI extends ScrollBarUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiScrollBarUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiScrollBarUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiScrollBarUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiScrollBarUI mui = new MultiScrollBarUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiScrollBarUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiScrollBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollBarUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiScrollBarUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiScrollBarUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiScrollPaneUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiScrollPaneUI.java deleted file mode 100644 index 5a0bc1e..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiScrollPaneUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiScrollPaneUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ScrollPaneUI; - -/** - * A UI delegate that that coordinates multiple {@link ScrollPaneUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiScrollPaneUI extends ScrollPaneUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiScrollPaneUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiScrollPaneUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiScrollPaneUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiScrollPaneUI mui = new MultiScrollPaneUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiScrollPaneUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiScrollPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiScrollPaneUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiScrollPaneUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiScrollPaneUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiSeparatorUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiSeparatorUI.java deleted file mode 100644 index fbd9712..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiSeparatorUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiSeparatorUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SeparatorUI; - -/** - * A UI delegate that that coordinates multiple {@link MultiSeparatorUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiSeparatorUI extends SeparatorUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiSeparatorUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiSeparatorUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiSeparatorUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiSeparatorUI mui = new MultiSeparatorUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiSeparatorUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiSeparatorUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSeparatorUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiSeparatorUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiSeparatorUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiSliderUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiSliderUI.java deleted file mode 100644 index cb896c5..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiSliderUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiSliderUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SliderUI; - -/** - * A UI delegate that that coordinates multiple {@link SliderUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiSliderUI extends SliderUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiSliderUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiSliderUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiSliderUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiSliderUI mui = new MultiSliderUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiSliderUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiSliderUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSliderUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiSliderUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiSliderUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiSpinnerUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiSpinnerUI.java deleted file mode 100644 index fd805f9..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiSpinnerUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiSpinnerUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SpinnerUI; - -/** - * A UI delegate that that coordinates multiple {@link SpinnerUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiSpinnerUI extends SpinnerUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiSpinnerUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiSpinnerUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiSpinnerUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiSpinnerUI mui = new MultiSpinnerUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiSpinnerUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiSpinnerUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSpinnerUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiSpinnerUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiSpinnerUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiSplitPaneUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiSplitPaneUI.java deleted file mode 100644 index 1eb2e41..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiSplitPaneUI.java +++ /dev/null @@ -1,494 +0,0 @@ -/* MultiSplitPaneUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.JSplitPane; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.SplitPaneUI; - -/** - * A UI delegate that that coordinates multiple {@link SplitPaneUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiSplitPaneUI extends SplitPaneUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiSplitPaneUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiSplitPaneUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiSplitPaneUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiSplitPaneUI mui = new MultiSplitPaneUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiSplitPaneUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiSplitPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link SplitPaneUI#resetToPreferredSizes(JSplitPane)} method - * for all the UI delegates managed by this <code>MultiSplitPaneUI</code>. - * - * @param pane the component. - */ - public void resetToPreferredSizes(JSplitPane pane) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - ui.resetToPreferredSizes(pane); - } - } - - /** - * Calls the {@link SplitPaneUI#setDividerLocation(JSplitPane, int)} method - * for all the UI delegates managed by this <code>MultiSplitPaneUI</code>. - * - * @param pane the component. - * @param location the location. - */ - public void setDividerLocation(JSplitPane pane, int location) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - ui.setDividerLocation(pane, location); - } - } - - /** - * Calls the {@link SplitPaneUI#getDividerLocation(JSplitPane)} method for all - * the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the location for the UI delegate from the primary look and - * feel. - * - * @param pane the component. - * - * @return The location returned by the UI delegate from the primary - * look and feel. - */ - public int getDividerLocation(JSplitPane pane) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - result = ui.getDividerLocation(pane); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - /* int ignored = */ ui.getDividerLocation(pane); - } - return result; - } - - /** - * Calls the {@link SplitPaneUI#getMinimumDividerLocation(JSplitPane)} method - * for all the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the location for the UI delegate from the primary look and - * feel. - * - * @param pane the component. - * - * @return The location returned by the UI delegate from the primary - * look and feel. - */ - public int getMinimumDividerLocation(JSplitPane pane) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - result = ui.getMinimumDividerLocation(pane); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - /* int ignored = */ ui.getMinimumDividerLocation(pane); - } - return result; - } - - /** - * Calls the {@link SplitPaneUI#getMaximumDividerLocation(JSplitPane)} method - * for all the UI delegates managed by this <code>MultiSplitPaneUI</code>, - * returning the location for the UI delegate from the primary look and - * feel. - * - * @param pane the component. - * - * @return The location returned by the UI delegate from the primary - * look and feel. - */ - public int getMaximumDividerLocation(JSplitPane pane) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - result = ui.getMaximumDividerLocation(pane); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - /* int ignored = */ ui.getMaximumDividerLocation(pane); - } - return result; - } - - /** - * Calls the {@link SplitPaneUI#finishedPaintingChildren(JSplitPane, - * Graphics)} method for all the UI delegates managed by this - * <code>MultiSplitPaneUI</code>. - * - * @param pane the component. - * @param g the graphics device. - */ - public void finishedPaintingChildren(JSplitPane pane, Graphics g) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - SplitPaneUI ui = (SplitPaneUI) iterator.next(); - ui.finishedPaintingChildren(pane, g); - } - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiTabbedPaneUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiTabbedPaneUI.java deleted file mode 100644 index 3f9d22a..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiTabbedPaneUI.java +++ /dev/null @@ -1,447 +0,0 @@ -/* MultiTabbedPaneUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.JTabbedPane; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TabbedPaneUI; - -/** - * A UI delegate that that coordinates multiple {@link TabbedPaneUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiTabbedPaneUI extends TabbedPaneUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiTabbedPaneUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiTabbedPaneUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiTabbedPaneUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiTabbedPaneUI mui = new MultiTabbedPaneUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiTabbedPaneUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiTabbedPaneUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTabbedPaneUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiTabbedPaneUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiTabbedPaneUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link TabbedPaneUI#tabForCoordinate(JTabbedPane, int, int)} - * method for all the UI delegates managed by this - * <code>MultiTabbedPaneUI</code>, returning the tab index for the UI - * delegate from the primary look and feel. - * - * @param pane the tabbed pane. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return The tab index returned by the UI delegate from the primary - * look and feel. - */ - public int tabForCoordinate(JTabbedPane pane, int x, int y) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TabbedPaneUI ui = (TabbedPaneUI) iterator.next(); - result = ui.tabForCoordinate(pane, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TabbedPaneUI ui = (TabbedPaneUI) iterator.next(); - /* int ignored = */ ui.tabForCoordinate(pane, x, y); - } - return result; - } - - /** - * Calls the {@link TabbedPaneUI#getTabBounds(JTabbedPane, int)} - * method for all the UI delegates managed by this - * <code>MultiTabbedPaneUI</code>, returning the bounds for the UI - * delegate from the primary look and feel. - * - * @param pane the tabbed pane. - * @param index the index. - * - * @return The bounds returned by the UI delegate from the primary - * look and feel. - */ - public Rectangle getTabBounds(JTabbedPane pane, int index) - { - Rectangle result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TabbedPaneUI ui = (TabbedPaneUI) iterator.next(); - result = ui.getTabBounds(pane, index); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TabbedPaneUI ui = (TabbedPaneUI) iterator.next(); - /* int ignored = */ ui.getTabRunCount(pane); - } - return result; - } - - /** - * Calls the {@link TabbedPaneUI#getTabRunCount(JTabbedPane)} - * method for all the UI delegates managed by this - * <code>MultiTabbedPaneUI</code>, returning the nt for the UI - * delegate from the primary look and feel. - * - * @param pane the tabbed pane. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getTabRunCount(JTabbedPane pane) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TabbedPaneUI ui = (TabbedPaneUI) iterator.next(); - result = ui.getTabRunCount(pane); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TabbedPaneUI ui = (TabbedPaneUI) iterator.next(); - /* int ignored = */ ui.getTabRunCount(pane); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiTableHeaderUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiTableHeaderUI.java deleted file mode 100644 index 972303b..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiTableHeaderUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiTableHeaderUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TableHeaderUI; - -/** - * A UI delegate that that coordinates multiple {@link TableHeaderUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiTableHeaderUI extends TableHeaderUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiTableHeaderUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiTableHeaderUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiTableHeaderUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiTableHeaderUI mui = new MultiTableHeaderUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiTableHeaderUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiTableHeaderUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableHeaderUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiTableHeaderUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiTableHeaderUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiTableUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiTableUI.java deleted file mode 100644 index 1cd1a4c..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiTableUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiTableUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TableUI; - -/** - * A UI delegate that that coordinates multiple {@link TableUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiTableUI extends TableUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiTableUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiTableUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiTableUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiTableUI mui = new MultiTableUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiTableUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiTableUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTableUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiTableUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiTableUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiTextUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiTextUI.java deleted file mode 100644 index 392fd98..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiTextUI.java +++ /dev/null @@ -1,617 +0,0 @@ -/* MultiTextUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TextUI; -import javax.swing.text.BadLocationException; -import javax.swing.text.EditorKit; -import javax.swing.text.JTextComponent; -import javax.swing.text.Position; -import javax.swing.text.View; -import javax.swing.text.Position.Bias; - -/** - * A UI delegate that that coordinates multiple {@link TextUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiTextUI extends TextUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiTextUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiTextUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiTextUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiTextUI mui = new MultiTextUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiTextUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiTextUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiTextUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiTextUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link TextUI#modelToView(JTextComponent, int)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the bounds for the UI delegate from the primary look and - * feel. - * - * @param tc the text component. - * - * @return The bounds returned by the UI delegate from the primary - * look and feel. - */ - public Rectangle modelToView(JTextComponent tc, int pos) - throws BadLocationException - { - Rectangle result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.modelToView(tc, pos); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* Rectangle ignored = */ ui.modelToView(tc, pos); - } - return result; - } - - /** - * Calls the {@link TextUI#modelToView(JTextComponent, int, Position.Bias)} - * method for all the UI delegates managed by this <code>MultiTextUI</code>, - * returning the bounds for the UI delegate from the primary look and - * feel. - * - * @param tc the text component. - * - * @return The bounds returned by the UI delegate from the primary - * look and feel. - */ - public Rectangle modelToView(JTextComponent tc, int pos, Bias bias) - throws BadLocationException - { - Rectangle result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.modelToView(tc, pos, bias); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* Rectangle ignored = */ ui.modelToView(tc, pos, bias); - } - return result; - } - - /** - * Calls the {@link TextUI#viewToModel(JTextComponent, Point)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the position for the UI delegate from the primary look and - * feel. - * - * @param t the text component. - * @param pt the point. - * - * @return The position returned by the UI delegate from the primary - * look and feel. - */ - public int viewToModel(JTextComponent t, Point pt) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.viewToModel(t, pt); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* int ignored = */ ui.viewToModel(t, pt); - } - return result; - } - - /** - * Calls the {@link TextUI#viewToModel(JTextComponent, Point, Bias[])} method - * for all the UI delegates managed by this <code>MultiTextUI</code>, - * returning the position for the UI delegate from the primary look and - * feel. - * - * @param tc the text component. - * - * @return The position returned by the UI delegate from the primary - * look and feel. - */ - public int viewToModel(JTextComponent tc, Point loc, Bias[] outBias) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.viewToModel(tc, loc, outBias); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* int ignored = */ ui.viewToModel(tc, loc, outBias); - } - return result; - } - - /** - * Calls the {@link TextUI#getNextVisualPositionFrom(JTextComponent, int, - * Position.Bias, int, Position.Bias[])} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the position for the UI delegate from the primary look and - * feel. - * - * @param tc the text component. - * - * @return The position returned by the UI delegate from the primary - * look and feel. - */ - public int getNextVisualPositionFrom(JTextComponent tc, int pos, Bias bias, - int direction, Bias[] outBias) throws BadLocationException - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.getNextVisualPositionFrom(tc, pos, bias, direction, - outBias); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* int ignored = */ ui.getNextVisualPositionFrom(tc, pos, bias, - direction, outBias); - } - return result; - } - - /** - * Calls the {@link TextUI#damageRange(JTextComponent, int, int)} method for - * all the UI delegates managed by this <code>MultiTextUI</code>. - * - * @param tc the component. - * @param start the start position. - * @param end the end position. - */ - public void damageRange(JTextComponent tc, int start, int end) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - ui.damageRange(tc, start, end); - } - } - - /** - * Calls the {@link TextUI#damageRange(JTextComponent, int, int, - * Position.Bias, Position.Bias)} method for all the UI delegates managed by - * this <code>MultiTextUI</code>. - * - * @param tc the component. - * @param start the start position. - * @param end the end position. - * @param startBias the start bias. - * @param endBias the end bias. - */ - public void damageRange(JTextComponent tc, int start, int end, - Bias startBias, Bias endBias) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - ui.damageRange(tc, start, end, startBias, endBias); - } - } - - /** - * Calls the {@link TextUI#getEditorKit(JTextComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the editor kit for the UI delegate from the primary look and - * feel. - * - * @param tc the text component. - * - * @return The editor kit returned by the UI delegate from the primary - * look and feel. - */ - public EditorKit getEditorKit(JTextComponent tc) - { - EditorKit result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.getEditorKit(tc); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* EditorKit ignored = */ ui.getEditorKit(tc); - } - return result; - } - - /** - * Calls the {@link TextUI#getRootView(JTextComponent)} method for all - * the UI delegates managed by this <code>MultiTextUI</code>, - * returning the view for the UI delegate from the primary look and - * feel. - * - * @param tc the text component. - * - * @return The view returned by the UI delegate from the primary - * look and feel. - */ - public View getRootView(JTextComponent tc) - { - View result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - result = ui.getRootView(tc); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TextUI ui = (TextUI) iterator.next(); - /* View ignored = */ ui.getRootView(tc); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiToolBarUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiToolBarUI.java deleted file mode 100644 index 5f308d9..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiToolBarUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiToolBarUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ToolBarUI; - -/** - * A UI delegate that that coordinates multiple {@link ToolBarUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiToolBarUI extends ToolBarUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiToolBarUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiToolBarUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiToolBarUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiToolBarUI mui = new MultiToolBarUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiToolBarUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiToolBarUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolBarUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiToolBarUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiToolBarUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiToolTipUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiToolTipUI.java deleted file mode 100644 index 9db9efb..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiToolTipUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiToolTipUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ToolTipUI; - -/** - * A UI delegate that that coordinates multiple {@link ToolTipUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiToolTipUI extends ToolTipUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiToolTipUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiToolTipUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiToolTipUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiToolTipUI mui = new MultiToolTipUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiToolTipUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiToolTipUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiToolTipUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiToolTipUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiToolTipUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiTreeUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiTreeUI.java deleted file mode 100644 index f70decc..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiTreeUI.java +++ /dev/null @@ -1,628 +0,0 @@ -/* MultiTreeUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.JTree; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.TreeUI; -import javax.swing.tree.TreePath; - -/** - * A UI delegate that that coordinates multiple {@link TreeUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiTreeUI extends TreeUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiTreeUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiTreeUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiTreeUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiTreeUI mui = new MultiTreeUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiTreeUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiTreeUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - - /** - * Calls the {@link TreeUI#getPathBounds(JTree, TreePath)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the bounds for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The bounds returned by the UI delegate from the primary - * look and feel. - */ - public Rectangle getPathBounds(JTree tree, TreePath path) - { - Rectangle result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.getPathBounds(tree, path); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* Rectangle ignored = */ ui.getPathBounds(tree, path); - } - return result; - } - - /** - * Calls the {@link TreeUI#getPathForRow(JTree, int)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the path for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The path returned by the UI delegate from the primary - * look and feel. - */ - public TreePath getPathForRow(JTree tree, int row) - { - TreePath result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.getPathForRow(tree, row); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* TreePath ignored = */ ui.getPathForRow(tree, row); - } - return result; - } - - /** - * Calls the {@link TreeUI#getRowForPath(JTree, TreePath)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the row index for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The row index returned by the UI delegate from the primary - * look and feel. - */ - public int getRowForPath(JTree tree, TreePath path) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.getRowForPath(tree, path); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* int ignored = */ ui.getRowForPath(tree, path); - } - return result; - } - - /** - * Calls the {@link TreeUI#getRowCount(JTree)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getRowCount(JTree tree) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.getRowCount(tree); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* int ignored = */ ui.getRowCount(tree); - } - return result; - } - - /** - * Calls the {@link TreeUI#getClosestPathForLocation(JTree, int, int)} method - * for all the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the path for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The path returned by the UI delegate from the primary - * look and feel. - */ - public TreePath getClosestPathForLocation(JTree tree, int x, int y) - { - TreePath result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.getClosestPathForLocation(tree, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* TreePath ignored = */ ui.getClosestPathForLocation(tree, x, y); - } - return result; - } - - /** - * Calls the {@link TreeUI#isEditing(JTree)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The result returned by the UI delegate from the primary - * look and feel. - */ - public boolean isEditing(JTree tree) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.isEditing(tree); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* boolean ignored = */ ui.isEditing(tree); - } - return result; - } - - /** - * Calls the {@link TreeUI#stopEditing(JTree)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The result returned by the UI delegate from the primary - * look and feel. - */ - public boolean stopEditing(JTree tree) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.stopEditing(tree); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* boolean ignored = */ ui.stopEditing(tree); - } - return result; - } - - /** - * Calls the {@link TreeUI#cancelEditing(JTree)} method for - * all the UI delegates managed by this <code>MultiTreeUI</code>. - * - * @param tree the tree component. - */ - public void cancelEditing(JTree tree) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - ui.cancelEditing(tree); - } - } - - /** - * Calls the {@link TreeUI#startEditingAtPath(JTree, TreePath)} method for - * all the UI delegates managed by this <code>MultiTreeUI</code>. - * - * @param tree the tree component. - * @param path the path. - */ - public void startEditingAtPath(JTree tree, TreePath path) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - ui.startEditingAtPath(tree, path); - } - } - - /** - * Calls the {@link TreeUI#getEditingPath(JTree)} method for all - * the UI delegates managed by this <code>MultiTreeUI</code>, - * returning the path for the UI delegate from the primary look and - * feel. - * - * @param tree the tree component. - * - * @return The path returned by the UI delegate from the primary - * look and feel. - */ - public TreePath getEditingPath(JTree tree) - { - TreePath result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - result = ui.getEditingPath(tree); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - TreeUI ui = (TreeUI) iterator.next(); - /* TreePath ignored = */ ui.getEditingPath(tree); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/MultiViewportUI.java b/libjava/classpath/javax/swing/plaf/multi/MultiViewportUI.java deleted file mode 100644 index 55f9cba..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/MultiViewportUI.java +++ /dev/null @@ -1,352 +0,0 @@ -/* MultiViewPortUI.java -- - Copyright (C) 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.plaf.multi; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.util.Iterator; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.swing.JComponent; -import javax.swing.LookAndFeel; -import javax.swing.UIManager; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.ViewportUI; - -/** - * A UI delegate that that coordinates multiple {@link ViewportUI} - * instances, one from the primary look and feel, and one or more from the - * auxiliary look and feel(s). - * - * @see UIManager#addAuxiliaryLookAndFeel(LookAndFeel) - */ -public class MultiViewportUI extends ViewportUI -{ - - /** A list of references to the actual component UIs. */ - protected Vector uis; - - /** - * Creates a new <code>MultiViewPortUI</code> instance. - * - * @see #createUI(JComponent) - */ - public MultiViewportUI() - { - uis = new Vector(); - } - - /** - * Creates a delegate object for the specified component. If any auxiliary - * look and feels support this component, a <code>MultiViewportUI</code> is - * returned, otherwise the UI from the default look and feel is returned. - * - * @param target the component. - * - * @see MultiLookAndFeel#createUIs(ComponentUI, Vector, JComponent) - */ - public static ComponentUI createUI(JComponent target) - { - MultiViewportUI mui = new MultiViewportUI(); - return MultiLookAndFeel.createUIs(mui, mui.uis, target); - } - - /** - * Calls the {@link ComponentUI#installUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>. - * - * @param c the component. - */ - public void installUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.installUI(c); - } - } - - /** - * Calls the {@link ComponentUI#uninstallUI(JComponent)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>. - * - * @param c the component. - */ - public void uninstallUI(JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.uninstallUI(c); - } - } - - /** - * Returns an array containing the UI delegates managed by this - * <code>MultiViewportUI</code>. The first item in the array is always - * the UI delegate from the installed default look and feel. - * - * @return An array of UI delegates. - */ - public ComponentUI[] getUIs() - { - return MultiLookAndFeel.uisToArray(uis); - } - - /** - * Calls the {@link ComponentUI#contains(JComponent, int, int)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>, - * returning the result for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * @param x the x-coordinate. - * @param y the y-coordinate. - * - * @return <code>true</code> if the specified (x, y) coordinate falls within - * the bounds of the component as rendered by the UI delegate in the - * primary look and feel, and <code>false</code> otherwise. - */ - public boolean contains(JComponent c, int x, int y) - { - boolean result = false; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.contains(c, x, y); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* boolean ignored = */ ui.contains(c, x, y); - } - return result; - } - - /** - * Calls the {@link ComponentUI#update(Graphics, JComponent)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void update(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.update(g, c); - } - } - - /** - * Calls the <code>paint(Graphics, JComponent)</code> method for all the UI - * delegates managed by this <code>MultiViewportUI</code>. - * - * @param g the graphics device. - * @param c the component. - */ - public void paint(Graphics g, JComponent c) - { - Iterator iterator = uis.iterator(); - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - ui.paint(g, c); - } - } - - /** - * Calls the {@link ComponentUI#getPreferredSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>, - * returning the preferred size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The preferred size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getPreferredSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getPreferredSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getPreferredSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMinimumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>, - * returning the minimum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The minimum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMinimumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMinimumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMinimumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getMaximumSize(JComponent)} method for all - * the UI delegates managed by this <code>MultiViewportUI</code>, - * returning the maximum size for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The maximum size returned by the UI delegate from the primary - * look and feel. - */ - public Dimension getMaximumSize(JComponent c) - { - Dimension result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getMaximumSize(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Dimension ignored = */ ui.getMaximumSize(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChildrenCount(JComponent)} method - * for all the UI delegates managed by this <code>MultiViewportUI</code>, - * returning the count for the UI delegate from the primary look and - * feel. - * - * @param c the component. - * - * @return The count returned by the UI delegate from the primary - * look and feel. - */ - public int getAccessibleChildrenCount(JComponent c) - { - int result = 0; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChildrenCount(c); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* int ignored = */ ui.getAccessibleChildrenCount(c); - } - return result; - } - - /** - * Calls the {@link ComponentUI#getAccessibleChild(JComponent, int)} method - * for all the UI delegates managed by this <code>MultiViewportUI</code>, - * returning the child for the UI delegate from the primary look and - * feel. - * - * @param c the component - * @param i the child index. - * - * @return The child returned by the UI delegate from the primary - * look and feel. - */ - public Accessible getAccessibleChild(JComponent c, int i) - { - Accessible result = null; - Iterator iterator = uis.iterator(); - // first UI delegate provides the return value - if (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - result = ui.getAccessibleChild(c, i); - } - // return values from auxiliary UI delegates are ignored - while (iterator.hasNext()) - { - ComponentUI ui = (ComponentUI) iterator.next(); - /* Accessible ignored = */ ui.getAccessibleChild(c, i); - } - return result; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/multi/package.html b/libjava/classpath/javax/swing/plaf/multi/package.html deleted file mode 100644 index 568a7d0..0000000 --- a/libjava/classpath/javax/swing/plaf/multi/package.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- package.html - describes classes in javax.swing.plaf.metal package. - Copyright (C) 2002, 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. --> - -<html> -<head><title>GNU Classpath - javax.swing.plaf.multi</title></head> - -<body> -<p>Provides a look and feel that can combine a primary look and feel with one or more auxiliary look and feels.</p> - -</body> -</html> diff --git a/libjava/classpath/javax/swing/plaf/package.html b/libjava/classpath/javax/swing/plaf/package.html deleted file mode 100644 index c266074..0000000 --- a/libjava/classpath/javax/swing/plaf/package.html +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- package.html - describes classes in javax.swing.plaf package. - Copyright (C) 2002, 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. --> - -<html> -<head><title>GNU Classpath - javax.swing.plaf</title></head> - -<body> -<p>A base package for the "pluggable look and feel" (plaf) mechanism used by -the <code>javax.swing</code> classes.</p> - -</body> -</html> diff --git a/libjava/classpath/javax/swing/plaf/synth/ColorType.java b/libjava/classpath/javax/swing/plaf/synth/ColorType.java deleted file mode 100644 index ced1efc..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/ColorType.java +++ /dev/null @@ -1,135 +0,0 @@ -/* ColorType.java -- En enumeration of color types - Copyright (C) 2006 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.plaf.synth; - -/** - * A typesafe enumeration of color types. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public class ColorType -{ - - /** - * A constant used to identify the foreground color of a component. - */ - public static final ColorType FOREGROUND = new ColorType("Foreground"); - - /** - * A constant used to identify the background color of a component. - */ - public static final ColorType BACKGROUND = new ColorType("Background"); - - /** - * A constant used to identify the foreground color of text of a component. - */ - public static final ColorType TEXT_FOREGROUND - = new ColorType("TextForeground"); - - /** - * A constant used to identify the background color of text of a component. - */ - public static final ColorType TEXT_BACKGROUND - = new ColorType("TextBackground"); - - /** - * A constant used to identify the focus color of a component. - */ - public static final ColorType FOCUS = new ColorType("Focus"); - - /** - * The maximum number of color types. - */ - public static final int MAX_COUNT; - static - { - // This is not a constant in the JDK. - MAX_COUNT = 5; - } - - /** - * A counter used to assign an ID to the created color types. - */ - private static int count = 0; - - /** - * The ID of the color type. - */ - private int id; - - /** - * The description of the color type. - */ - private String description; - - /** - * Creates a new <code>Color</code> color type with the specified - * description. - * - * @param desc the textual description of the color type - */ - protected ColorType(String desc) - { - description = desc; - id = count; - count++; - } - - /** - * Returns the unique ID of the color type. - * - * @return the unique ID of the color type - */ - public final int getID() - { - return id; - } - - /** - * Returns the textual description of the color type. - * - * @return the textual description of the color type - */ - public String toString() - { - return description; - } -} diff --git a/libjava/classpath/javax/swing/plaf/synth/Region.java b/libjava/classpath/javax/swing/plaf/synth/Region.java deleted file mode 100644 index 25d1a11..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/Region.java +++ /dev/null @@ -1,474 +0,0 @@ -/* Region.java -- Describes a region within a component - Copyright (C) 2006 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.plaf.synth; - -/** - * Describes a region of a component or the complete component. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public class Region -{ - - // FIXME: What should ui be for the non-component regions that have - // subregion==false? - - /** - * Specifies an arrow button region. - */ - public static final Region ARROW_BUTTON = - new Region("ArrowButton", null, false); - - /** - * Specifies the region of a standard button. - */ - public static final Region BUTTON = - new Region("Button", "ButtonUI", false); - - /** - * Specifies the region of a check box. - */ - public static final Region CHECK_BOX = - new Region("CheckBox", "CheckBoxUI", false); - - /** - * Specifies the region of a check box menu item. - */ - public static final Region CHECK_BOX_MENU_ITEM = - new Region("CheckBoxMenuItem", "CheckBoxMenuItemUI", false); - - /** - * Specifies the region of a colorchooser. - */ - public static final Region COLOR_CHOOSER = - new Region("ColorChooser", "ColorChooserUI", false); - - /** - * Specifies the region of a combo box. - */ - public static final Region COMBO_BOX = - new Region("ComboBox", "ComboBoxUI", false); - - /** - * Specifies the region of a desktop pane. - */ - public static final Region DESKTOP_PANE = - new Region("DesktopPane", "DesktopPaneUI", false); - - /** - * Specifies the region of a desktop icon. - */ - public static final Region DESKTOP_ICON = - new Region("DesktopIcon", "DesktopIconUI", false); - - /** - * Specifies the region of an editor pane. - */ - public static final Region EDITOR_PANE = - new Region("EditorPane", "EditorPaneUI", false); - - /** - * Specifies the region of a file chooser. - */ - public static final Region FILE_CHOOSER = - new Region("FileChooser", "FileChooserUI", false); - - /** - * Specifies the region of a formatted text field. - */ - public static final Region FORMATTED_TEXT_FIELD = - new Region("FormattedTextField", "FormattedTextFieldUI", false); - - /** - * Specifies the region of an internal frame. - */ - public static final Region INTERNAL_FRAME = - new Region("InternalFrame", "InternalFrameUI", false); - - /** - * Specifies the region of the title pane of an internal frame. - */ - public static final Region INTERNAL_FRAME_TITLE_PANE = - new Region("InternalFrameTitlePane", "InternalFrameTitlePaneUI", false); - - /** - * Specifies the region of a label. - */ - public static final Region LABEL = - new Region("Label", "LabelUI", false); - - /** - * Specifies the region of a list. - */ - public static final Region LIST = - new Region("List", "ListUI", false); - - /** - * Specifies the region of a menu. - */ - public static final Region MENU = - new Region("Menu", "MenuUI", false); - - /** - * Specifies the region of a menu bar. - */ - public static final Region MENU_BAR = - new Region("MenuBar", "MenuBarUI", false); - - /** - * Specifies the region of a menu item. - */ - public static final Region MENU_ITEM = - new Region("MenuItem", "MenuItemUI", false); - - /** - * Specifies the region of a menu item accelerator. This is a subregion - * of menu item. - */ - public static final Region MENU_ITEM_ACCELERATOR = - new Region("MenuItemAccelerator", null, true); - - /** - * Specifies the region of an option pane. - */ - public static final Region OPTION_PANE = - new Region("OptionPane", "OptionPaneUI", false); - - /** - * Specifies the region of a panel. - */ - public static final Region PANEL = - new Region("Panel", "PanelUI", false); - - /** - * Specifies the region of a password field. - */ - public static final Region PASSWORD_FIELD = - new Region("PasswordField", "PasswordFieldUI", false); - - /** - * Specifies the region of a popup menu. - */ - public static final Region POPUP_MENU = - new Region("PopupMenu", "PopupMenuUI", false); - - /** - * Specifies the region of a popup menu separator. - */ - public static final Region POPUP_MENU_SEPARATOR = - new Region("PopupMenuSeparator", null, false); - - /** - * Specifies the region of a progress bar. - */ - public static final Region PROGRESS_BAR = - new Region("ProgressBar", "ProgressBarUI", false); - - /** - * Specifies the region of a radio button. - */ - public static final Region RADIO_BUTTON = - new Region("RadioButton", "RadioButtonUI", false); - - /** - * Specifies the region of a radio button menu item. - */ - public static final Region RADIO_BUTTON_MENU_ITEM = - new Region("RadioButtonMenuItem", "RadioButtonMenuItemUI", false); - - /** - * Specifies the region of a root pane. - */ - public static final Region ROOT_PANE = - new Region("RootPane", "RootPaneUI", false); - - /** - * Specifies the region of a scroll bar. - */ - public static final Region SCROLL_BAR = - new Region("ScrollBar", "ScrollBarUI", false); - - /** - * Specifies the region of a scroll bar track. This is a subregion of - * scroll bars. - */ - public static final Region SCROLL_BAR_TRACK = - new Region("ScrollBarTrack", null, true); - - /** - * Specifies the region of a scroll bar thumb. This is a subregion of - * scroll bars. - */ - public static final Region SCROLL_BAR_THUMB = - new Region("ScrollBarThumb", null, true); - - /** - * Specifies the region of a scroll pane. - */ - public static final Region SCROLL_PANE = - new Region("ScrollPane", "ScrollPaneUI", false); - - /** - * Specifies the region of a separator. - */ - public static final Region SEPARATOR = - new Region("Separator", "SeparatorUI", false); - - /** - * Specifies the region of a slider. - */ - public static final Region SLIDER = - new Region("Slider", "SliderUI", false); - - /** - * Specifies the region of a slider track. This is a subregion of a slider. - */ - public static final Region SLIDER_TRACK = - new Region("SliderTrack", null, true); - - /** - * Specifies the region of a slider thumb. This is a subregion of a slider. - */ - public static final Region SLIDER_THUMB = - new Region("SliderThumb", null, true); - - /** - * Specifies the region of a spinner. - */ - public static final Region SPINNER = - new Region("Spinner", "SpinnerUI", false); - - /** - * Specifies the region of a split pane. - */ - public static final Region SPLIT_PANE = - new Region("SplitPane", "SplitPaneUI", false); - - /** - * Specifies the region of a split pane divider. This is a subregion of - * a split pane. - */ - public static final Region SPLIT_PANE_DIVIDER = - new Region("SplitPaneDivider", null, true); - - /** - * Specifies the region of a tabbed pane. - */ - public static final Region TABBED_PANE = - new Region("TabbedPane", "TabbedPaneUI", false); - - /** - * This specifies the region of a tab of a tabbed pane. This is a subregion - * of a tabbed pane. - */ - public static final Region TABBED_PANE_TAB = - new Region("TabbedPaneTab", null, true); - - /** - * This specifies the region underneath the tabs of a tabbed pane. This is a - * subregion of a tabbed pane. - */ - public static final Region TABBED_PANE_TAB_AREA = - new Region("TabbedPaneTabArea", null, true); - - /** - * This specifies the region for the content of a tabbed pane. This is a - * subregion of a tabbed pane. - */ - public static final Region TABBED_PANE_CONTENT = - new Region("TabbedPaneContent", null, true); - - /** - * Specifies the region of a table. - */ - public static final Region TABLE = - new Region("Table", "TableUI", false); - - /** - * Specifies the region of a table header. - */ - public static final Region TABLE_HEADER = - new Region("TableHeader", "TableHeaderUI", false); - - /** - * Specifies the region of a text area. - */ - public static final Region TEXT_AREA = - new Region("TextArea", "TextAreaUI", false); - - /** - * Specifies the region of a text field. - */ - public static final Region TEXT_FIELD = - new Region("TextField", "TextFieldUI", false); - - /** - * Specifies the region of a text pane. - */ - public static final Region TEXT_PANE = - new Region("TextPane", "TextPaneUI", false); - - /** - * Specifies the region of a toggle button. - */ - public static final Region TOGGLE_BUTTON = - new Region("ToggleButton", "ToggleButtonUI", false); - - /** - * Specifies the region of a tool bar. - */ - public static final Region TOOL_BAR = - new Region("ToolBar", "ToolBarUI", false); - - /** - * Specifies the content region of a tool bar. This is a subregion of a tool - * bar. - */ - public static final Region TOOL_BAR_CONTENT = - new Region("ToolBarContent", null, true); - - /** - * Specifies the drag window region of a tool bar. This is a subregion of a - * tool bar. - */ - public static final Region TOOL_BAR_DRAG_WINDOW = - new Region("ToolBarDragWindow", null, false); - - /** - * Specifies the region of a tool tip. - */ - public static final Region TOOL_TIP = - new Region("ToolTip", "ToolTipUI", false); - - /** - * Specifies the region of a separator of a tool bar. This is a subregion of - * a tool bar. - */ - public static final Region TOOL_BAR_SEPARATOR = - new Region("ToolBarSeparator", null, false); - - /** - * Specifies the region of a tree. - */ - public static final Region TREE = - new Region("Tree", "TreeUI", false); - - /** - * Specifies the region of a tree cell. This is a subregion of a tree. - */ - public static final Region TREE_CELL = - new Region("TreeCell", null, true); - - /** - * Specifies the region of a viewport. - */ - public static final Region VIEWPORT = - new Region("Viewport", "ViewportUI", false); - - - /** - * The UI class id for the region. This is package private because this will - * be used by other classes in that package. - */ - String ui; - - /** - * The name of the region. - */ - private String name; - - /** - * If this region is a subregion or not. - */ - private boolean subregion; - - /** - * Creates a new <code>Region</code> with the specified name and ui ID. - * The <code>ui</code> must be the same what - * {@link javax.swing.JComponent#getUIClassID()} returns for toplevel regions. For - * subregions this should be <code>null</code>. - * - * @param name the name of the region - * @param ui the UI class ID of the region or <code>null</code> for - * subregions - * @param subregion <code>true</code> if this region is a subregion, - * <code>false</code> otherwise - */ - protected Region(String name, String ui, boolean subregion) - { - this.name = name; - this.ui = ui; - this.subregion = subregion; - } - - /** - * Returns <code>true</code> if this region describes a subregion of a - * component, <code>false</code> if it describes a component region itself. - * - * @return <code>true</code> if this region describes a subregion of a - * component, <code>false</code> if it describes a component region - * itself - */ - public boolean isSubregion() - { - return subregion; - } - - /** - * Returns the name of the region. - * - * @return the name of the region - */ - public String getName() - { - return name; - } - - /** - * Returns the name of the region. - * - * @return the name of the region - */ - public String toString() - { - return name; - } -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthConstants.java b/libjava/classpath/javax/swing/plaf/synth/SynthConstants.java deleted file mode 100644 index 306024c..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthConstants.java +++ /dev/null @@ -1,85 +0,0 @@ -/* SynthConstants.java -- A couple of constants used by Synth - Copyright (C) 2006 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.plaf.synth; - -/** - * A couple of constants used by the Synth Look and Feel. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public interface SynthConstants -{ - /** - * A primary state indicating that a component is enabled. - */ - static final int ENABLED = 1; - - /** - * A primary state indicating that a component is disabled. - */ - static final int DISABLED = 8; - - /** - * A primary state indicating that the mouse is over a region. - */ - static final int MOUSE_OVER = 2; - - /** - * A primary state indicating that the component is in a pressed state (which - * does not necessarily mean that the mouse is pressed over the component). - */ - static final int PRESSED = 4; - - /** - * Indicates that a region has focus. - */ - static final int FOCUSED = 256; - - /** - * Indicates that a region is selected. - */ - static final int SELECTED = 512; - - /** - * Indicates that a region is in its default state. - */ - static final int DEFAULT = 1024; -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthContext.java b/libjava/classpath/javax/swing/plaf/synth/SynthContext.java deleted file mode 100644 index 83536da..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthContext.java +++ /dev/null @@ -1,134 +0,0 @@ -/* SynthContext.java -- Contextual information about a region - Copyright (C) 2006 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.plaf.synth; - -import javax.swing.JComponent; - -/** - * Contains some contextual information about a region. The information passed - * in objects of this class can only be considered valid during the method call - * that it was passed to. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public class SynthContext -{ - - /** - * The component. - */ - private JComponent component; - - /** - * The region of the component. - */ - private Region region; - - /** - * The style of the component. - */ - private SynthStyle style; - - /** - * The state of the component. - */ - private int state; - - /** - * Creates a new <code>SynthContext</code> object. - * - * @param component the component for which this context is used - * @param region the region of the component - * @param style the style associated with the component - * @param state a or'ed bitmask of the constants from {@link SynthConstants} - */ - public SynthContext(JComponent component, Region region, SynthStyle style, - int state) - { - this.component = component; - this.region = region; - this.style = style; - this.state = state; - } - - /** - * Returns the component that contains the region. - * - * @return the component that contains the region - */ - public JComponent getComponent() - { - return component; - } - - /** - * Returns the region that identifies this state. - * - * @return the region that identifies this state - */ - public Region getRegion() - { - return region; - } - - /** - * Returns the style of the region. - * - * @return the style of the region - */ - public SynthStyle getStyle() - { - return style; - } - - /** - * Returns the state of the component. This is a or'ed bitmask of the - * constants defined in {@link SynthConstants}. - * - * @return the state of the component - * - * @see SynthConstants - */ - public int getComponentState() - { - return state; - } -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java b/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java deleted file mode 100644 index 76a46cb..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthGraphicsUtils.java +++ /dev/null @@ -1,289 +0,0 @@ -/* SynthGraphicsUtils.java -- Wrapper for graphics primitives used in Synth - Copyright (C) 2006 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.plaf.synth; - -import gnu.classpath.NotImplementedException; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Rectangle; - -import javax.swing.Icon; -import javax.swing.SwingUtilities; - -/** - * Wrapper for graphics primitives used in Synth. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public class SynthGraphicsUtils - -{ - /** - * Creates a new <code>SynthGraphicsUtils</code> object. - */ - public SynthGraphicsUtils() - { - // Nothing to do here. - } - - /** - * Draws a line from (x1,y1) to (x2,y2). - * - * @param ctx the synth context, identifies the region - * @param paintKey identifies the portion of the component to be painted, may - * be <code>null</code> - * @param g the graphics context to use for painting - * @param x1 the x coordinate of the start point - * @param y1 the y coordinate of the start point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point - */ - public void drawLine(SynthContext ctx, Object paintKey, Graphics g, int x1, - int y1, int x2, int y2) - { - // TODO: Correct? - g.drawLine(x1, y1, x2, y2); - } - - /** - * Lays out a label and (if non-null) an icon. The calculated coordinates are - * then stored in <code>viewR</code>, <code>iconR</code> and - * <code>textR</code>. - * - * The alignment and position parameters may be one of the alignment or - * position constants defined in {@link javax.swing.SwingConstants}. - * - * @param ctx the synth context, identifies the current region - * @param fm the font metrics to use to fetch the text measures - * @param text the text to lay out, may be <code>null</code> - * @param icon the icon to lay out, may be <code>null</code> - * @param hAlign the horizontal alignment of the label - * @param vAlign the vertical alignment of the label - * @param hTextPos the horizontal text position - * @param vTextPos the vertical text position - * @param viewR the view rectangle (return parameter) - * @param iconR the icon rectangle (return parameter) - * @param textR the text rectangle (return parameter) - * @param iconTextGap the gap between text and label - * - * @return the label text, may be shortened - */ - public String layoutText(SynthContext ctx, FontMetrics fm, String text, - Icon icon, int hAlign, int vAlign, int hTextPos, - int vTextPos, Rectangle viewR, Rectangle iconR, - Rectangle textR, int iconTextGap) - { - return SwingUtilities.layoutCompoundLabel(fm, text, icon, vAlign, hAlign, - vTextPos, hTextPos, viewR, iconR, - textR, iconTextGap); - } - - /** - * Returns the width of the string <code>text</code> for the specified font - * and font metrics. - * - * @param ctx identifies the current region - * @param font the font - * @param fm the font metrics to use - * @param text the text to be measured - * - * @return the width of the string <code>text</code> for the specified font - * and font metrics - */ - public int computeStringWidth(SynthContext ctx, Font font, FontMetrics fm, - String text) - { - return fm.stringWidth(text); - } - - /** - * Calculates the minimums size that is needed to render the label with - * <code>text</code> and <code>icon</code> correctly. - * - * @param ctx identifies the current region - * @param font the font to use - * @param text the label text - * @param icon the label icon - * @param hAlign the horizontal alignment - * @param vAlign the vertical alignment - * @param hTextPosition the horizontal text position - * @param vTextPosition the vertical text position - * @param iconTextGap the gap between icon and text - * @param mnemonicIndex index to the mnemonic character within - * <code>text</code> - * - * @return the minimums size that is needed to render the label with - * <code>text</code> and <code>icon</code> correctly - */ - public Dimension getMinimumSize(SynthContext ctx, Font font, String text, - Icon icon, int hAlign, int vAlign, - int hTextPosition,int vTextPosition, - int iconTextGap,int mnemonicIndex) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return new Dimension(0, 0); - } - - /** - * Calculates the preferred size that is needed to render the label with - * <code>text</code> and <code>icon</code> correctly. - * - * @param ctx identifies the current region - * @param font the font to use - * @param text the label text - * @param icon the label icon - * @param hAlign the horizontal alignment - * @param vAlign the vertical alignment - * @param hTextPosition the horizontal text position - * @param vTextPosition the vertical text position - * @param iconTextGap the gap between icon and text - * @param mnemonicIndex index to the mnemonic character within - * <code>text</code> - * - * @return the preferred size that is needed to render the label with - * <code>text</code> and <code>icon</code> correctly - */ - public Dimension getPreferredSize(SynthContext ctx, Font font, String text, - Icon icon, int hAlign, int vAlign, - int hTextPosition,int vTextPosition, - int iconTextGap,int mnemonicIndex) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return new Dimension(0, 0); - } - - /** - * Calculates the maximum size that is needed to render the label with - * <code>text</code> and <code>icon</code> correctly. - * - * @param ctx identifies the current region - * @param font the font to use - * @param text the label text - * @param icon the label icon - * @param hAlign the horizontal alignment - * @param vAlign the vertical alignment - * @param hTextPosition the horizontal text position - * @param vTextPosition the vertical text position - * @param iconTextGap the gap between icon and text - * @param mnemonicIndex index to the mnemonic character within - * <code>text</code> - * - * @return the maximum size that is needed to render the label with - * <code>text</code> and <code>icon</code> correctly - */ - public Dimension getMaximumSize(SynthContext ctx, Font font, String text, - Icon icon, int hAlign, int vAlign, - int hTextPosition,int vTextPosition, - int iconTextGap,int mnemonicIndex) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return new Dimension(0, 0); - } - - /** - * Returns the maximum character height of the font from the component of the - * passed in <code>context</code>. - * - * @param context identifies the current component and region - * - * @return the maximum character height of the font from the component of the - * passed in <code>context</code> - */ - public int getMaximumCharHeight(SynthContext context) - { - Component comp = context.getComponent(); - Font font = comp.getFont(); - return comp.getFontMetrics(font).getHeight(); - } - - /** - * Renders the specified <code>text</code> within the <code>bounds</code>. - * - * @param ctx identifies the component and region - * @param g the graphics context for drawing the tetx - * @param text the text to be rendered - * @param bounds the bounds within which the text should be rendered - * @param mnemonicIndex the index of the mnemonic character within - * <code>text</code> - */ - public void paintText(SynthContext ctx, Graphics g, String text, - Rectangle bounds, int mnemonicIndex) - { - // FIXME: This is very primitive and should be improved to paint the - // mnemonic char. - g.drawString(text, bounds.x, bounds.y); - } - - /** - * Renders the specified <code>text</code> at the specified location. - * - * @param ctx identifies the component and region - * @param g the graphics context for drawing the tetx - * @param text the text to be rendered - * @param x the X location where the text should be rendered - * @param y the Y location where the text should be rendered - * @param mnemonicIndex the index of the mnemonic character within - * <code>text</code> - */ - public void paintText(SynthContext ctx, Graphics g, String text, - int x, int y, int mnemonicIndex) - { - // FIXME: This is very primitive and should be improved to paint the - // mnemonic char. - g.drawString(text, x, y); - } - - public void paintText(SynthContext ctx, Graphics g, String text, Icon icon, - int hAlign, int vAlign, int hTextPosition, - int vTextPosition, int iconTextGap, int mnemonicIndex, - int textOffset) - throws NotImplementedException - { - // FIXME: Implement this correctly. - } -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java b/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java deleted file mode 100644 index ac24dd4..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthLookAndFeel.java +++ /dev/null @@ -1,279 +0,0 @@ -/* SynthLookAndFeel.java -- A skinnable Swing look and feel - Copyright (C) 2006 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.plaf.synth; - -import gnu.classpath.NotImplementedException; - -import java.awt.Component; -import java.io.InputStream; -import java.text.ParseException; - -import javax.swing.JComponent; -import javax.swing.UIDefaults; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicLookAndFeel; - - -/** - * A look and feel that can be customized either by providing a file to - * {@link #load} or by setting a {@link SynthStyleFactory} using - * {@link #setStyleFactory}. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public class SynthLookAndFeel - extends BasicLookAndFeel -{ - - /** - * The style factory that will be used by the UI classes to load their - * style sets from. - */ - private static SynthStyleFactory styleFactory; - - /** - * Creates a new instance of <code>SynthLookAndFeel</code>. In order to use - * the Synth look and feel you either need to call {@link #load} to load a - * set of styles from an XML file, or you need to call - * {@link #setStyleFactory} to provide your own style factory. - */ - public SynthLookAndFeel() - { - // FIXME: What to do here, if anything? - } - - /** - * Sets the style factory that the UI classes of Synth will use to load their - * sets of styles. - * - * @param sf the style factory to set - */ - public static void setStyleFactory(SynthStyleFactory sf) - { - styleFactory = sf; - } - - /** - * Returns the current style factory that the UI classes of Synth will use to - * load their sets of styles. - * - * @return the current style factory - */ - public static SynthStyleFactory getStyleFactory() - { - return styleFactory; - } - - /** - * Returns the style for the specified component and region. - * - * @param c the component for which to return the style - * @param r the region of the component for which to return the style - * - * @return the style for the specified component and region - */ - public static SynthStyle getStyle(JComponent c, Region r) - { - return getStyleFactory().getStyle(c, r); - } - - /** - * Updates all style information of the component and it's children. - * - * @param c the componenent for which to update the style - */ - public static void updateStyles(Component c) - throws NotImplementedException - { - // FIXME: Implement this properly. - } - - /** - * Returns the region for a given Swing component. - * - * @param c the Swing component for which to fetch the region - * - * @return the region for a given Swing component - */ - public static Region getRegion(JComponent c) - throws NotImplementedException - { - // FIXME: This can be implemented as soon as we have the component UI - // classes in place, since this region will be matched via the UI classes. - return null; - } - - /** - * Creates the Synth look and feel component UI instance for the given - * component. - * - * @param c the component for which to create a UI instance - * - * @return the Synth look and feel component UI instance for the given - * component - */ - public static ComponentUI createUI(JComponent c) - throws NotImplementedException - { - // FIXME: This can be implemented as soon as we have the component UI - // classes in place. - return null; - } - - /** - * Initializes this look and feel. - */ - public void initialize() - throws NotImplementedException - { - super.initialize(); - // TODO: Implement at least the following here: - // if (styleFactory != null) - // styleFactory = new DefaultStyleFactory(); - } - - /** - * Uninitializes the look and feel. - */ - public void uninitialize() - throws NotImplementedException - { - super.uninitialize(); - // TODO: What to do here? - } - - /** - * Returns the UI defaults of this look and feel. - * - * @return the UI defaults of this look and feel - */ - public UIDefaults getDefaults() - throws NotImplementedException - { - // FIXME: This is certainly wrong. The defaults should be fetched/merged - // from the file from which the l&f is loaded. - return super.getDefaults(); - } - - /** - * FIXME: DOCUMENT ME! - * - * @return FIXME - */ - public boolean shouldUpdateStyleOnAncestorChanged() - throws NotImplementedException - { - return false; - } - - /** - * Loads a set of {@link SynthStyle}s that are used for the look and feel of - * the components. The <code>resourceBase</code> parameter is used to resolve - * references against, like icons and other files. - * - * @param in the input stream from where to load the styles - * @param resourceBase the base against which references are resolved. - * - * @throws ParseException if the input stream cannot be parsed - * @throws IllegalArgumentException if one of the parameters is - * <code>null</code> - */ - public void load(InputStream in, Class<?> resourceBase) - throws ParseException, IllegalArgumentException, NotImplementedException - { - // FIXME: Implement this correctly. - } - - /** - * Returns a textual description of the Synth look and feel. This returns - * "Synth look and feel". - * - * @return a textual description of the Synth look and feel - */ - public String getDescription() - { - return "Synth look and feel"; - } - - /** - * Returns the ID of the Synth look and feel. This returns "Synth". - * - * @return the ID of the Synth look and feel - */ - public String getID() - { - return "Synth"; - } - - /** - * Returns the name of the Synth look and feel. This returns - * "Synth look and feel". - * - * @return the name of the Synth look and feel - */ - public String getName() - { - return "Synth look and feel"; - } - - /** - * Returns <code>false</code> since the Synth look and feel is not a native - * look and feel. - * - * @return <code>false</code> - */ - public boolean isNativeLookAndFeel() - { - return false; - } - - /** - * Returns <code>true</code> since the Synth look and feel is always a - * supported look and feel. - * - * @return <code>true</code> - */ - public boolean isSupportedLookAndFeel() - { - return true; - } - -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java b/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java deleted file mode 100644 index 6a57dad..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthPainter.java +++ /dev/null @@ -1,1999 +0,0 @@ -/* SynthPainter.java -- An abstract painter for synth components - Copyright (C) 2006 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.plaf.synth; - -import java.awt.Graphics; - -/** - * The abstract definition of a delegate that takes the responsibility of - * painting for the components. - * - * This class is defined to be abstract and all methods are no-ops. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public abstract class SynthPainter -{ - - /** - * Creates a new <code>SynthPainter</code> object. - */ - public SynthPainter() - { - // Nothing to do here. - } - - /** - * Paints the foreground of an arrow button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param dir the orientation of the arrow - */ - public void paintArrowButtonForeground(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int dir) - { - // Nothing to do here. - } - - /** - * Paints the foreground of a progress bar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param dir the orientation of the progress bar - */ - public void paintProgressBarForeground(SynthContext ctx, Graphics g, - int x, int y, int w, int h, - int dir) - { - // Nothing to do here. - } - - /** - * Paints the foreground of a separator. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param dir the orientation of the separator - */ - public void paintSeparatorForeground(SynthContext ctx, Graphics g, - int x, int y, int w, int h, - int dir) - { - // Nothing to do here. - } - - /** - * Paints the foreground of a split pane's divider. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param dir the orientation of the divider - */ - public void paintSplitPaneDividerForeground(SynthContext ctx, Graphics g, - int x, int y, int w, int h, - int dir) - { - // Nothing to do here. - } - - /** - * Paints a split pane's divider, when it is being dragged. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param dir the orientation of the divider - */ - public void paintSplitPaneDragDivider(SynthContext ctx, Graphics g, - int x, int y, int w, int h, - int dir) - { - // Nothing to do here. - } - - /** - * Paints the indicator for a tree cell which has the focus. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTreeCellFocus(SynthContext ctx, Graphics g, - int x, int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of an arrow button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintArrowButtonBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of an arrow button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintArrowButtonBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintButtonBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintButtonBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a check box. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintCheckBoxBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a check box. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintCheckBoxBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a check box menu item. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintCheckBoxMenuItemBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a check box menu item. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintCheckBoxMenuItemBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a color chooser. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintColorChooserBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a color chooser. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintColorChooserBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a combo box. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintComboBoxBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a combo box. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintComboBoxBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a desktop icon. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintDesktopIconBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a desktop icon. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintDesktopIconBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a desktop pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintDesktopPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a desktop pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintDesktopPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of an editor pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintEditorPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of an editor pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintEditorPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a file chooser. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintFileChooserBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a file chooser. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintFileChooserBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a formatted text field. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintFormattedTextFieldBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a formatted text field. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintFormattedTextFieldBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of an internal frame. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintInternalFrameBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of an internal frame. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintInternalFrameBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of an internal frame's title pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintInternalFrameTitlePaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of an internal frame's title pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintInternalFrameTitlePaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a label. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintLabelBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a label. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintLabelBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a list. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintListBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a list. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintListBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a menu. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintMenuBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a menu. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintMenuBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a menu bar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintMenuBarBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a menu bar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintMenuBarBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a menu item. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintMenuItemBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a menu item. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintMenuItemBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of an option pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintOptionPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of an option pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintOptionPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a panel. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintPanelBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a panel. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintPanelBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a password field. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintPasswordFieldBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a password field. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintPasswordFieldBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a popup menu. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintPopupMenuBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a popup menu. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintPopupMenuBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a progress bar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintProgressBarBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a progress bar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintProgressBarBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a radio button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintRadioButtonBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a radio button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintRadioButtonBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a radio button menu item. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintRadioButtonMenuItemBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a radio button menu item. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintRadioButtonMenuItemBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a root pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintRootPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a root pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintRootPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a scrollbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintScrollBarBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a scrollbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintScrollBarBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a scrollbar's thumb. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param orientation orientation of the scrollbar - */ - public void paintScrollBarThumbBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int orientation) - { - // Nothing to do here. - } - - /** - * Paints the border of a scrollbar's thumb. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param orientation orientation of the scrollbar - */ - public void paintScrollBarThumbBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int orientation) - { - // Nothing to do here. - } - - /** - * Paints the background of a scrollbar's track. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintScrollBarTrackBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a scrollbar's track. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintScrollBarTrackBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a scroll pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintScrollPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a scroll pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintScrollPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a separator. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSeparatorBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a separator. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSeparatorBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a slider. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSliderBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a slider. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSliderBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a slider's thumb. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param orientation orientation of the slider - */ - public void paintSliderThumbBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int orientation) - { - // Nothing to do here. - } - - /** - * Paints the border of a slider's thumb. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param orientation orientation of the slider - */ - public void paintSliderThumbBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int orientation) - { - // Nothing to do here. - } - - /** - * Paints the background of a slider's track. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSliderTrackBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a slider's track. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSliderTrackBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a spinner. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSpinnerBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a spinner. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSpinnerBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a split pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSplitPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a split pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSplitPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a split pane's divider. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintSplitPaneDividerBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTabbedPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTabbedPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of the contents of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTabbedPaneContentBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of the contents of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTabbedPaneContentBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of the tab area of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTabbedPaneTabAreaBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of the tab area of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTabbedPaneTabAreaBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a tab of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param index the index of the tab to paint - */ - public void paintTabbedPaneTabBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int index) - { - // Nothing to do here. - } - - /** - * Paints the border of a tab of a tabbed pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - * @param index the index of the tab to paint - */ - public void paintTabbedPaneTabBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h, int index) - { - // Nothing to do here. - } - - /** - * Paints the background of a table. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTableBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a table. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTableBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a table's header. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTableHeaderBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a table's header. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTableHeaderBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a text area. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTextAreaBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a text area. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTextAreaBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a text field. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTextFieldBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a text field. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTextFieldBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a text pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTextPaneBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a text pane. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTextPaneBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a toggle button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToggleButtonBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a toggle button. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToggleButtonBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a toolbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolBarBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a toolbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolBarBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of the contents of a toolbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolBarContentBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of the contents of a toolbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolBarContentBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of the window of a detached toolbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolBarDragWindowBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of the window of a detached toolbar. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolBarDragWindowBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a tool tip. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolTipBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a tool tip. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintToolTipBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a tree. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTreeBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a tree. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTreeBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a cell in a tree. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTreeCellBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a cell in a tree. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintTreeCellBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the background of a viewport. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintViewportBackground(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } - - /** - * Paints the border of a viewport. - * - * @param ctx the synth context identifying the component and region for - * painting - * @param g the graphics context to use for painting - * @param x the X coordinate of the area to paint - * @param y the Y coordinate of the area to paint - * @param w the width of the area to paint - * @param h the height of the area to paint - */ - public void paintViewportBorder(SynthContext ctx, Graphics g, int x, - int y, int w, int h) - { - // Nothing to do here. - } -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java b/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java deleted file mode 100644 index f5ab3df..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthStyle.java +++ /dev/null @@ -1,203 +0,0 @@ -/* SynthStyle.java -- A set of style properties - Copyright (C) 2006 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.plaf.synth; - -import gnu.classpath.NotImplementedException; - -import java.awt.Color; -import java.awt.Font; -import java.awt.Insets; - -import javax.swing.Icon; - -/** - * A set of style properties that can be installed on a component. - * - * @author Roman Kennke (kennke@aicas.com) - * - * @since 1.5 - */ -public abstract class SynthStyle -{ - - /** - * Creates a new <code>SynthStyle</code> object. - */ - public SynthStyle() - throws NotImplementedException - { - // FIXME: Implement this correctly. - } - - public SynthGraphicsUtils getGraphicsUtils(SynthContext ctx) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return null; - } - - public Color getColor(SynthContext ctx, ColorType type) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return null; - } - - protected abstract Color getColorForState(SynthContext ctx, ColorType type); - - public Font getFont(SynthContext ctx) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return null; - } - - protected abstract Font getFontForState(SynthContext ctx); - - public Insets getInsets(SynthContext ctx, Insets result) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return null; - } - - public SynthPainter getPainter(SynthContext ctx) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return null; - } - - public boolean isOpaque(SynthContext ctx) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return true; - } - - public Object get(SynthContext ctx, Object key) - throws NotImplementedException - { - // FIXME: Implement this correctly. - return null; - } - - public void installDefaults(SynthContext ctx) - throws NotImplementedException - { - // FIXME: Implement this correctly. - } - - public void uninstallDefaults(SynthContext ctx) - throws NotImplementedException - { - // FIXME: Implement this correctly. - } - - /** - * A convenience method to fetch an integer property. - * If the property's value is a {@link Number}, then the - * integer value is returned. Otherwise, the default value - * is returned. - * @param ctx the context - * @param key the key to fetch - * @param defaultValue the default value - * @return the integer value of the property, or the default value - */ - public int getInt(SynthContext ctx, Object key, int defaultValue) - { - Object obj = get(ctx, key); - if (obj instanceof Number) - return ((Number) obj).intValue(); - return defaultValue; - } - - /** - * A convenience method to fetch an integer property. - * If the property's value is a {@link Boolean}, then the - * value is returned. Otherwise, the default value - * is returned. - * @param ctx the context - * @param key the key to fetch - * @param defaultValue the default value - * @return the boolean value of the property, or the default value - */ - public boolean getBoolean(SynthContext ctx, Object key, - boolean defaultValue) - { - Object obj = get(ctx, key); - if (obj instanceof Boolean) - return ((Boolean) obj).booleanValue(); - return defaultValue; - } - - /** - * A convenience method to fetch an Icon-valued property. - * If the property's value is an {@link Icon}, then the - * value is returned. Otherwise, null is returned. - * @param ctx the context - * @param key the key to fetch - * @return the icon, or null - */ - public Icon getIcon(SynthContext ctx, Object key) - { - Object obj = get(ctx, key); - if (key instanceof Icon) - return (Icon) obj; - return null; - } - - /** - * A convenience method to fetch a String property. - * If the property's value is a {@link String}, then the - * value is returned. Otherwise, the default value - * is returned. - * @param ctx the context - * @param key the key to fetch - * @param defaultValue the default value - * @return the String value of the property, or the default value - */ - public String getString(SynthContext ctx, Object key, String defaultValue) - { - Object obj = get(ctx, key); - if (obj instanceof String) - return (String) obj; - return defaultValue; - } -} diff --git a/libjava/classpath/javax/swing/plaf/synth/SynthStyleFactory.java b/libjava/classpath/javax/swing/plaf/synth/SynthStyleFactory.java deleted file mode 100644 index 569753d..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/SynthStyleFactory.java +++ /dev/null @@ -1,64 +0,0 @@ -/* SynthStyleFactory.java -- A factory for SynthStyles - Copyright (C) 2006 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.plaf.synth; - -import javax.swing.JComponent; - -public abstract class SynthStyleFactory -{ - - /** - * Creates a new <code>SynthStyleFactory</code>. - */ - public SynthStyleFactory() - { - // Nothing to do here. - } - - /** - * Returns a {@link SynthStyle} for the specified region of the specified - * component. - * - * @param c the component for which to create a style - * @param id the region of the component - * - * @return a style for the specified region of the specified component - */ - public abstract SynthStyle getStyle(JComponent c, Region id); -} diff --git a/libjava/classpath/javax/swing/plaf/synth/package.html b/libjava/classpath/javax/swing/plaf/synth/package.html deleted file mode 100644 index b977e46..0000000 --- a/libjava/classpath/javax/swing/plaf/synth/package.html +++ /dev/null @@ -1,47 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<!-- package.html - describes classes in javax.swing.plaf.metal package. - Copyright (C) 2002, 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. --> - -<html> -<head><title>GNU Classpath - javax.swing.plaf.synth</title></head> - -<body> -<p>Provides a look and feel that can be customized by and XML file or by - providing a custom {@link SynthStyleFactory}. -</p> -</body> -</html> |