/* 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) // FIXME: This cast should NOT be required. ??? Compiler bug ??? peer = (ComponentPeer) 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 neccessary 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= 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; } }