aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/Frame.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/Frame.java')
-rw-r--r--libjava/java/awt/Frame.java571
1 files changed, 440 insertions, 131 deletions
diff --git a/libjava/java/awt/Frame.java b/libjava/java/awt/Frame.java
index 22497f7..04f3f15 100644
--- a/libjava/java/awt/Frame.java
+++ b/libjava/java/awt/Frame.java
@@ -1,150 +1,459 @@
-/* Copyright (C) 1999, 2000 Free Software Foundation
+/* Frame.java -- AWT toplevel window
+ Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
- This file is part of libjava.
+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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
-This software is copyrighted work licensed under the terms of the
-Libjava License. Please consult the file "LIBJAVA_LICENSE" for
-details. */
package java.awt;
+
import java.awt.peer.FramePeer;
+import java.awt.peer.WindowPeer;
+import java.awt.peer.ContainerPeer;
+import java.awt.peer.ComponentPeer;
+import java.io.Serializable;
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * This class is a top-level window with a title bar and window
+ * decorations.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
+public class Frame extends Window implements MenuContainer, Serializable
+{
+
+/*
+ * Static Variables
+ */
+
+/**
+ * Constant for a cross-hair cursor.
+ * @deprecated Use <code>Cursor.CROSSHAIR_CURSOR</code> instead.
+ */
+public static final int CROSSHAIR_CURSOR = Cursor.CROSSHAIR_CURSOR;
+
+/**
+ * Constant for a cursor over a text field.
+ * @deprecated Use <code>Cursor.TEXT_CURSOR</code> instead.
+ */
+public static final int TEXT_CURSOR = Cursor.TEXT_CURSOR;
+
+/**
+ * Constant for a cursor to display while waiting for an action to complete.
+ * @deprecated Use <code>Cursor.WAIT_CURSOR</code>.
+ */
+public static final int WAIT_CURSOR = Cursor.WAIT_CURSOR;
+
+/**
+ * Cursor used over SW corner of window decorations.
+ * @deprecated Use <code>Cursor.SW_RESIZE_CURSOR</code> instead.
+ */
+public static final int SW_RESIZE_CURSOR = Cursor.SW_RESIZE_CURSOR;
+
+/**
+ * Cursor used over SE corner of window decorations.
+ * @deprecated Use <code>Cursor.SE_RESIZE_CURSOR</code> instead.
+ */
+public static final int SE_RESIZE_CURSOR = Cursor.SE_RESIZE_CURSOR;
+
+/**
+ * Cursor used over NW corner of window decorations.
+ * @deprecated Use <code>Cursor.NW_RESIZE_CURSOR</code> instead.
+ */
+public static final int NW_RESIZE_CURSOR = Cursor.NW_RESIZE_CURSOR;
+
+/**
+ * Cursor used over NE corner of window decorations.
+ * @deprecated Use <code>Cursor.NE_RESIZE_CURSOR</code> instead.
+ */
+public static final int NE_RESIZE_CURSOR = Cursor.NE_RESIZE_CURSOR;
+
+/**
+ * Cursor used over N edge of window decorations.
+ * @deprecated Use <code>Cursor.N_RESIZE_CURSOR</code> instead.
+ */
+public static final int N_RESIZE_CURSOR = Cursor.N_RESIZE_CURSOR;
+
+/**
+ * Cursor used over S edge of window decorations.
+ * @deprecated Use <code>Cursor.S_RESIZE_CURSOR</code> instead.
+ */
+public static final int S_RESIZE_CURSOR = Cursor.S_RESIZE_CURSOR;
+
+/**
+ * Cursor used over E edge of window decorations.
+ * @deprecated Use <code>Cursor.E_RESIZE_CURSOR</code> instead.
+ */
+public static final int E_RESIZE_CURSOR = Cursor.E_RESIZE_CURSOR;
+
+/**
+ * Cursor used over W edge of window decorations.
+ * @deprecated Use <code>Cursor.W_RESIZE_CURSOR</code> instead.
+ */
+public static final int W_RESIZE_CURSOR = Cursor.W_RESIZE_CURSOR;
+
+/**
+ * Constant for a hand cursor.
+ * @deprecated Use <code>Cursor.HAND_CURSOR</code> instead.
+ */
+public static final int HAND_CURSOR = Cursor.HAND_CURSOR;
+
+/**
+ * Constant for a cursor used during window move operations.
+ * @deprecated Use <code>Cursor.MOVE_CURSOR</code> instead.
+ */
+public static final int MOVE_CURSOR = Cursor.MOVE_CURSOR;
+
+// Serialization version constant
+private static final long serialVersionUID = 2673458971256075116L;
+
+/*************************************************************************/
+
+/*
+ * Instance Variables
+ */
+
+/**
+ * @serial The version of the class data being serialized
+ * // FIXME: what is this value?
+ */
+private int frameSerializedDataVersion;
+
+/**
+ * @serial Image used as the icon when this frame is minimized.
+ */
+private Image icon;
-/* A very incomplete placeholder. */
+/**
+ * @serial Constant used by the JDK Motif peer set. Not used in
+ * this implementation.
+ */
+private boolean mbManagement;
-public class Frame extends Window implements MenuContainer
+/**
+ * @serial The menu bar for this frame.
+ */
+//private MenuBar menuBar = new MenuBar();
+private MenuBar menuBar;
+
+/**
+ * @serial A list of other top-level windows owned by this window.
+ */
+Vector ownedWindows = new Vector();
+
+/**
+ * @serial Indicates whether or not this frame is resizable.
+ */
+private boolean resizable = true;
+
+/**
+ * @serial The state of this frame.
+ * // FIXME: What are the values here?
+ */
+private int state;
+
+/**
+ * @serial The title of the frame.
+ */
+private String title = "";
+
+/*************************************************************************/
+
+/*
+ * Constructors
+ */
+
+/**
+ * Initializes a new instance of <code>Frame</code> that is not visible
+ * and has no title.
+ */
+public
+Frame()
+{
+ this("");
+}
+
+/*************************************************************************/
+
+/**
+ * Initializes a new instance of <code>Frame</code> that is not visible
+ * and has the specified title.
+ *
+ * @param title The title of this frame.
+ */
+public
+Frame(String title)
+{
+ super();
+ System.err.println("returned");
+ this.title = title;
+ System.err.println("end");
+}
+
+public
+Frame(GraphicsConfiguration gc)
{
- public static final int NORMAL = 0;
- public static final int ICONIFIED = 1;
+ super(gc);
+}
- MenuBar menuBar = null;
- String title;
+public
+Frame(String title, GraphicsConfiguration gc)
+{
+ super(gc);
+ setTitle(title);
+}
- private transient Image iconImage;
- private transient boolean isResizable = true;
- private transient int state = NORMAL;
+/*************************************************************************/
- public Frame ()
- {
- super();
- }
+/*
+ * Instance Methods
+ */
- public Frame(GraphicsConfiguration gc)
- {
- super(gc);
- }
+/**
+ * Returns this frame's title string.
+ *
+ * @return This frame's title string.
+ */
+public String
+getTitle()
+{
+ return(title);
+}
- public Frame (String title)
- {
- super();
- setTitle(title);
- }
+/*************************************************************************/
- public Frame(String title, GraphicsConfiguration gc)
- {
- super(gc);
- setTitle(title);
- }
+/*
+ * Sets this frame's title to the specified value.
+ *
+ * @param title The new frame title.
+ */
+public synchronized void
+setTitle(String title)
+{
+ this.title = title;
+ if (peer != null)
+ ((FramePeer) peer).setTitle(title);
+}
- public String getTitle()
- {
- return (title != null) ? title : "";
- }
-
- public void setTitle (String title)
- {
- this.title = title;
- if (peer != null)
- ((FramePeer)peer).setTitle(title);
- }
-
- public Image getIconImage()
- {
- return iconImage;
- }
-
- public void setIconImage(Image image)
- {
- iconImage = image;
- if (peer != null)
- ((FramePeer) peer).setIconImage(iconImage);
- }
-
- protected void finalize() throws Throwable
- {
- //frames.remove(this);
- /* FIXME: This won't work. Finalize will never be called if frames
- has a reference to the object. We need weak references to
- implement this correctly. */
-
- super.finalize();
- }
-
- public synchronized void setMenuBar (MenuBar menuBar)
- {
- if (this.menuBar != menuBar)
- {
- //this.menuBar.removeNotify();
- this.menuBar = menuBar;
- //this.menuBar.addNotify();
- }
-
- if (peer != null)
- ((FramePeer) peer).setMenuBar(menuBar);
- }
-
- public boolean isResizable()
- {
- return isResizable;
- }
-
- public void setResizable(boolean resizable)
- {
- isResizable = resizable;
- if (peer != null)
- ((FramePeer) peer).setResizable(isResizable);
- }
-
- public int getState()
- {
- /* FIXME: State might have changed in the peer... Must check. */
-
- return state;
- }
-
-
- public synchronized void addNotify ()
- {
- if (peer == null)
- peer = getToolkit ().createFrame (this);
- super.addNotify();
- }
-
- public boolean postEvent(Event evt) { return false; } // FIXME
-
- public void remove(MenuComponent m)
- {
- if (m == menuBar)
- {
- setMenuBar(null);
- return;
- }
-
- super.remove(m);
- }
-
- public void removeNotify()
- {
- //if ((peer != null) && (menuBar != null)) menuBar.removeNotify();
- super.removeNotify();
- }
+/*************************************************************************/
+
+/**
+ * Returns this frame's icon.
+ *
+ * @return This frame's icon, or <code>null</code> if this frame does not
+ * have an icon.
+ */
+public Image
+getIconImage()
+{
+ return(icon);
+}
+
+/*************************************************************************/
+
+/**
+ * Sets this frame's icon to the specified value.
+ *
+ * @icon The new icon for this frame.
+ */
+public synchronized void
+setIconImage(Image icon)
+{
+ this.icon = icon;
+ if (peer != null)
+ ((FramePeer) peer).setIconImage(icon);
+}
+
+/*************************************************************************/
+
+/**
+ * Returns this frame's menu bar.
+ *
+ * @return This frame's menu bar, or <code>null</code> if this frame
+ * does not have a menu bar.
+ */
+public MenuBar
+getMenuBar()
+{
+ return(menuBar);
+}
+
+/*************************************************************************/
+
+/**
+ * Sets this frame's menu bar.
+ *
+ * @param menuBar The new menu bar for this frame.
+ */
+public synchronized void
+setMenuBar(MenuBar menuBar)
+{
+ this.menuBar = menuBar;
+ if (peer != null)
+ ((FramePeer) peer).setMenuBar(menuBar);
+}
+
+/*************************************************************************/
+
+/**
+ * Tests whether or not this frame is resizable. This will be
+ * <code>true</code> by default.
+ *
+ * @return <code>true</code> if this frame is resizable, <code>false</code>
+ * otherwise.
+ */
+public boolean
+isResizable()
+{
+ return(resizable);
+}
+
+/*************************************************************************/
+
+/**
+ * Sets the resizability of this frame to the specified value.
+ *
+ * @param resizable <code>true</code> to make the frame resizable,
+ * <code>false</code> to make it non-resizable.
+ */
+public synchronized void
+setResizable(boolean resizable)
+{
+ this.resizable = resizable;
+ if (peer != null)
+ ((FramePeer) peer).setResizable(resizable);
+}
+
+/*************************************************************************/
+
+/**
+ * Returns the cursor type of the cursor for this window. This will
+ * be one of the constants in this class.
+ *
+ * @return The cursor type for this frame.
+ *
+ * @deprecated Use <code>Component.getCursor()</code> instead.
+ */
+public int
+getCursorType()
+{
+ return(getCursor().getType());
+}
+
+/*************************************************************************/
+
+/**
+ * Sets the cursor for this window to the specified type. The specified
+ * type should be one of the constants in this class.
+ *
+ * @param type The cursor type.
+ *
+ * @deprecated. Use <code>Component.setCursor(Cursor)</code> instead.
+ */
+public void
+setCursor(int type)
+{
+ setCursor(new Cursor(type));
+}
+
+/*************************************************************************/
+
+/**
+ * Removes the specified component from this frame's menu.
+ *
+ * @param menu The menu component to remove.
+ */
+public void
+remove(MenuComponent menu)
+{
+ menuBar.remove(menu);
+}
+
+/*************************************************************************/
+
+/**
+ * Notifies this frame that it should create its native peer.
+ */
+public void
+addNotify()
+{
+ if (peer == null)
+ peer = getToolkit ().createFrame (this);
+ super.addNotify();
+}
+
+/*************************************************************************/
+
+/**
+ * Destroys any resources associated with this frame. This includes
+ * all components in the frame and all owned toplevel windows.
+ */
+public void
+dispose()
+{
+ Enumeration e = ownedWindows.elements();
+ while(e.hasMoreElements())
+ {
+ Window w = (Window)e.nextElement();
+ w.dispose();
+ }
+
+ super.dispose();
+}
+
+/*************************************************************************/
+
+/**
+ * Returns a debugging string describing this window.
+ *
+ * @return A debugging string describing this window.
+ */
+protected String
+paramString()
+{
+ return(getClass().getName());
+}
+
+public int
+getState()
+{
+ /* FIXME: State might have changed in the peer... Must check. */
- public static Frame[] getFrames()
- {
- //Frame[] array = new Frames[frames.size()];
- //return frames.toArray(array);
+ return state;
+}
+
+public static Frame[]
+getFrames()
+{
+ //Frame[] array = new Frames[frames.size()];
+ //return frames.toArray(array);
// see finalize() comment
- String msg = "FIXME: can't be implemented without weak references";
- throw new UnsupportedOperationException(msg);
- }
+ String msg = "FIXME: can't be implemented without weak references";
+ throw new UnsupportedOperationException(msg);
}
+
+} // class Frame
+