diff options
Diffstat (limited to 'libjava/classpath/java/awt/Window.java')
-rw-r--r-- | libjava/classpath/java/awt/Window.java | 1286 |
1 files changed, 0 insertions, 1286 deletions
diff --git a/libjava/classpath/java/awt/Window.java b/libjava/classpath/java/awt/Window.java deleted file mode 100644 index 986d130..0000000 --- a/libjava/classpath/java/awt/Window.java +++ /dev/null @@ -1,1286 +0,0 @@ -/* Window.java -- - Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation - -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 java.awt; - -import java.awt.event.ComponentEvent; -import java.awt.event.WindowEvent; -import java.awt.event.WindowFocusListener; -import java.awt.event.WindowListener; -import java.awt.event.WindowStateListener; -import java.awt.image.BufferStrategy; -import java.awt.peer.WindowPeer; -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; -import java.util.EventListener; -import java.util.Iterator; -import java.util.Locale; -import java.util.ResourceBundle; -import java.util.Vector; - -import javax.accessibility.Accessible; -import javax.accessibility.AccessibleContext; -import javax.accessibility.AccessibleRole; -import javax.accessibility.AccessibleState; -import javax.accessibility.AccessibleStateSet; - -/** - * This class represents a top-level window with no decorations. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Warren Levy (warrenl@cygnus.com) - */ -public class Window extends Container implements Accessible -{ - private static final long serialVersionUID = 4497834738069338734L; - - // Serialized fields, from Sun's serialization spec. - private String warningString = null; - private int windowSerializedDataVersion = 0; // FIXME - /** @since 1.2 */ - // private FocusManager focusMgr; // FIXME: what is this? - /** @since 1.2 */ - private int state = 0; - /** @since 1.4 */ - private boolean focusableWindowState = true; - /** @since 1.5 */ - private boolean alwaysOnTop = false; - - // A list of other top-level windows owned by this window. - private transient Vector ownedWindows = new Vector(); - - private transient WindowListener windowListener; - private transient WindowFocusListener windowFocusListener; - private transient WindowStateListener windowStateListener; - - private transient boolean shown; - - // This is package-private to avoid an accessor method. - transient Component windowFocusOwner; - - /* - * The number used to generate the name returned by getName. - */ - private static transient long next_window_number; - - protected class AccessibleAWTWindow extends AccessibleAWTContainer - { - private static final long serialVersionUID = 4215068635060671780L; - - public AccessibleRole getAccessibleRole() - { - return AccessibleRole.WINDOW; - } - - public AccessibleStateSet getAccessibleStateSet() - { - AccessibleStateSet states = super.getAccessibleStateSet(); - if (isActive()) - states.add(AccessibleState.ACTIVE); - return states; - } - } - - /** - * 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() - { - visible = false; - // Windows are the only Containers that default to being focus - // cycle roots. - focusCycleRoot = true; - setLayout(new BorderLayout()); - - GraphicsEnvironment g = GraphicsEnvironment.getLocalGraphicsEnvironment(); - graphicsConfig = g.getDefaultScreenDevice().getDefaultConfiguration(); - } - - Window(GraphicsConfiguration gc) - { - this(); - graphicsConfig = gc; - } - - /** - * Initializes a new instance of <code>Window</code> with the specified - * parent. The window will initially be invisible. - * - * @param owner The owning <code>Frame</code> of this window. - * - * @exception IllegalArgumentException If the owner's GraphicsConfiguration - * is not from a screen device, or if owner is null; this exception is always - * thrown when GraphicsEnvironment.isHeadless returns true. - */ - public Window(Frame owner) - { - this (owner, owner.getGraphicsConfiguration ()); - } - - /** - * Initializes a new instance of <code>Window</code> with the specified - * parent. The window will initially be invisible. - * - * @exception IllegalArgumentException If the owner's GraphicsConfiguration - * is not from a screen device, or if owner is null; this exception is always - * thrown when GraphicsEnvironment.isHeadless returns true. - * - * @since 1.2 - */ - public Window(Window owner) - { - this (owner, owner.getGraphicsConfiguration ()); - } - - /** - * Initializes a new instance of <code>Window</code> with the specified - * parent. The window will initially be invisible. - * - * @exception IllegalArgumentException If owner is null or if gc is not from a - * screen device; this exception is always thrown when - * GraphicsEnvironment.isHeadless returns true. - * - * @since 1.3 - */ - public Window(Window owner, GraphicsConfiguration gc) - { - this (); - - synchronized (getTreeLock()) - { - if (owner == null) - throw new IllegalArgumentException ("owner must not be null"); - - parent = owner; - owner.ownedWindows.add(new WeakReference(this)); - } - - // FIXME: make this text visible in the window. - SecurityManager s = System.getSecurityManager(); - if (s != null && ! s.checkTopLevelWindow(this)) - warningString = System.getProperty("awt.appletWarning"); - - if (gc != null - && gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN) - throw new IllegalArgumentException ("gc must be from a screen device"); - - if (gc == null) - graphicsConfig = GraphicsEnvironment.getLocalGraphicsEnvironment() - .getDefaultScreenDevice() - .getDefaultConfiguration(); - else - graphicsConfig = gc; - } - - /** - * Creates the native peer for this window. - */ - public void addNotify() - { - if (peer == null) - peer = getToolkit().createWindow(this); - super.addNotify(); - } - - /** - * Relays out this window's child components at their preferred size. - * - * @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(); - } - - /** - * Shows on-screen this window and any of its owned windows for whom - * isVisible returns true. - * @specnote: Deprecated starting in 1.5. - */ - @Deprecated - public void show() - { - synchronized (getTreeLock()) - { - if (peer == null) - addNotify(); - - validate(); - if (visible) - toFront(); - else - { - super.show(); - // Show visible owned windows. - Iterator e = ownedWindows.iterator(); - while (e.hasNext()) - { - Window w = (Window) (((Reference) e.next()).get()); - if (w != null) - { - if (w.isVisible()) - w.getPeer().setVisible(true); - } - else - // Remove null weak reference from ownedWindows. - // Unfortunately this can't be done in the Window's - // finalize method because there is no way to guarantee - // synchronous access to ownedWindows there. - e.remove(); - } - } - KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - manager.setGlobalFocusedWindow(this); - - if (! shown) - { - FocusTraversalPolicy policy = getFocusTraversalPolicy(); - Component initialFocusOwner = null; - - if (policy != null) - initialFocusOwner = policy.getInitialComponent(this); - - if (initialFocusOwner != null) - initialFocusOwner.requestFocusInWindow(); - - // Post WINDOW_OPENED from here. - if (windowListener != null - || (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0) - { - WindowEvent ev = new WindowEvent(this, - WindowEvent.WINDOW_OPENED); - Toolkit tk = Toolkit.getDefaultToolkit(); - tk.getSystemEventQueue().postEvent(ev); - } - shown = true; - } - } - } - - /** - * @specnote: Deprecated starting in 1.5. - */ - @Deprecated - public void hide() - { - // Hide visible owned windows. - synchronized (getTreeLock ()) - { - Iterator e = ownedWindows.iterator(); - while(e.hasNext()) - { - Window w = (Window)(((Reference) e.next()).get()); - if (w != null) - { - if (w.isVisible() && w.getPeer() != null) - w.getPeer().setVisible(false); - } - else - e.remove(); - } - } - super.hide(); - } - - /** - * Destroys any resources associated with this window. This includes - * all components in the window and all owned top-level windows. - */ - public void dispose() - { - hide(); - - synchronized (getTreeLock ()) - { - Iterator e = ownedWindows.iterator(); - while(e.hasNext()) - { - Window w = (Window)(((Reference) e.next()).get()); - if (w != null) - w.dispose(); - else - // Remove null weak reference from ownedWindows. - e.remove(); - } - - for (int i = 0; i < ncomponents; ++i) - component[i].removeNotify(); - this.removeNotify(); - - // Post WINDOW_CLOSED from here. - if (windowListener != null - || (eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0) - { - WindowEvent ev = new WindowEvent(this, - WindowEvent.WINDOW_CLOSED); - Toolkit tk = Toolkit.getDefaultToolkit(); - tk.getSystemEventQueue().postEvent(ev); - } - } - } - - /** - * Sends this window to the back so that all other windows display in - * front of it. - * - * If the window is set to be always-on-top, this will remove its - * always-on-top status. - */ - public void toBack() - { - if (peer != null) - { - if( alwaysOnTop ) - setAlwaysOnTop( false ); - ( (WindowPeer) peer ).toBack(); - } - } - - /** - * Brings this window to the front so that it displays in front of - * any other windows. - */ - public void toFront() - { - if (peer != null) - ( (WindowPeer) peer ).toFront(); - } - - /** - * Returns the toolkit used to create this window. - * - * @return The toolkit used to create this window. - * - * @specnote Unlike Component.getToolkit, this implementation always - * returns the value of Toolkit.getDefaultToolkit(). - */ - public Toolkit getToolkit() - { - return Toolkit.getDefaultToolkit(); - } - - /** - * Returns the warning string that will be displayed if this window is - * popped up by an unsecure applet or application. - * - * @return The unsecure window warning message. - */ - public final String getWarningString() - { - return warningString; - } - - /** - * Returns the locale that this window is configured for. - * - * @return The locale this window is configured for. - */ - public Locale getLocale() - { - return locale == null ? Locale.getDefault() : locale; - } - - /* - /** @since 1.2 - public InputContext getInputContext() - { - // FIXME - } - */ - - /** - * Sets the cursor for this window to the specifiec cursor. - * - * @param cursor The new cursor for this window. - */ - public void setCursor(Cursor cursor) - { - super.setCursor(cursor); - } - - public Window getOwner() - { - return (Window) parent; - } - - /** @since 1.2 */ - public Window[] getOwnedWindows() - { - Window [] trimmedList; - synchronized (getTreeLock ()) - { - // Windows with non-null weak references in ownedWindows. - Window [] validList = new Window [ownedWindows.size()]; - - Iterator e = ownedWindows.iterator(); - int numValid = 0; - while (e.hasNext()) - { - Window w = (Window)(((Reference) e.next()).get()); - if (w != null) - validList[numValid++] = w; - else - // Remove null weak reference from ownedWindows. - e.remove(); - } - - if (numValid != validList.length) - { - trimmedList = new Window [numValid]; - System.arraycopy (validList, 0, trimmedList, 0, numValid); - } - else - trimmedList = validList; - } - return trimmedList; - } - - /** - * Adds the specified listener to the list of <code>WindowListeners</code> - * that will receive events for this window. - * - * @param listener The <code>WindowListener</code> to add. - */ - public synchronized void addWindowListener(WindowListener listener) - { - if (listener != null) - { - newEventsOnly = true; - windowListener = AWTEventMulticaster.add(windowListener, listener); - } - } - - /** - * Removes the specified listener from the list of - * <code>WindowListeners</code> that will receive events for this window. - * - * @param listener The <code>WindowListener</code> to remove. - */ - public synchronized void removeWindowListener(WindowListener listener) - { - windowListener = AWTEventMulticaster.remove(windowListener, listener); - } - - /** - * Returns an array of all the window listeners registered on this window. - * - * @since 1.4 - */ - public synchronized WindowListener[] getWindowListeners() - { - return (WindowListener[]) - AWTEventMulticaster.getListeners(windowListener, - WindowListener.class); - } - - /** - * Returns an array of all the window focus listeners registered on this - * window. - * - * @since 1.4 - */ - public synchronized WindowFocusListener[] getWindowFocusListeners() - { - return (WindowFocusListener[]) - AWTEventMulticaster.getListeners(windowFocusListener, - WindowFocusListener.class); - } - - /** - * Returns an array of all the window state listeners registered on this - * window. - * - * @since 1.4 - */ - public synchronized WindowStateListener[] getWindowStateListeners() - { - return (WindowStateListener[]) - AWTEventMulticaster.getListeners(windowStateListener, - WindowStateListener.class); - } - - /** - * Adds the specified listener to this window. - */ - public void addWindowFocusListener (WindowFocusListener wfl) - { - if (wfl != null) - { - newEventsOnly = true; - windowFocusListener = AWTEventMulticaster.add (windowFocusListener, - wfl); - } - } - - /** - * Adds the specified listener to this window. - * - * @since 1.4 - */ - public void addWindowStateListener (WindowStateListener wsl) - { - if (wsl != null) - { - newEventsOnly = true; - windowStateListener = AWTEventMulticaster.add (windowStateListener, - wsl); - } - } - - /** - * Removes the specified listener from this window. - */ - public void removeWindowFocusListener (WindowFocusListener wfl) - { - windowFocusListener = AWTEventMulticaster.remove (windowFocusListener, wfl); - } - - /** - * Removes the specified listener from this window. - * - * @since 1.4 - */ - public void removeWindowStateListener (WindowStateListener wsl) - { - windowStateListener = AWTEventMulticaster.remove (windowStateListener, wsl); - } - - /** - * Returns an array of all the objects currently registered as FooListeners - * upon this Window. FooListeners are registered using the addFooListener - * method. - * - * @exception ClassCastException If listenerType doesn't specify a class or - * interface that implements java.util.EventListener. - * - * @since 1.3 - */ - public <T extends EventListener> T[] getListeners(Class<T> listenerType) - { - if (listenerType == WindowListener.class) - return (T[]) getWindowListeners(); - return super.getListeners(listenerType); - } - - void dispatchEventImpl(AWTEvent e) - { - if (e.getID() == ComponentEvent.COMPONENT_RESIZED) - { - invalidate(); - validate(); - } - super.dispatchEventImpl(e); - } - - /** - * Processes the specified event for this window. If the event is an - * instance of <code>WindowEvent</code>, then - * <code>processWindowEvent()</code> is called to process the event, - * otherwise the superclass version of this method is invoked. - * - * @param evt The event to process. - */ - protected void processEvent(AWTEvent evt) - { - if (evt instanceof WindowEvent) - { - WindowEvent we = (WindowEvent) evt; - switch (evt.getID()) - { - case WindowEvent.WINDOW_OPENED: - case WindowEvent.WINDOW_CLOSED: - case WindowEvent.WINDOW_CLOSING: - case WindowEvent.WINDOW_ICONIFIED: - case WindowEvent.WINDOW_DEICONIFIED: - case WindowEvent.WINDOW_ACTIVATED: - case WindowEvent.WINDOW_DEACTIVATED: - processWindowEvent(we); - break; - case WindowEvent.WINDOW_GAINED_FOCUS: - case WindowEvent.WINDOW_LOST_FOCUS: - processWindowFocusEvent(we); - break; - case WindowEvent.WINDOW_STATE_CHANGED: - processWindowStateEvent(we); - break; - } - } - else - super.processEvent(evt); - } - - /** - * Dispatches this event to any listeners that are listening for - * <code>WindowEvents</code> on this window. This method only gets - * invoked if it is enabled via <code>enableEvents()</code> or if - * a listener has been added. - * - * @param evt The event to process. - */ - 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; - } - } - } - - /** - * Identifies if this window is active. The active window is a Frame or - * Dialog that has focus or owns the active window. - * - * @return true if active, else false. - * @since 1.4 - */ - public boolean isActive() - { - KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager (); - return manager.getActiveWindow() == this; - } - - /** - * Identifies if this window is focused. A window is focused if it is the - * focus owner or it contains the focus owner. - * - * @return true if focused, else false. - * @since 1.4 - */ - public boolean isFocused() - { - KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager (); - return manager.getFocusedWindow() == this; - } - - /** - * Returns the child window that has focus if this window is active. - * This method returns <code>null</code> if this window is not active - * or no children have focus. - * - * @return The component that has focus, or <code>null</code> if no - * component has focus. - */ - public Component getFocusOwner () - { - KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager (); - - Window activeWindow = manager.getActiveWindow (); - - // The currently-focused Component belongs to the active Window. - if (activeWindow == this) - return manager.getFocusOwner (); - else - return null; - } - - /** - * Returns the child component of this window that would receive - * focus if this window were to become focused. If the window - * already has the top-level focus, then this method returns the - * same component as getFocusOwner. If no child component has - * requested focus within the window, then the initial focus owner - * is returned. If this is a non-focusable window, this method - * returns null. - * - * @return the child component of this window that most recently had - * the focus, or <code>null</code> - * @since 1.4 - */ - public Component getMostRecentFocusOwner () - { - return windowFocusOwner; - } - - /** - * Set the focus owner for this window. This method is used to - * remember which component was focused when this window lost - * top-level focus, so that when it regains top-level focus the same - * child component can be refocused. - * - * @param windowFocusOwner the component in this window that owns - * the focus. - */ - void setFocusOwner (Component windowFocusOwner) - { - this.windowFocusOwner = windowFocusOwner; - } - - /** - * Post a Java 1.0 event to the event queue. - * - * @param e The event to post. - * - * @deprecated - */ - public boolean postEvent(Event e) - { - return handleEvent (e); - } - - /** - * Tests whether or not this window is visible on the screen. - * - * In contrast to the normal behaviour of Container, which is that - * a container is showing if its parent is visible and showing, a Window - * is even showing, if its parent (i.e. an invisible Frame) is not showing. - * - * @return <code>true</code> if this window is visible, <code>false</code> - * otherwise. - */ - public boolean isShowing() - { - return isVisible(); - } - - public void setLocationRelativeTo(Component c) - { - int x = 0; - int y = 0; - - if (c == null || !c.isShowing()) - { - GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - Point center = ge.getCenterPoint(); - x = center.x - (width / 2); - y = center.y - (height / 2); - } - else - { - int cWidth = c.getWidth(); - int cHeight = c.getHeight(); - Dimension screenSize = getToolkit().getScreenSize(); - - x = c.getLocationOnScreen().x; - y = c.getLocationOnScreen().y; - - // If bottom of component is cut off, window placed - // on the left or the right side of component - if ((y + cHeight) > screenSize.height) - { - // If the right side of the component is closer to the center - if ((screenSize.width / 2 - x) <= 0) - { - if ((x - width) >= 0) - x -= width; - else - x = 0; - } - else - { - if ((x + cWidth + width) <= screenSize.width) - x += cWidth; - else - x = screenSize.width - width; - } - - y = screenSize.height - height; - } - else if (cWidth > width || cHeight > height) - { - // If right side of component is cut off - if ((x + width) > screenSize.width) - x = screenSize.width - width; - // If left side of component is cut off - else if (x < 0) - x = 0; - else - x += (cWidth - width) / 2; - - y += (cHeight - height) / 2; - } - else - { - // If right side of component is cut off - if ((x + width) > screenSize.width) - x = screenSize.width - width; - // If left side of component is cut off - else if (x < 0 || (x - (width - cWidth) / 2) < 0) - x = 0; - else - x -= (width - cWidth) / 2; - - if ((y - (height - cHeight) / 2) > 0) - y -= (height - cHeight) / 2; - else - y = 0; - } - } - - setLocation(x, y); - } - - /** - * A BltBufferStrategy for windows. - */ - private class WindowBltBufferStrategy extends BltBufferStrategy - { - /** - * Creates a block transfer strategy for this window. - * - * @param numBuffers the number of buffers in this strategy - * @param accelerated true if the buffer should be accelerated, - * false otherwise - */ - WindowBltBufferStrategy(int numBuffers, boolean accelerated) - { - super(numBuffers, - new BufferCapabilities(new ImageCapabilities(accelerated), - new ImageCapabilities(accelerated), - BufferCapabilities.FlipContents.COPIED)); - } - } - - /** - * A FlipBufferStrategy for windows. - */ - private class WindowFlipBufferStrategy extends FlipBufferStrategy - { - /** - * Creates a flip buffer strategy for this window. - * - * @param numBuffers the number of buffers in this strategy - * - * @throws AWTException if the requested number of buffers is not - * supported - */ - WindowFlipBufferStrategy(int numBuffers) - throws AWTException - { - super(numBuffers, - new BufferCapabilities(new ImageCapabilities(true), - new ImageCapabilities(true), - BufferCapabilities.FlipContents.COPIED)); - } - } - - /** - * Creates a buffering strategy that manages how this window is - * repainted. This method attempts to create the optimum strategy - * based on the desired number of buffers. Hardware or software - * acceleration may be used. - * - * createBufferStrategy attempts different levels of optimization, - * but guarantees that some strategy with the requested number of - * buffers will be created even if it is not optimal. First it - * attempts to create a page flipping strategy, then an accelerated - * blitting strategy, then an unaccelerated blitting strategy. - * - * Calling this method causes any existing buffer strategy to be - * destroyed. - * - * @param numBuffers the number of buffers in this strategy - * - * @throws IllegalArgumentException if requested number of buffers - * is less than one - * @throws IllegalStateException if this window is not displayable - * - * @since 1.4 - */ - public void createBufferStrategy(int numBuffers) - { - if (numBuffers < 1) - throw new IllegalArgumentException("Window.createBufferStrategy: number" - + " of buffers is less than one"); - - if (!isDisplayable()) - throw new IllegalStateException("Window.createBufferStrategy: window is" - + " not displayable"); - - BufferStrategy newStrategy = null; - - // try a flipping strategy - try - { - newStrategy = new WindowFlipBufferStrategy(numBuffers); - } - catch (AWTException e) - { - } - - // fall back to an accelerated blitting strategy - if (newStrategy == null) - newStrategy = new WindowBltBufferStrategy(numBuffers, true); - - bufferStrategy = newStrategy; - } - - /** - * Creates a buffering strategy that manages how this window is - * repainted. This method attempts to create a strategy based on - * the specified capabilities and throws an exception if the - * requested strategy is not supported. - * - * Calling this method causes any existing buffer strategy to be - * destroyed. - * - * @param numBuffers the number of buffers in this strategy - * @param caps the requested buffering capabilities - * - * @throws AWTException if the requested capabilities are not - * supported - * @throws IllegalArgumentException if requested number of buffers - * is less than one or if caps is null - * - * @since 1.4 - */ - public void createBufferStrategy(int numBuffers, BufferCapabilities caps) - throws AWTException - { - if (numBuffers < 1) - throw new IllegalArgumentException("Window.createBufferStrategy: number" - + " of buffers is less than one"); - - if (caps == null) - throw new IllegalArgumentException("Window.createBufferStrategy:" - + " capabilities object is null"); - - // a flipping strategy was requested - if (caps.isPageFlipping()) - bufferStrategy = new WindowFlipBufferStrategy(numBuffers); - else - bufferStrategy = new WindowBltBufferStrategy(numBuffers, true); - } - - /** - * Returns the buffer strategy used by the window. - * - * @return the buffer strategy. - * @since 1.4 - */ - public BufferStrategy getBufferStrategy() - { - return bufferStrategy; - } - - /** - * @since 1.2 - * - * @deprecated replaced by Component.applyComponentOrientation. - */ - public void applyResourceBundle(ResourceBundle rb) - { - applyComponentOrientation(ComponentOrientation.getOrientation(rb)); - } - - /** - * @since 1.2 - * - * @deprecated - */ - public void applyResourceBundle(String rbName) - { - ResourceBundle rb = ResourceBundle.getBundle(rbName, Locale.getDefault(), - ClassLoader.getSystemClassLoader()); - if (rb != null) - applyResourceBundle(rb); - } - - /** - * Gets the AccessibleContext associated with this <code>Window</code>. - * The context is created, if necessary. - * - * @return the associated context - */ - public AccessibleContext getAccessibleContext() - { - /* Create the context if this is the first request */ - if (accessibleContext == null) - accessibleContext = new AccessibleAWTWindow(); - return accessibleContext; - } - - /** - * 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() - { - GraphicsConfiguration conf = graphicsConfig; - if (conf == null) - { - conf = GraphicsEnvironment.getLocalGraphicsEnvironment() - .getDefaultScreenDevice().getDefaultConfiguration(); - graphicsConfig = conf; - } - return conf; - } - - protected void processWindowFocusEvent(WindowEvent event) - { - if (windowFocusListener != null) - { - switch (event.getID ()) - { - case WindowEvent.WINDOW_GAINED_FOCUS: - windowFocusListener.windowGainedFocus (event); - break; - - case WindowEvent.WINDOW_LOST_FOCUS: - windowFocusListener.windowLostFocus (event); - break; - - default: - break; - } - } - } - - /** - * @since 1.4 - */ - protected void processWindowStateEvent(WindowEvent event) - { - if (windowStateListener != null - && event.getID () == WindowEvent.WINDOW_STATE_CHANGED) - windowStateListener.windowStateChanged (event); - } - - /** - * Returns whether this <code>Window</code> can get the focus or not. - * - * @since 1.4 - */ - public final boolean isFocusableWindow () - { - if (getFocusableWindowState () == false) - return false; - - if (this instanceof Dialog - || this instanceof Frame) - return true; - - // FIXME: Implement more possible cases for returning true. - - return false; - } - - /** - * Returns the value of the focusableWindowState property. - * - * @since 1.4 - */ - public boolean getFocusableWindowState () - { - return focusableWindowState; - } - - /** - * Sets the value of the focusableWindowState property. - * - * @since 1.4 - */ - public void setFocusableWindowState (boolean focusableWindowState) - { - this.focusableWindowState = focusableWindowState; - } - - /** - * Check whether this Container is a focus cycle root. - * Returns always <code>true</code> as Windows are the - * root of the focus cycle. - * - * @return Always <code>true</code>. - * - * @since 1.4 - */ - public final boolean isFocusCycleRoot() - { - return true; - } - - /** - * Set whether or not this Container is the root of a focus - * traversal cycle. Windows are the root of the focus cycle - * and therefore this method does nothing. - * - * @param focusCycleRoot ignored. - * - * @since 1.4 - */ - public final void setFocusCycleRoot(boolean focusCycleRoot) - { - // calls to the method are ignored - } - - /** - * Returns the root container that owns the focus cycle where this - * component resides. Windows have no ancestors and this method - * returns always <code>null</code>. - * - * @return Always <code>null</code>. - * @since 1.4 - */ - public final Container getFocusCycleRootAncestor() - { - return null; - } - - /** - * Returns whether the Windows is an always-on-top window, - * meaning whether the window can be obscured by other windows or not. - * - * @return <code>true</code> if the windows is always-on-top, - * <code>false</code> otherwise. - * @since 1.5 - */ - public final boolean isAlwaysOnTop() - { - return alwaysOnTop; - } - - /** - * Sets the always-on-top state of this window (if supported). - * - * Setting a window to always-on-top means it will not be obscured - * by any other windows (with the exception of other always-on-top - * windows). Not all platforms may support this. - * - * If an window's always-on-top status is changed to false, the window - * will remain at the front but not be anchored there. - * - * Calling toBack() on an always-on-top window will change its - * always-on-top status to false. - * - * @since 1.5 - */ - public final void setAlwaysOnTop(boolean alwaysOnTop) - { - SecurityManager sm = System.getSecurityManager(); - if (sm != null) - sm.checkPermission( new AWTPermission("setWindowAlwaysOnTop") ); - - if( this.alwaysOnTop == alwaysOnTop ) - return; - - if( alwaysOnTop ) - toFront(); - - firePropertyChange("alwaysOnTop", this.alwaysOnTop, alwaysOnTop ); - this.alwaysOnTop = alwaysOnTop; - - if (peer != null) - ( (WindowPeer) peer).updateAlwaysOnTop(); - else - System.out.println("Null peer?!"); - } - - /** - * Generate a unique name for this window. - * - * @return A unique name for this window. - */ - String generateName() - { - return "win" + getUniqueLong(); - } - - /** - * Overridden to handle WindowEvents. - * - * @return <code>true</code> when the specified event type is enabled, - * <code>false</code> otherwise - */ - boolean eventTypeEnabled(int type) - { - boolean enabled = false; - switch (type) - { - case WindowEvent.WINDOW_OPENED: - case WindowEvent.WINDOW_CLOSED: - case WindowEvent.WINDOW_CLOSING: - case WindowEvent.WINDOW_ICONIFIED: - case WindowEvent.WINDOW_DEICONIFIED: - case WindowEvent.WINDOW_ACTIVATED: - case WindowEvent.WINDOW_DEACTIVATED: - enabled = ((eventMask & AWTEvent.WINDOW_EVENT_MASK) != 0) - || windowListener != null; - break; - case WindowEvent.WINDOW_GAINED_FOCUS: - case WindowEvent.WINDOW_LOST_FOCUS: - enabled = ((eventMask & AWTEvent.WINDOW_FOCUS_EVENT_MASK) != 0) - || windowFocusListener != null; - break; - case WindowEvent.WINDOW_STATE_CHANGED: - enabled = ((eventMask & AWTEvent.WINDOW_STATE_EVENT_MASK) != 0) - || windowStateListener != null; - break; - default: - enabled = super.eventTypeEnabled(type); - } - return enabled; - } - - private static synchronized long getUniqueLong() - { - return next_window_number++; - } -} |