mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			472 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			472 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Java
		
	
	
	
/* ImageIcon.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;
 | 
						|
 | 
						|
import java.awt.Component;
 | 
						|
import java.awt.Graphics;
 | 
						|
import java.awt.IllegalComponentStateException;
 | 
						|
import java.awt.Image;
 | 
						|
import java.awt.MediaTracker;
 | 
						|
import java.awt.Toolkit;
 | 
						|
import java.awt.image.ImageObserver;
 | 
						|
import java.io.Serializable;
 | 
						|
import java.net.URL;
 | 
						|
import java.util.Locale;
 | 
						|
 | 
						|
import javax.accessibility.Accessible;
 | 
						|
import javax.accessibility.AccessibleContext;
 | 
						|
import javax.accessibility.AccessibleIcon;
 | 
						|
import javax.accessibility.AccessibleRole;
 | 
						|
import javax.accessibility.AccessibleStateSet;
 | 
						|
 | 
						|
/**
 | 
						|
 * An {@link Icon} implementation that is backed by an {@link Image}.
 | 
						|
 */
 | 
						|
public class ImageIcon
 | 
						|
  implements Icon, Serializable, Accessible
 | 
						|
{
 | 
						|
  /**
 | 
						|
   * Provides the accessibility features for the <code>ImageIcon</code>
 | 
						|
   * class.
 | 
						|
   */
 | 
						|
  protected class AccessibleImageIcon
 | 
						|
    extends AccessibleContext
 | 
						|
    implements AccessibleIcon, Serializable
 | 
						|
  {
 | 
						|
    private static final long serialVersionUID = 2113430526551336564L;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a new instance of <code>AccessibleImageIcon</code>.
 | 
						|
     */
 | 
						|
    protected AccessibleImageIcon()
 | 
						|
    {
 | 
						|
      // Nothing to do here.
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible role for the <code>ImageIcon</code>.
 | 
						|
     *
 | 
						|
     * @return {@link AccessibleRole#ICON}.
 | 
						|
     */
 | 
						|
    public AccessibleRole getAccessibleRole()
 | 
						|
    {
 | 
						|
      return AccessibleRole.ICON;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible state for the <code>ImageIcon</code>.  To
 | 
						|
     * match the reference implementation, this method always returns
 | 
						|
     * <code>null</code>.
 | 
						|
     *
 | 
						|
     * @return <code>null</code>.
 | 
						|
     */
 | 
						|
    public AccessibleStateSet getAccessibleStateSet()
 | 
						|
    {
 | 
						|
      // refer to Sun's bug report 4269253
 | 
						|
      return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible parent of this object.  To match the reference
 | 
						|
     * implementation, this method always returns <code>null</code>.
 | 
						|
     *
 | 
						|
     * @return <code>null</code>.
 | 
						|
     */
 | 
						|
    public Accessible getAccessibleParent()
 | 
						|
    {
 | 
						|
      // refer to Sun's bug report 4269253
 | 
						|
      return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the index of this object in its accessible parent.  To match
 | 
						|
     * the reference implementation, this method always returns <code>-1</code>.
 | 
						|
     *
 | 
						|
     * @return <code>-1</code>.
 | 
						|
     */
 | 
						|
    public int getAccessibleIndexInParent()
 | 
						|
    {
 | 
						|
      // refer to Sun's bug report 4269253
 | 
						|
      return -1;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the number of accessible children of this component,
 | 
						|
     * which is 0, because an {@link ImageIcon} has no children.
 | 
						|
     *
 | 
						|
     * @return <code>0</code>.
 | 
						|
     */
 | 
						|
    public int getAccessibleChildrenCount()
 | 
						|
    {
 | 
						|
      return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible child at index <code>i</code>, which is
 | 
						|
     * <code>null</code> in this case because an {@link ImageIcon} has no
 | 
						|
     * children.
 | 
						|
     *
 | 
						|
     * @param i the index of the child to be fetched
 | 
						|
     *
 | 
						|
     * @return <code>null</code>.
 | 
						|
     */
 | 
						|
    public Accessible getAccessibleChild(int i)
 | 
						|
    {
 | 
						|
      return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the locale of this object.  To match the reference
 | 
						|
     * implementation, this method always returns <code>null</code>.
 | 
						|
     *
 | 
						|
     * @return <code>null</code>.
 | 
						|
     */
 | 
						|
    public Locale getLocale()
 | 
						|
      throws IllegalComponentStateException
 | 
						|
    {
 | 
						|
      // refer to Sun's bug report 4269253
 | 
						|
      return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible icon description.  This returns the
 | 
						|
     * <code>description</code> property of the underlying {@link ImageIcon}.
 | 
						|
     *
 | 
						|
     * @return The description (possibly <code>null</code>).
 | 
						|
     *
 | 
						|
     * @see #setAccessibleIconDescription(String)
 | 
						|
     */
 | 
						|
    public String getAccessibleIconDescription()
 | 
						|
    {
 | 
						|
      return getDescription();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the accessible icon description.  This sets the
 | 
						|
     * <code>description</code> property of the underlying {@link ImageIcon}.
 | 
						|
     *
 | 
						|
     * @param newDescr the description (<code>null</code> permitted).
 | 
						|
     *
 | 
						|
     * @see #getAccessibleIconDescription()
 | 
						|
     */
 | 
						|
    public void setAccessibleIconDescription(String newDescr)
 | 
						|
    {
 | 
						|
      setDescription(newDescr);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the icon height. This returns the <code>iconHeight</code>
 | 
						|
     * property of the underlying {@link ImageIcon}.
 | 
						|
     *
 | 
						|
     * @return The icon height.
 | 
						|
     */
 | 
						|
    public int getAccessibleIconHeight()
 | 
						|
    {
 | 
						|
      return getIconHeight();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the icon width. This returns the <code>iconWidth</code> property
 | 
						|
     * of the underlying {@link ImageIcon}.
 | 
						|
     *
 | 
						|
     * @return The icon width.
 | 
						|
     */
 | 
						|
    public int getAccessibleIconWidth()
 | 
						|
    {
 | 
						|
      return getIconWidth();
 | 
						|
    }
 | 
						|
  } // AccessibleIcon
 | 
						|
 | 
						|
  private static final long serialVersionUID = 532615968316031794L;
 | 
						|
 | 
						|
  /** A dummy Component that is used in the MediaTracker. */
 | 
						|
  protected static final Component component = new Component()
 | 
						|
  {
 | 
						|
    // No need to implement this.
 | 
						|
  };
 | 
						|
 | 
						|
  /** The MediaTracker used to monitor the loading of images. */
 | 
						|
  protected static final MediaTracker tracker = new MediaTracker(component);
 | 
						|
 | 
						|
  /** The ID that is used in the tracker. */
 | 
						|
  private static int id;
 | 
						|
 | 
						|
  Image image;
 | 
						|
  String description;
 | 
						|
  ImageObserver observer;
 | 
						|
 | 
						|
  /** The image loading status. */
 | 
						|
  private int loadStatus;
 | 
						|
 | 
						|
  /** The AccessibleContext of this ImageIcon. */
 | 
						|
  private AccessibleContext accessibleContext;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon without any properties set.
 | 
						|
   */
 | 
						|
  public ImageIcon()
 | 
						|
  {
 | 
						|
    // Nothing to do here.
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs an ImageIcon given a filename.  The icon's description
 | 
						|
   * is initially set to the filename itself.  A filename of "" means
 | 
						|
   * create a blank icon.
 | 
						|
   *
 | 
						|
   * @param filename name of file to load or "" for a blank icon
 | 
						|
   */
 | 
						|
  public ImageIcon(String filename)
 | 
						|
  {
 | 
						|
    this(filename, filename);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs an ImageIcon from the given filename, setting its
 | 
						|
   * description to the given description.  A filename of "" means
 | 
						|
   * create a blank icon.
 | 
						|
   *
 | 
						|
   * @param filename name of file to load or "" for a blank icon
 | 
						|
   * @param description human-readable description of this icon
 | 
						|
   */
 | 
						|
  public ImageIcon(String filename, String description)
 | 
						|
  {
 | 
						|
    this(Toolkit.getDefaultToolkit().getImage(filename), description);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon from the given byte array without any
 | 
						|
   * description set.
 | 
						|
   */
 | 
						|
  public ImageIcon(byte[] imageData)
 | 
						|
  {
 | 
						|
    this(imageData, null);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon from the given byte array and sets the given
 | 
						|
   * description.
 | 
						|
   */
 | 
						|
  public ImageIcon(byte[] imageData, String description)
 | 
						|
  {
 | 
						|
    this(Toolkit.getDefaultToolkit().createImage(imageData), description);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon from the given URL and sets the description
 | 
						|
   * to the URL String representation.
 | 
						|
   */
 | 
						|
  public ImageIcon(URL url)
 | 
						|
  {
 | 
						|
    this(url, url.toString());
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon from the given URL and sets the given
 | 
						|
   * description.
 | 
						|
   */
 | 
						|
  public ImageIcon(URL url, String description)
 | 
						|
  {
 | 
						|
    this(Toolkit.getDefaultToolkit().getImage(url), description);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon from the given Image without any description
 | 
						|
   * set.
 | 
						|
   */
 | 
						|
  public ImageIcon(Image image)
 | 
						|
  {
 | 
						|
    this(image, null);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Creates an ImageIcon from the given Image and sets the given
 | 
						|
   * description.
 | 
						|
   */
 | 
						|
  public ImageIcon(Image image, String description)
 | 
						|
  {
 | 
						|
    setImage(image);
 | 
						|
    setDescription(description);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the ImageObserver that is used for all Image
 | 
						|
   * operations. Defaults to null when not explicitly set.
 | 
						|
   */
 | 
						|
  public ImageObserver getImageObserver()
 | 
						|
  {
 | 
						|
    return observer;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets the ImageObserver that will be used for all Image
 | 
						|
   * operations. Can be set to null (the default) when no observer is
 | 
						|
   * needed.
 | 
						|
   */
 | 
						|
  public void setImageObserver(ImageObserver newObserver)
 | 
						|
  {
 | 
						|
    observer = newObserver;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the backing Image for this ImageIcon. Might be set to
 | 
						|
   * null in which case no image is shown.
 | 
						|
   */
 | 
						|
  public Image getImage()
 | 
						|
  {
 | 
						|
    return image;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Explicitly sets the backing Image for this ImageIcon. Will call
 | 
						|
   * loadImage() to make sure that the Image is completely loaded
 | 
						|
   * before returning.
 | 
						|
   */
 | 
						|
  public void setImage(Image image)
 | 
						|
  {
 | 
						|
    loadImage(image);
 | 
						|
    this.image = image;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a human readable description for this ImageIcon or null
 | 
						|
   * when no description is set or available.
 | 
						|
   */
 | 
						|
  public String getDescription()
 | 
						|
  {
 | 
						|
    return description;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Sets a human readable description for this ImageIcon. Can be set
 | 
						|
   * to null when no description is available.
 | 
						|
   */
 | 
						|
  public void setDescription(String description)
 | 
						|
  {
 | 
						|
    this.description = description;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the the height of the backing Image, or -1 if the backing
 | 
						|
   * Image is null. The getHeight() method of the Image will be called
 | 
						|
   * with the set observer of this ImageIcon.
 | 
						|
   */
 | 
						|
  public int getIconHeight()
 | 
						|
  {
 | 
						|
    if (image == null)
 | 
						|
      return -1;
 | 
						|
 | 
						|
    return image.getHeight(observer);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the the width of the backing Image, or -1 if the backing
 | 
						|
   * Image is null. The getWidth() method of the Image will be called
 | 
						|
   * with the set observer of this ImageIcon.
 | 
						|
   */
 | 
						|
  public int getIconWidth()
 | 
						|
  {
 | 
						|
    if (image == null)
 | 
						|
      return -1;
 | 
						|
 | 
						|
    return image.getWidth(observer);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Calls <code>g.drawImage()</code> on the backing Image using the
 | 
						|
   * set observer of this ImageIcon. If the set observer is null, the
 | 
						|
   * given Component is used as observer.
 | 
						|
   */
 | 
						|
  public void paintIcon(Component c, Graphics g, int x, int y)
 | 
						|
  {
 | 
						|
    g.drawImage(image, x, y, observer != null ? observer : c);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Loads the image and blocks until the loading operation is finished.
 | 
						|
   *
 | 
						|
   * @param image the image to be loaded
 | 
						|
   */
 | 
						|
  protected void loadImage(Image image)
 | 
						|
  {
 | 
						|
    try
 | 
						|
      {
 | 
						|
        tracker.addImage(image, id);
 | 
						|
        id++;
 | 
						|
        tracker.waitForID(id - 1);
 | 
						|
      }
 | 
						|
    catch (InterruptedException ex)
 | 
						|
      {
 | 
						|
        // Ignore this for now.
 | 
						|
      }
 | 
						|
    finally
 | 
						|
      {
 | 
						|
        loadStatus = tracker.statusID(id - 1, false);
 | 
						|
        tracker.removeImage(image, id - 1);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the load status of the icon image.
 | 
						|
   *
 | 
						|
   * @return the load status of the icon image
 | 
						|
   *
 | 
						|
   * @see MediaTracker#COMPLETE
 | 
						|
   * @see MediaTracker#ABORTED
 | 
						|
   * @see MediaTracker#ERRORED
 | 
						|
   */
 | 
						|
  public int getImageLoadStatus()
 | 
						|
  {
 | 
						|
    return loadStatus;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns the object that provides accessibility features for this
 | 
						|
   * <code>ImageIcon</code> instance.
 | 
						|
   *
 | 
						|
   * @return The accessible context (an instance of
 | 
						|
   *     {@link AccessibleImageIcon}).
 | 
						|
   */
 | 
						|
  public AccessibleContext getAccessibleContext()
 | 
						|
  {
 | 
						|
    if (accessibleContext == null)
 | 
						|
      accessibleContext = new AccessibleImageIcon();
 | 
						|
    return accessibleContext;
 | 
						|
  }
 | 
						|
}
 |