mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			366 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			366 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* Copyright (C) 1999, 2000  Free Software Foundation
 | |
| 
 | |
|    This file is part of libgcj.
 | |
| 
 | |
| This software is copyrighted work licensed under the terms of the
 | |
| Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 | |
| details.  */
 | |
| 
 | |
| package java.awt;
 | |
| import java.awt.event.WindowEvent;
 | |
| import java.awt.event.WindowListener;
 | |
| import java.awt.peer.WindowPeer;
 | |
| import java.awt.peer.ComponentPeer;
 | |
| import java.util.EventListener;
 | |
| import java.util.Locale;
 | |
| import java.util.ResourceBundle;
 | |
| 
 | |
| /* Status: partially implemented. */
 | |
| 
 | |
| public class Window extends Container
 | |
| {
 | |
|   // Serialized fields, from Sun's serialization spec.
 | |
|   // private FocusManager focusMgr;  // FIXME: what is this?  
 | |
|   private String warningString = null;
 | |
|   private int state = 0;
 | |
|   private int windowSerializedDataVersion = 0; // FIXME
 | |
| 
 | |
|   private transient WindowListener windowListener;
 | |
|   private transient GraphicsConfiguration graphicsConfiguration;
 | |
| 
 | |
|   /** 
 | |
|    * This (package access) constructor is used by subclasses that want
 | |
|    * to build windows that do not have parents.  Eg. toplevel
 | |
|    * application frames.  Subclasses cannot call super(null), since
 | |
|    * null is an illegal argument.
 | |
|    */
 | |
|   Window()
 | |
|   {
 | |
|     setVisible(false);
 | |
|     setLayout((LayoutManager) new BorderLayout());
 | |
|   }
 | |
| 
 | |
|   Window(GraphicsConfiguration gc)
 | |
|   {
 | |
|     this();
 | |
|     graphicsConfiguration = gc;
 | |
|   }
 | |
|     
 | |
|   public Window(Frame owner)
 | |
|   {
 | |
|     this((Window) owner);
 | |
|   }
 | |
| 
 | |
|   /** @since 1.2 */
 | |
|   public Window(Window owner)
 | |
|   {
 | |
|     this();
 | |
|     if (owner == null)
 | |
|       throw new IllegalArgumentException("owner must not be null");
 | |
|     
 | |
|     this.parent = owner;
 | |
| 
 | |
|     // FIXME: add to owner's "owned window" list
 | |
|     //owner.owned.add(this); // this should be a weak reference
 | |
|   }
 | |
|   
 | |
|   /** @since 1.3 */
 | |
|   public Window(Window owner, GraphicsConfiguration gc)
 | |
|   {
 | |
|     this(owner);
 | |
| 
 | |
|     /*  FIXME: Security check
 | |
|     SecurityManager.checkTopLevelWindow(...)
 | |
| 
 | |
|     if (gc != null
 | |
|         && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN)
 | |
|       throw new IllegalArgumentException ("gc must be from a screen device");
 | |
| 
 | |
|     if (gc == null)
 | |
|       graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment()
 | |
| 			     .getDefaultScreenDevice()
 | |
| 			     .getDefaultConfiguration();
 | |
|     else
 | |
|     */    
 | |
|     graphicsConfiguration = gc;
 | |
|   }
 | |
| 
 | |
|   GraphicsConfiguration getGraphicsConfigurationImpl()
 | |
|   {
 | |
|     if (graphicsConfiguration != null)
 | |
| 	return graphicsConfiguration;
 | |
| 
 | |
|     return super.getGraphicsConfigurationImpl();
 | |
|   }
 | |
| 
 | |
|   protected void finalize() throws Throwable
 | |
|   {
 | |
|     // FIXME: remove from owner's "owned window" list (Weak References)
 | |
|     super.finalize();
 | |
|   }
 | |
| 
 | |
|   public void addNotify()
 | |
|   {
 | |
|     if (peer == null)
 | |
|       peer = getToolkit ().createWindow (this);
 | |
|     super.addNotify ();
 | |
|   }
 | |
| 
 | |
|   /** @specnote pack() doesn't appear to be called internally by show(), so
 | |
|                 we duplicate some of the functionality. */
 | |
|   public void pack()
 | |
|   {
 | |
|     if (parent != null
 | |
|         && !parent.isDisplayable())
 | |
|       parent.addNotify();
 | |
|     if (peer == null)
 | |
|       addNotify();
 | |
| 
 | |
|     setSize(getPreferredSize());
 | |
|     
 | |
|     validate();
 | |
|   }
 | |
| 
 | |
|   public void show ()
 | |
|   {
 | |
|     if (peer == null)
 | |
|       addNotify();
 | |
|     validate ();
 | |
| 
 | |
|     if (isVisible())
 | |
|       {
 | |
| 	this.toFront();
 | |
| 	return;
 | |
|       }
 | |
|   
 | |
|     if (parent != null
 | |
|         && !parent.isDisplayable())
 | |
|       parent.addNotify();
 | |
|     if (peer == null)
 | |
|       addNotify ();    
 | |
| 
 | |
|     validate ();
 | |
|     
 | |
|     super.show ();
 | |
| 
 | |
|     // FIXME: Is this call necessary or do we assume the peer takes care of 
 | |
|     // it?
 | |
|     // this.toFront();
 | |
|   }
 | |
| 
 | |
|   public void hide()
 | |
|   {
 | |
|     // FIXME: call hide() on amy "owned" children here.
 | |
|     super.hide();
 | |
|   }
 | |
| 
 | |
|   public void dispose()
 | |
|   {
 | |
|     hide();
 | |
| 
 | |
|     Window[] list = getOwnedWindows();
 | |
|     for (int i=0; i<list.length; i++)
 | |
|       list[i].dispose();
 | |
| 
 | |
|     for (int i = 0; i < ncomponents; ++i)
 | |
|       component[i].removeNotify();
 | |
|     this.removeNotify();
 | |
|   }
 | |
| 
 | |
|   public void toBack ()
 | |
|   {
 | |
|     if (peer != null)
 | |
|       {
 | |
| 	WindowPeer wp = (WindowPeer) peer;
 | |
| 	wp.toBack ();
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   public void toFront ()
 | |
|   {
 | |
|     if (peer != null)
 | |
|       {
 | |
| 	WindowPeer wp = (WindowPeer) peer;
 | |
| 	wp.toFront ();
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   /** @specnote Unlike Component.getToolkit, this implementation always 
 | |
|                 returns the value of Toolkit.getDefaultToolkit(). */
 | |
|   public Toolkit getToolkit()
 | |
|   {
 | |
|     return Toolkit.getDefaultToolkit ();    
 | |
|   }
 | |
| 
 | |
|   public final String getWarningString()
 | |
|   {
 | |
|     boolean secure = true;
 | |
|     /* boolean secure = SecurityManager.checkTopLevelWindow(...) */
 | |
| 
 | |
|     if (!secure)
 | |
|       {
 | |
|         if (warningString != null)
 | |
| 	  return warningString;
 | |
| 	else
 | |
| 	  {
 | |
| 	    String warning = System.getProperty("awt.appletWarning");
 | |
| 	    return warning;
 | |
| 	  }
 | |
|       }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   public Locale getLocale ()
 | |
|   {
 | |
|     return locale == null ? Locale.getDefault () : locale;
 | |
|   }
 | |
| 
 | |
|   /*
 | |
|   /** @since 1.2
 | |
|   public InputContext getInputContext()
 | |
|   {
 | |
|     // FIXME
 | |
|   }
 | |
|   */
 | |
| 
 | |
|   public void setCursor(Cursor cursor)
 | |
|   {
 | |
|     // FIXME: why different from Component.setCursor() ?
 | |
|     super.setCursor(cursor);
 | |
|   }
 | |
| 
 | |
|   public Window getOwner()
 | |
|   {
 | |
|     return (Window) parent;
 | |
|   }
 | |
| 
 | |
|   /** @since 1.2 */
 | |
|   public Window[] getOwnedWindows()
 | |
|   {
 | |
|     // FIXME: return array containing all the windows this window currently 
 | |
|     // owns.
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   public synchronized void addWindowListener (WindowListener listener)
 | |
|   {
 | |
|     windowListener = AWTEventMulticaster.add (windowListener, listener);
 | |
|   }
 | |
| 
 | |
|   public synchronized void removeWindowListener (WindowListener listener)
 | |
|   {
 | |
|     windowListener = AWTEventMulticaster.remove (windowListener, listener);
 | |
|   }
 | |
| 
 | |
|   /** @since 1.3 */
 | |
|   public EventListener[] getListeners(Class listenerType)
 | |
|   {
 | |
|     if (listenerType == WindowListener.class)
 | |
|       return getListenersImpl(listenerType, windowListener);
 | |
|     else return super.getListeners(listenerType);
 | |
|   }
 | |
| 
 | |
|   void dispatchEventImpl(AWTEvent e)
 | |
|   {
 | |
|     // Make use of event id's in order to avoid multiple instanceof tests.
 | |
|     if (e.id <= WindowEvent.WINDOW_LAST 
 | |
|         && e.id >= WindowEvent.WINDOW_FIRST
 | |
|         && (windowListener != null 
 | |
| 	    || (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0))
 | |
|       processEvent(e);
 | |
|     else
 | |
|       super.dispatchEventImpl(e);
 | |
|   }
 | |
| 
 | |
|   protected void processEvent (AWTEvent evt)
 | |
|   {
 | |
|     if (evt instanceof WindowEvent)
 | |
|       processWindowEvent ((WindowEvent) evt);
 | |
|     else
 | |
|       super.processEvent (evt);
 | |
|   }
 | |
| 
 | |
|   protected void processWindowEvent (WindowEvent evt)
 | |
|   {
 | |
|     if (windowListener != null)
 | |
|       {
 | |
| 	switch (evt.getID ())
 | |
| 	  {
 | |
| 	  case WindowEvent.WINDOW_ACTIVATED:
 | |
| 	    windowListener.windowActivated (evt);
 | |
| 	    break;
 | |
| 	  case WindowEvent.WINDOW_CLOSED:
 | |
| 	    windowListener.windowClosed (evt);
 | |
| 	    break;
 | |
| 	  case WindowEvent.WINDOW_CLOSING:
 | |
| 	    windowListener.windowClosing (evt);
 | |
| 	    break;
 | |
| 	  case WindowEvent.WINDOW_DEACTIVATED:
 | |
| 	    windowListener.windowDeactivated (evt);
 | |
| 	    break;
 | |
| 	  case WindowEvent.WINDOW_DEICONIFIED:
 | |
| 	    windowListener.windowDeiconified (evt);
 | |
| 	    break;
 | |
| 	  case WindowEvent.WINDOW_ICONIFIED:
 | |
| 	    windowListener.windowIconified (evt);
 | |
| 	    break;
 | |
| 	  case WindowEvent.WINDOW_OPENED:
 | |
| 	    windowListener.windowOpened (evt);
 | |
| 	    break;
 | |
| 	  }
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   public Component getFocusOwner()
 | |
|   {
 | |
|     // FIXME
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   public boolean postEvent(Event e)
 | |
|   {
 | |
|     // FIXME
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   public boolean isShowing()
 | |
|   {
 | |
|     // FIXME: Also check if window is within the boundary of the screen?
 | |
|     return isVisible();
 | |
|   }
 | |
| 
 | |
|   /** @since 1.2 */
 | |
|   public void applyResourceBundle(ResourceBundle rb)
 | |
|   {
 | |
|     // FIXME
 | |
|   }
 | |
| 
 | |
|   /** @since 1.2 */
 | |
|   public void applyResourceBundle(String rbName)
 | |
|   {
 | |
|     ResourceBundle rb = ResourceBundle.getBundle(rbName);
 | |
|     if (rb != null)
 | |
|       applyResourceBundle(rb);    
 | |
|   }
 | |
| 
 | |
|   /*
 | |
|   public AccessibleContext getAccessibleContext()
 | |
|   {
 | |
|     // FIXME
 | |
|   }
 | |
|   */
 | |
| 
 | |
|   /** 
 | |
|    * Get graphics configuration.  The implementation for Window will
 | |
|    * not ask any parent containers, since Window is a toplevel
 | |
|    * window and not actually embedded in the parent component.
 | |
|    */
 | |
|   public GraphicsConfiguration getGraphicsConfiguration()
 | |
|   {
 | |
|     if (graphicsConfiguration != null) return graphicsConfiguration;
 | |
|     if (peer != null) return peer.getGraphicsConfiguration();
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
| }
 |