OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [javax/] [swing/] [Popup.java] - Blame information for rev 772

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 772 jeremybenn
/* Popup.java --
2
   Copyright (C) 2003 Free Software Foundation, Inc.
3
 
4
This file is part of GNU Classpath.
5
 
6
GNU Classpath is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2, or (at your option)
9
any later version.
10
 
11
GNU Classpath is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with GNU Classpath; see the file COPYING.  If not, write to the
18
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
02110-1301 USA.
20
 
21
Linking this library statically or dynamically with other modules is
22
making a combined work based on this library.  Thus, the terms and
23
conditions of the GNU General Public License cover the whole
24
combination.
25
 
26
As a special exception, the copyright holders of this library give you
27
permission to link this library with independent modules to produce an
28
executable, regardless of the license terms of these independent
29
modules, and to copy and distribute the resulting executable under
30
terms of your choice, provided that you also meet, for each linked
31
independent module, the terms and conditions of the license of that
32
module.  An independent module is a module which is not derived from
33
or based on this library.  If you modify this library, you may extend
34
this exception to your version of the library, but you are not
35
obligated to do so.  If you do not wish to do so, delete this
36
exception statement from your version. */
37
 
38
 
39
package javax.swing;
40
 
41
import java.awt.Component;
42
import java.awt.FlowLayout;
43
import java.awt.Point;
44
import java.awt.Rectangle;
45
 
46
 
47
/**
48
 * Manages a popup window that displays a Component on top of
49
 * everything else.
50
 *
51
 * <p>To obtain an instance of <code>Popup</code>, use the
52
 * {@link javax.swing.PopupFactory}.
53
 *
54
 * @since 1.4
55
 *
56
 * @author Sascha Brawer (brawer@dandelis.ch)
57
 */
58
public class Popup
59
{
60
  /**
61
   * Constructs a new <code>Popup</code> given its owner,
62
   * contents and the screen position where the popup
63
   * will appear.
64
   *
65
   * @param owner the Component to which <code>x</code> and
66
   *        <code>y</code> are relative, or <code>null</code> for
67
   *        placing the popup relative to the origin of the screen.
68
   *
69
   * @param contents the contents that will be displayed inside
70
   *        the <code>Popup</code>.
71
   *
72
   * @param x the horizontal position where the Popup will appear.
73
   *
74
   * @param y the vertical position where the Popup will appear.
75
   *
76
   * @throws IllegalArgumentException if <code>contents</code>
77
   *         is <code>null</code>.
78
   */
79
  protected Popup(Component owner, Component contents,
80
                  int x, int y)
81
  {
82
    if (contents == null)
83
      throw new IllegalArgumentException();
84
 
85
    // The real stuff happens in the implementation of subclasses,
86
    // for instance JWindowPopup.
87
  }
88
 
89
 
90
  /**
91
   * Constructs a new <code>Popup</code>.
92
   */
93
  protected Popup()
94
  {
95
    // Nothing to do here.
96
  }
97
 
98
 
99
  /**
100
   * Displays the <code>Popup</code> on the screen.  Nothing happens
101
   * if it is currently shown.
102
   */
103
  public void show()
104
  {
105
    // Implemented by subclasses, for instance JWindowPopup.
106
  }
107
 
108
 
109
  /**
110
   * Removes the <code>Popup</code> from the screen.  Nothing happens
111
   * if it is currently hidden.
112
   */
113
  public void hide()
114
  {
115
    // Implemented by subclasses, for instance JWindowPopup.
116
  }
117
 
118
 
119
  /**
120
   * A <code>Popup</code> that uses a <code>JWindow</code> for
121
   * displaying its contents.
122
   *
123
   * @see PopupFactory#getPopup
124
   *
125
   * @author Sascha Brawer (brawer@dandelis.ch)
126
   */
127
  static class JWindowPopup
128
    extends Popup
129
  {
130
    /**
131
     * The <code>JWindow</code> used for displaying the contents
132
     * of the popup.
133
     */
134
    JWindow window;
135
 
136
    private Component contents;
137
 
138
    /**
139
     * Constructs a new <code>JWindowPopup</code> given its owner,
140
     * contents and the screen position where the popup
141
     * will appear.
142
     *
143
     * @param owner the Component to which <code>x</code> and
144
     *        <code>y</code> are relative, or <code>null</code> for
145
     *        placing the popup relative to the origin of the screen.
146
     *
147
     * @param contents the contents that will be displayed inside
148
     *        the <code>Popup</code>.
149
     *
150
     * @param x the horizontal position where the Popup will appear.
151
     *
152
     * @param y the vertical position where the Popup will appear.
153
     *
154
     * @throws IllegalArgumentException if <code>contents</code>
155
     *         is <code>null</code>.
156
     */
157
    public JWindowPopup(Component owner, Component contents,
158
                        int x, int y)
159
    {
160
      /* Checks whether contents is null. */
161
      super(owner, contents, x, y);
162
 
163
      this.contents = contents;
164
      window = new JWindow(SwingUtilities.getWindowAncestor(owner));
165
      window.getContentPane().add(contents);
166
      window.setLocation(x, y);
167
      window.setFocusableWindowState(false);
168
    }
169
 
170
 
171
    /**
172
     * Displays the popup's <code>JWindow</code> on the screen.
173
     * Nothing happens if it is already visible.
174
     */
175
    public void show()
176
    {
177
      window.setSize(contents.getSize());
178
      window.show();
179
    }
180
 
181
 
182
    /**
183
     * Removes the popup's <code>JWindow</code> from the
184
     * screen.  Nothing happens if it is currently not visible.
185
     */
186
    public void hide()
187
    {
188
      /* Calling dispose() instead of hide() will conserve native
189
       * system resources, for example memory in an X11 server.
190
       * They will automatically be re-allocated by a call to
191
       * show().
192
       */
193
      window.dispose();
194
    }
195
  }
196
 
197
  /**
198
   * A popup that displays itself within the JLayeredPane of a JRootPane of
199
   * the containment hierarchy of the owner component.
200
   *
201
   * @author Roman Kennke (kennke@aicas.com)
202
   */
203
  static class LightweightPopup extends Popup
204
  {
205
    /**
206
     * The owner component for this popup.
207
     */
208
    Component owner;
209
 
210
    /**
211
     * The contents that should be shown.
212
     */
213
    Component contents;
214
 
215
    /**
216
     * The X location in screen coordinates.
217
     */
218
    int x;
219
 
220
    /**
221
     * The Y location in screen coordinates.
222
     */
223
    int y;
224
 
225
    /**
226
     * The panel that holds the content.
227
     */
228
    private JPanel panel;
229
 
230
    /**
231
     * The layered pane of the owner.
232
     */
233
    private JLayeredPane layeredPane;
234
 
235
    /**
236
     * Constructs a new <code>LightweightPopup</code> given its owner,
237
     * contents and the screen position where the popup
238
     * will appear.
239
     *
240
     * @param owner the component that should own the popup window; this
241
     *        provides the JRootPane in which we place the popup window
242
     *
243
     * @param contents the contents that will be displayed inside
244
     *        the <code>Popup</code>.
245
     *
246
     * @param x the horizontal position where the Popup will appear in screen
247
     *        coordinates
248
     *
249
     * @param y the vertical position where the Popup will appear in screen
250
     *        coordinates
251
     *
252
     * @throws IllegalArgumentException if <code>contents</code>
253
     *         is <code>null</code>.
254
     */
255
    public LightweightPopup(Component owner, Component  contents, int x, int y)
256
    {
257
      super(owner, contents, x, y);
258
      this.owner = owner;
259
      this.contents = contents;
260
      this.x = x;
261
      this.y = y;
262
 
263
      JRootPane rootPane = SwingUtilities.getRootPane(owner);
264
      JLayeredPane layeredPane = rootPane.getLayeredPane();
265
      this.layeredPane = layeredPane;
266
    }
267
 
268
    /**
269
     * Places the popup within the JLayeredPane of the owner component and
270
     * makes it visible.
271
     */
272
    public void show()
273
    {
274
      // We insert a JPanel between the layered pane and the contents so we
275
      // can fiddle with the setLocation() method without disturbing a
276
      // JPopupMenu (which overrides setLocation in an unusual manner).
277
      if (panel == null)
278
        {
279
          panel = new JPanel();
280
          panel.setLayout(new FlowLayout(0, 0, 0));
281
        }
282
 
283
      panel.add(contents);
284
      panel.setSize(contents.getSize());
285
      Point layeredPaneLoc = layeredPane.getLocationOnScreen();
286
      panel.setLocation(x - layeredPaneLoc.x, y - layeredPaneLoc.y);
287
      layeredPane.add(panel, JLayeredPane.POPUP_LAYER, 0);
288
      panel.repaint();
289
    }
290
 
291
    /**
292
     * Removes the popup from the JLayeredPane thus making it invisible.
293
     */
294
    public void hide()
295
    {
296
      Rectangle bounds = panel.getBounds();
297
      layeredPane.remove(panel);
298
      layeredPane.repaint(bounds.x, bounds.y, bounds.width, bounds.height);
299
    }
300
  }
301
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.