001/* JApplet.java --
002   Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.
003
004This file is part of GNU Classpath.
005
006GNU Classpath is free software; you can redistribute it and/or modify
007it under the terms of the GNU General Public License as published by
008the Free Software Foundation; either version 2, or (at your option)
009any later version.
010
011GNU Classpath is distributed in the hope that it will be useful, but
012WITHOUT ANY WARRANTY; without even the implied warranty of
013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014General Public License for more details.
015
016You should have received a copy of the GNU General Public License
017along with GNU Classpath; see the file COPYING.  If not, write to the
018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
01902110-1301 USA.
020
021Linking this library statically or dynamically with other modules is
022making a combined work based on this library.  Thus, the terms and
023conditions of the GNU General Public License cover the whole
024combination.
025
026As a special exception, the copyright holders of this library give you
027permission to link this library with independent modules to produce an
028executable, regardless of the license terms of these independent
029modules, and to copy and distribute the resulting executable under
030terms of your choice, provided that you also meet, for each linked
031independent module, the terms and conditions of the license of that
032module.  An independent module is a module which is not derived from
033or based on this library.  If you modify this library, you may extend
034this exception to your version of the library, but you are not
035obligated to do so.  If you do not wish to do so, delete this
036exception statement from your version. */
037
038
039package javax.swing;
040
041import java.applet.Applet;
042import java.awt.BorderLayout;
043import java.awt.Component;
044import java.awt.Container;
045import java.awt.Dimension;
046import java.awt.Graphics;
047import java.awt.LayoutManager;
048import java.awt.event.KeyEvent;
049
050import javax.accessibility.Accessible;
051import javax.accessibility.AccessibleContext;
052
053/**
054 * A top-level container that is usually used in web browsers.
055 *
056 * @author original author unknown
057 */
058public class JApplet extends Applet
059  implements RootPaneContainer, Accessible
060{
061  /**
062   * Provides accessibility support for <code>JApplet</code>.
063   */
064  protected class AccessibleJApplet extends Applet.AccessibleApplet
065  {
066    /**
067     * Creates a new instance of <code>AccessibleJApplet</code>.
068     */
069    protected AccessibleJApplet()
070    {
071      super();
072      // Nothing to do here.
073    }
074  }
075
076  /**
077   * The accessible context for this <code>JApplet</code>.
078   */
079  protected AccessibleContext accessibleContext;
080
081  private static final long serialVersionUID = 7269359214497372587L;
082
083  protected JRootPane rootPane;
084
085  /**
086   * @specnote rootPaneCheckingEnabled is false to comply with J2SE 5.0
087   */
088  protected boolean rootPaneCheckingEnabled = false;
089
090  public JApplet()
091  {
092    super.setLayout(new BorderLayout(1, 1));
093    getRootPane(); // Will do set/create.
094    setRootPaneCheckingEnabled(true); // Init stage is now over.
095  }
096
097  public Dimension getPreferredSize()
098  {
099    return super.getPreferredSize();
100  }
101
102  public void setLayout(LayoutManager manager)
103  {
104    // Check if we're in initialization stage.  If so, call super.setLayout
105    // otherwise, valid calls go to the content pane
106    if (isRootPaneCheckingEnabled())
107      getContentPane().setLayout(manager);
108    else
109      super.setLayout(manager);
110  }
111
112  public void setLayeredPane(JLayeredPane layeredPane)
113  {
114    getRootPane().setLayeredPane(layeredPane);
115  }
116
117  public JLayeredPane getLayeredPane()
118  {
119    return getRootPane().getLayeredPane();
120  }
121
122  public JRootPane getRootPane()
123  {
124    if (rootPane == null)
125      setRootPane(createRootPane());
126    return rootPane;
127  }
128
129  protected void setRootPane(JRootPane root)
130  {
131    if (rootPane != null)
132      remove(rootPane);
133
134    rootPane = root;
135    add(rootPane, BorderLayout.CENTER);
136  }
137
138  protected JRootPane createRootPane()
139  {
140    return new JRootPane();
141  }
142
143  public Container getContentPane()
144  {
145    return getRootPane().getContentPane();
146  }
147
148  public void setContentPane(Container contentPane)
149  {
150    getRootPane().setContentPane(contentPane);
151  }
152
153  public Component getGlassPane()
154  {
155    return getRootPane().getGlassPane();
156  }
157
158  public void setGlassPane(Component glassPane)
159  {
160    getRootPane().setGlassPane(glassPane);
161  }
162
163  protected void addImpl(Component comp, Object constraints, int index)
164  {
165    // If we're adding in the initialization stage use super.add.
166    // Otherwise pass the add onto the content pane.
167    if (isRootPaneCheckingEnabled())
168      getContentPane().add(comp, constraints, index);
169    else
170      super.addImpl(comp, constraints, index);
171  }
172
173  public AccessibleContext getAccessibleContext()
174  {
175    if (accessibleContext == null)
176      accessibleContext = new AccessibleJApplet();
177    return accessibleContext;
178  }
179
180  public JMenuBar getJMenuBar()
181  {
182    return getRootPane().getJMenuBar();
183  }
184
185  public void setJMenuBar(JMenuBar menubar)
186  {
187    getRootPane().setJMenuBar(menubar);
188  }
189
190  protected String paramString()
191  {
192    return super.paramString();
193  }
194
195  protected void processKeyEvent(KeyEvent e)
196  {
197    super.processKeyEvent(e);
198  }
199
200  public void remove(Component comp)
201  {
202    // If we're removing the root pane, use super.remove. Otherwise
203    // pass it on to the content pane instead
204    if (comp == rootPane)
205      super.remove(rootPane);
206    else
207      getContentPane().remove(comp);
208  }
209
210  protected boolean isRootPaneCheckingEnabled()
211  {
212    return rootPaneCheckingEnabled;
213  }
214
215  protected void setRootPaneCheckingEnabled(boolean enabled)
216  {
217    rootPaneCheckingEnabled = enabled;
218  }
219
220  public void update(Graphics g)
221  {
222    paint(g);
223  }
224}