mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			645 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			645 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* DefaultDesktopManager.java --
 | |
|    Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath is distributed in the hope that it will be useful, but
 | |
| WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version. */
 | |
| 
 | |
| 
 | |
| package javax.swing;
 | |
| 
 | |
| import java.awt.Component;
 | |
| import java.awt.Container;
 | |
| import java.awt.Dimension;
 | |
| import java.awt.Insets;
 | |
| import java.awt.Rectangle;
 | |
| import java.beans.PropertyVetoException;
 | |
| import java.io.Serializable;
 | |
| 
 | |
| import javax.swing.JInternalFrame.JDesktopIcon;
 | |
| 
 | |
| /**
 | |
|  * The default implementation of DesktopManager for
 | |
|  * Swing. It implements the basic beaviours for JInternalFrames in arbitrary
 | |
|  * parents. The methods provided by the class are not meant to be called by
 | |
|  * the user, instead, the JInternalFrame methods will call these methods.
 | |
|  */
 | |
| public class DefaultDesktopManager implements DesktopManager, Serializable
 | |
| {
 | |
|   /** DOCUMENT ME! */
 | |
|   private static final long serialVersionUID = 4657624909838017887L;
 | |
| 
 | |
|   /** The property change event fired when the wasIcon property changes. */
 | |
|   static final String WAS_ICON_ONCE_PROPERTY = "wasIconOnce";
 | |
| 
 | |
|   /**
 | |
|    * The method of dragging used by the JDesktopPane that parents the
 | |
|    * JInternalFrame that is being dragged.
 | |
|    */
 | |
|   private int currentDragMode = 0;
 | |
| 
 | |
|   /**
 | |
|    * The cache of the bounds used to draw the outline rectangle when
 | |
|    * OUTLINE_DRAG_MODE is used.
 | |
|    */
 | |
|   private transient Rectangle dragCache = new Rectangle();
 | |
| 
 | |
|   /**
 | |
|    * A cached JDesktopPane that is stored when the JInternalFrame is initially
 | |
|    * dragged.
 | |
|    */
 | |
|   private transient Container pane;
 | |
| 
 | |
|   /**
 | |
|    * An array of Rectangles that holds the bounds of the JDesktopIcons in the
 | |
|    * JDesktopPane when looking for where to place a new icon.
 | |
|    */
 | |
|   private transient Rectangle[] iconRects;
 | |
| 
 | |
|   /**
 | |
|    * This creates a new DefaultDesktopManager object.
 | |
|    */
 | |
|   public DefaultDesktopManager()
 | |
|   {
 | |
|     // Nothing to do here.
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is not normally called since the user will typically add the
 | |
|    * JInternalFrame to a Container. If this is called, it will try to
 | |
|    * determine the parent of the JInternalFrame and remove any icon that
 | |
|    * represents this JInternalFrame and add this JInternalFrame.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to open.
 | |
|    */
 | |
|   public void openFrame(JInternalFrame frame)
 | |
|   {
 | |
|     Container c = frame.getParent();
 | |
|     if (c == null)
 | |
|       c = frame.getDesktopIcon().getParent();
 | |
|     if (c == null)
 | |
|       return;
 | |
| 
 | |
|     c.remove(frame.getDesktopIcon());
 | |
|     c.add(frame);
 | |
|     frame.setVisible(true);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method removes the JInternalFrame and JDesktopIcon (if one is
 | |
|    * present) from their parents.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to close.
 | |
|    */
 | |
|   public void closeFrame(JInternalFrame frame)
 | |
|   {
 | |
|     Container c = frame.getParent();
 | |
|     if (c != null)
 | |
|       {
 | |
|         if (frame.isIcon())
 | |
|           c.remove(frame.getDesktopIcon());
 | |
|         else
 | |
|           c.remove(frame);
 | |
|         c.repaint();
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method resizes the JInternalFrame to match its parent's bounds.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to maximize.
 | |
|    */
 | |
|   public void maximizeFrame(JInternalFrame frame)
 | |
|   {
 | |
|     // Can't maximize from iconified state.
 | |
|     // It can only return to maximized state, but that would fall under
 | |
|     // deiconify.
 | |
|     if (frame.isIcon())
 | |
|       return;
 | |
|     frame.setNormalBounds(frame.getBounds());
 | |
| 
 | |
|     Container p = frame.getParent();
 | |
|     if (p != null)
 | |
|       {
 | |
|         Rectangle pBounds = p.getBounds();
 | |
|         Insets insets = p.getInsets();
 | |
|         pBounds.width -= insets.left + insets.right;
 | |
|         pBounds.height -= insets.top + insets.bottom;
 | |
| 
 | |
|         setBoundsForFrame(frame, 0, 0, pBounds.width, pBounds.height);
 | |
|       }
 | |
|     if (p instanceof JDesktopPane)
 | |
|       ((JDesktopPane) p).setSelectedFrame(frame);
 | |
|     else
 | |
|       {
 | |
|         try
 | |
|           {
 | |
|             frame.setSelected(true);
 | |
|           }
 | |
|         catch (PropertyVetoException e)
 | |
|           {
 | |
|             // Do nothing.
 | |
|           }
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method restores the JInternalFrame's bounds to what they were
 | |
|    * previous to the setMaximize call.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to minimize.
 | |
|    */
 | |
|   public void minimizeFrame(JInternalFrame frame)
 | |
|   {
 | |
|     Rectangle normalBounds = frame.getNormalBounds();
 | |
| 
 | |
|     JDesktopPane p = frame.getDesktopPane();
 | |
|     if (p != null)
 | |
|       p.setSelectedFrame(frame);
 | |
|     else
 | |
|       {
 | |
|         try
 | |
|           {
 | |
|             frame.setSelected(true);
 | |
|           }
 | |
|         catch (PropertyVetoException e)
 | |
|           {
 | |
|             // Do nothing.
 | |
|           }
 | |
|       }
 | |
| 
 | |
|     setBoundsForFrame(frame, normalBounds.x, normalBounds.y,
 | |
|                       normalBounds.width, normalBounds.height);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method removes the JInternalFrame from its parent and adds its
 | |
|    * JDesktopIcon representation.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to iconify.
 | |
|    */
 | |
|   public void iconifyFrame(JInternalFrame frame)
 | |
|   {
 | |
|     JDesktopPane p = frame.getDesktopPane();
 | |
|     JDesktopIcon icon = frame.getDesktopIcon();
 | |
|     if (p != null && p.getSelectedFrame() == frame)
 | |
|       p.setSelectedFrame(null);
 | |
|     else
 | |
|       {
 | |
|         try
 | |
|           {
 | |
|             frame.setSelected(false);
 | |
|           }
 | |
|         catch (PropertyVetoException e)
 | |
|           {
 | |
|             // Do nothing if attempt is vetoed.
 | |
|           }
 | |
|       }
 | |
| 
 | |
|     Container c = frame.getParent();
 | |
| 
 | |
|     if (!wasIcon(frame))
 | |
|       {
 | |
|         Rectangle r = getBoundsForIconOf(frame);
 | |
|         icon.setBounds(r);
 | |
|         setWasIcon(frame, Boolean.TRUE);
 | |
|       }
 | |
| 
 | |
|     if (c != null)
 | |
|       {
 | |
|         if (icon != null)
 | |
|           {
 | |
|             c.add(icon);
 | |
|             icon.setVisible(true);
 | |
|           }
 | |
|         Rectangle b = frame.getBounds();
 | |
|         c.remove(frame);
 | |
|         c.repaint(b.x, b.y, b.width, b.height);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method removes the JInternalFrame's JDesktopIcon representation and
 | |
|    * adds the JInternalFrame back to its parent.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to deiconify.
 | |
|    */
 | |
|   public void deiconifyFrame(JInternalFrame frame)
 | |
|   {
 | |
|     JDesktopIcon icon = frame.getDesktopIcon();
 | |
|     Container c = icon.getParent();
 | |
| 
 | |
|     removeIconFor(frame);
 | |
|     c.add(frame);
 | |
|     frame.setVisible(true);
 | |
| 
 | |
|     if (!frame.isSelected())
 | |
|       {
 | |
|         JDesktopPane p = frame.getDesktopPane();
 | |
|         if (p != null)
 | |
|           p.setSelectedFrame(frame);
 | |
|         else
 | |
|           {
 | |
|             try
 | |
|               {
 | |
|                 frame.setSelected(true);
 | |
|               }
 | |
|             catch (PropertyVetoException e)
 | |
|               {
 | |
|                 // Do nothing.
 | |
|               }
 | |
|           }
 | |
|       }
 | |
| 
 | |
|     c.invalidate();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method activates the JInternalFrame by moving it to the front and
 | |
|    * selecting it.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to activate.
 | |
|    */
 | |
|   public void activateFrame(JInternalFrame frame)
 | |
|   {
 | |
|     JDesktopPane p = frame.getDesktopPane();
 | |
|     JInternalFrame active = null;
 | |
|     if (p != null)
 | |
|       active = p.getSelectedFrame();
 | |
|     if (active == null)
 | |
|       {
 | |
|         if (p != null)
 | |
|           {
 | |
|             p.setSelectedFrame(frame);
 | |
|           }
 | |
|       }
 | |
|     else if (active != frame)
 | |
|       {
 | |
|         if (active.isSelected())
 | |
|           {
 | |
|             try
 | |
|               {
 | |
|                 active.setSelected(false);
 | |
|               }
 | |
|             catch (PropertyVetoException ex)
 | |
|               {
 | |
|                 // Not allowed.
 | |
|               }
 | |
|           }
 | |
|         if (p != null)
 | |
|           {
 | |
|             p.setSelectedFrame(frame);
 | |
|           }
 | |
| 
 | |
|       }
 | |
|     frame.toFront();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is called when the JInternalFrame loses focus.
 | |
|    *
 | |
|    * @param frame The JInternalFram to deactivate.
 | |
|    */
 | |
|   public void deactivateFrame(JInternalFrame frame)
 | |
|   {
 | |
|     JDesktopPane p = frame.getDesktopPane();
 | |
|     if (p != null)
 | |
|       {
 | |
|         if (p.getSelectedFrame() == frame)
 | |
|           p.setSelectedFrame(null);
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         try
 | |
|           {
 | |
|             frame.setSelected(false);
 | |
|           }
 | |
|         catch (PropertyVetoException e)
 | |
|           {
 | |
|             // Do nothing if attempt is vetoed.
 | |
|           }
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is called to indicate that the DesktopManager should prepare
 | |
|    * to drag the JInternalFrame. Any state information needed to drag the
 | |
|    * frame will be prepared now.
 | |
|    *
 | |
|    * @param component The JComponent to drag, usually a JInternalFrame.
 | |
|    */
 | |
|   public void beginDraggingFrame(JComponent component)
 | |
|   {
 | |
|     if (component instanceof JDesktopIcon)
 | |
|       pane = ((JDesktopIcon) component).getInternalFrame().getDesktopPane();
 | |
|     else
 | |
|       pane = ((JInternalFrame) component).getDesktopPane();
 | |
|     if (pane == null)
 | |
|       return;
 | |
| 
 | |
|     dragCache = component.getBounds();
 | |
| 
 | |
|     if (! (pane instanceof JDesktopPane))
 | |
|       currentDragMode = JDesktopPane.LIVE_DRAG_MODE;
 | |
|     else
 | |
|       currentDragMode = ((JDesktopPane) pane).getDragMode();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is called to drag the JInternalFrame to a new location.
 | |
|    *
 | |
|    * @param component The JComponent to drag, usually a JInternalFrame.
 | |
|    *
 | |
|    * @param newX The new x coordinate.
 | |
|    * @param newY The new y coordinate.
 | |
|    */
 | |
|   public void dragFrame(JComponent component, int newX, int newY)
 | |
|   {
 | |
|     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
 | |
|       {
 | |
|         // FIXME: Do outline drag mode painting.
 | |
|       }
 | |
|     else
 | |
|       {
 | |
|         Rectangle b = component.getBounds();
 | |
|         if (component instanceof JDesktopIcon)
 | |
|           component.setBounds(newX, newY, b.width, b.height);
 | |
|         else
 | |
|           setBoundsForFrame((JInternalFrame) component, newX, newY, b.width,
 | |
|                             b.height);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method indicates that the dragging is done. Any state information
 | |
|    * stored by the DesktopManager can be cleared.
 | |
|    *
 | |
|    * @param component The JComponent that has finished dragging.
 | |
|    */
 | |
|   public void endDraggingFrame(JComponent component)
 | |
|   {
 | |
|     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
 | |
|       {
 | |
|         setBoundsForFrame((JInternalFrame) component, dragCache.x, dragCache.y,
 | |
|                           dragCache.width, dragCache.height);
 | |
|         pane = null;
 | |
|         dragCache = null;
 | |
|         component.repaint();
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is called to indicate that the given JComponent will be
 | |
|    * resized. Any state information necessary to resize the JComponent will
 | |
|    * be prepared now.
 | |
|    *
 | |
|    * @param component The JComponent to resize, usually a JInternalFrame.
 | |
|    * @param direction The direction to drag in (a SwingConstant).
 | |
|    */
 | |
|   public void beginResizingFrame(JComponent component, int direction)
 | |
|   {
 | |
|     pane = ((JInternalFrame) component).getDesktopPane();
 | |
|     if (pane == null)
 | |
|       return;
 | |
| 
 | |
|     dragCache = component.getBounds();
 | |
|     if (! (pane instanceof JDesktopPane))
 | |
|       currentDragMode = JDesktopPane.LIVE_DRAG_MODE;
 | |
|     else
 | |
|       currentDragMode = ((JDesktopPane) pane).getDragMode();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method resizes the give JComponent.
 | |
|    *
 | |
|    * @param component The JComponent to resize.
 | |
|    * @param newX The new x coordinate.
 | |
|    * @param newY The new y coordinate.
 | |
|    * @param newWidth The new width.
 | |
|    * @param newHeight The new height.
 | |
|    */
 | |
|   public void resizeFrame(JComponent component, int newX, int newY,
 | |
|                           int newWidth, int newHeight)
 | |
|   {
 | |
|     dragCache.setBounds(newX, newY, newWidth, newHeight);
 | |
| 
 | |
|     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
 | |
|       {
 | |
|         // FIXME: Do outline drag painting.
 | |
|       }
 | |
|     else
 | |
|       setBoundsForFrame(component, dragCache.x, dragCache.y, dragCache.width,
 | |
|                         dragCache.height);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is called to indicate that the given JComponent has finished
 | |
|    * dragging. Any state information stored by the DesktopManager can be
 | |
|    * cleared.
 | |
|    *
 | |
|    * @param component The JComponent that finished resizing.
 | |
|    */
 | |
|   public void endResizingFrame(JComponent component)
 | |
|   {
 | |
|     if (currentDragMode == JDesktopPane.OUTLINE_DRAG_MODE)
 | |
|       {
 | |
|         setBoundsForFrame((JInternalFrame) component, dragCache.x, dragCache.y,
 | |
|                           dragCache.width, dragCache.height);
 | |
|         pane = null;
 | |
|         dragCache = null;
 | |
|         component.repaint();
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method calls setBounds with the given parameters and repaints the
 | |
|    * JComponent.
 | |
|    *
 | |
|    * @param component The JComponent to set bounds for.
 | |
|    * @param newX The new x coordinate.
 | |
|    * @param newY The new y coordinate.
 | |
|    * @param newWidth The new width.
 | |
|    * @param newHeight The new height.
 | |
|    */
 | |
|   public void setBoundsForFrame(JComponent component, int newX, int newY,
 | |
|                                 int newWidth, int newHeight)
 | |
|   {
 | |
|     component.setBounds(newX, newY, newWidth, newHeight);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This is a helper method that removes the JDesktopIcon of the given
 | |
|    * JInternalFrame from the parent.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to remove an icon for.
 | |
|    */
 | |
|   protected void removeIconFor(JInternalFrame frame)
 | |
|   {
 | |
|     JDesktopIcon icon = frame.getDesktopIcon();
 | |
|     Container c = icon.getParent();
 | |
|     if (c != null && icon != null)
 | |
|       {
 | |
|         Rectangle b = icon.getBounds();
 | |
|         c.remove(icon);
 | |
|         c.repaint(b.x, b.y, b.width, b.height);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method is called by iconifyFrame to determine the bounds of the
 | |
|    * JDesktopIcon for the given JInternalFrame.
 | |
|    *
 | |
|    * @param frame The JInternalFrame to find the bounds of its JDesktopIcon
 | |
|    *        for.
 | |
|    *
 | |
|    * @return The bounds of the JDesktopIcon.
 | |
|    */
 | |
|   protected Rectangle getBoundsForIconOf(JInternalFrame frame)
 | |
|   {
 | |
|     // IconRects has no order to it.
 | |
|     // The icon _must_ be placed in the first free slot (working from
 | |
|     // the bottom left corner)
 | |
|     // The icon also must not be placed where another icon is placed
 | |
|     // (regardless whether that frame is an icon currently or not)
 | |
|     JDesktopPane desktopPane = frame.getDesktopPane();
 | |
| 
 | |
|     if (desktopPane == null)
 | |
|       return frame.getDesktopIcon().getBounds();
 | |
| 
 | |
|     Rectangle paneBounds = desktopPane.getBounds();
 | |
|     Insets insets = desktopPane.getInsets();
 | |
|     Dimension pref = frame.getDesktopIcon().getPreferredSize();
 | |
| 
 | |
|     Component[] frames = desktopPane.getComponents();
 | |
| 
 | |
|     int count = 0;
 | |
|     for (int i = 0, j = 0; i < frames.length; i++)
 | |
|       if (frames[i] instanceof JDesktopIcon
 | |
|           || frames[i] instanceof JInternalFrame
 | |
|           && ((JInternalFrame) frames[i]).getWasIcon() && frames[i] != frame)
 | |
|         count++;
 | |
|     iconRects = new Rectangle[count];
 | |
|     for (int i = 0, j = 0; i < frames.length; i++)
 | |
|       if (frames[i] instanceof JDesktopIcon)
 | |
|         iconRects[--count] = frames[i].getBounds();
 | |
|       else if (frames[i] instanceof JInternalFrame
 | |
|                && ((JInternalFrame) frames[i]).getWasIcon()
 | |
|                && frames[i] != frame)
 | |
|         iconRects[--count] = ((JInternalFrame) frames[i])
 | |
|                                                  .getDesktopIcon().getBounds();
 | |
| 
 | |
|     int startingX = insets.left;
 | |
|     int startingY = paneBounds.height - insets.bottom - pref.height;
 | |
|     Rectangle ideal = new Rectangle(startingX, startingY, pref.width,
 | |
|                                     pref.height);
 | |
|     boolean clear = true;
 | |
| 
 | |
|     while (iconRects.length > 0)
 | |
|       {
 | |
|         clear = true;
 | |
|         for (int i = 0; i < iconRects.length; i++)
 | |
|           {
 | |
|             if (iconRects[i] != null && iconRects[i].intersects(ideal))
 | |
|               {
 | |
|                 clear = false;
 | |
|                 break;
 | |
|               }
 | |
|           }
 | |
|         if (clear)
 | |
|           return ideal;
 | |
| 
 | |
|         startingX += pref.width;
 | |
|         if (startingX + pref.width > paneBounds.width - insets.right)
 | |
|           {
 | |
|             startingX = insets.left;
 | |
|             startingY -= pref.height;
 | |
|           }
 | |
|         ideal.setBounds(startingX, startingY, pref.width, pref.height);
 | |
|       }
 | |
| 
 | |
|     return ideal;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method sets the bounds of the JInternalFrame right before the
 | |
|    * maximizeFrame call.
 | |
|    *
 | |
|    * @param frame The JInternalFrame being maximized.
 | |
|    * @param rect The normal bounds.
 | |
|    */
 | |
|   protected void setPreviousBounds(JInternalFrame frame, Rectangle rect)
 | |
|   {
 | |
|     frame.setNormalBounds(rect);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns the normal bounds of the JInternalFrame from before
 | |
|    * the maximize call.
 | |
|    *
 | |
|    * @param frame The JInternalFrame that is being restored.
 | |
|    *
 | |
|    * @return The previous bounds of the JInternalFrame.
 | |
|    */
 | |
|   protected Rectangle getPreviousBounds(JInternalFrame frame)
 | |
|   {
 | |
|     return frame.getNormalBounds();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method sets the value to true if the given JInternalFrame has been
 | |
|    * iconized and the bounds of its DesktopIcon are valid.
 | |
|    *
 | |
|    * @param frame The JInternalFrame for the JDesktopIcon.
 | |
|    * @param value True if the JInternalFrame has been iconized and the bounds
 | |
|    *        of the JDesktopIcon are valid.
 | |
|    */
 | |
|   protected void setWasIcon(JInternalFrame frame, Boolean value)
 | |
|   {
 | |
|     frame.setWasIcon(value.booleanValue(), WAS_ICON_ONCE_PROPERTY);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This method returns true if the given JInternalFrame has been iconized
 | |
|    * and the bounds of its DesktopIcon are valid.
 | |
|    *
 | |
|    * @param frame The JInternalFrame for the JDesktopIcon.
 | |
|    *
 | |
|    * @return True if the given JInternalFrame has been iconized and the bounds
 | |
|    *         of its DesktopIcon are valid.
 | |
|    */
 | |
|   protected boolean wasIcon(JInternalFrame frame)
 | |
|   {
 | |
|     return frame.getWasIcon();
 | |
|   }
 | |
| }
 |