/[classpath]/classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java
ViewVC logotype

Diff of /classpath/javax/swing/plaf/basic/BasicPopupMenuUI.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by mkoch, Thu Jun 3 06:17:41 2004 UTC revision 1.3 by mark, Thu Jul 22 19:45:39 2004 UTC
# Line 40  package javax.swing.plaf.basic; Line 40  package javax.swing.plaf.basic;
40  import java.awt.AWTKeyStroke;  import java.awt.AWTKeyStroke;
41  import java.awt.BasicStroke;  import java.awt.BasicStroke;
42  import java.awt.Color;  import java.awt.Color;
43    import java.awt.Component;
44    import java.awt.Container;
45  import java.awt.Dimension;  import java.awt.Dimension;
46  import java.awt.Font;  import java.awt.Font;
47  import java.awt.FontMetrics;  import java.awt.FontMetrics;
48  import java.awt.Graphics;  import java.awt.Graphics;
49  import java.awt.Graphics2D;  import java.awt.Graphics2D;
50  import java.awt.GridBagLayout;  import java.awt.GridBagLayout;
51    import java.awt.GridLayout;
52  import java.awt.Insets;  import java.awt.Insets;
53  import java.awt.Rectangle;  import java.awt.Rectangle;
54  import java.awt.Stroke;  import java.awt.Stroke;
55    import java.awt.event.ComponentEvent;
56    import java.awt.event.ComponentListener;
57  import java.awt.event.FocusAdapter;  import java.awt.event.FocusAdapter;
58  import java.awt.event.FocusEvent;  import java.awt.event.FocusEvent;
59  import java.awt.event.FocusListener;  import java.awt.event.FocusListener;
# Line 88  import javax.swing.plaf.PopupMenuUI; Line 93  import javax.swing.plaf.PopupMenuUI;
93    
94    
95  /**  /**
96   * DOCUMENT ME!   * UI Delegate for JPopupMenu
97   */   */
98  public class BasicPopupMenuUI extends PopupMenuUI  public class BasicPopupMenuUI extends PopupMenuUI
99  {  {
100      /* popupMenu for which this UI delegate is for*/
101    protected JPopupMenu popupMenu;    protected JPopupMenu popupMenu;
102    
103      /* MouseInputListener listens to mouse events */
104    private static transient MouseInputListener mouseInputListener;    private static transient MouseInputListener mouseInputListener;
105    
106      /* PopupMenuListener listens to popup menu events fired by JPopupMenu*/
107    private transient PopupMenuListener popupMenuListener;    private transient PopupMenuListener popupMenuListener;
108    
109      /* ComponentListener listening to popupMenu's invoker. */
110      private TopWindowListener topWindowListener;
111    
112    /**    /**
113     * Creates a new BasicPopupMenuUI object.     * Creates a new BasicPopupMenuUI object.
114     */     */
# Line 103  public class BasicPopupMenuUI extends Po Line 116  public class BasicPopupMenuUI extends Po
116    {    {
117      popupMenuListener = new PopupMenuHandler();      popupMenuListener = new PopupMenuHandler();
118      mouseInputListener = new MouseInputHandler();      mouseInputListener = new MouseInputHandler();
119        topWindowListener = new TopWindowListener();
120    }    }
121    
122    /**    /**
123     * DOCUMENT ME!     * Factory method to create a BasicPopupMenuUI for the given {@link
124       * JComponent}, which should be a {@link JMenuItem}.
125     *     *
126     * @param x DOCUMENT ME!     * @param x The {@link JComponent} a UI is being created for.
127     *     *
128     * @return DOCUMENT ME!     * @return A BasicPopupMenuUI for the {@link JComponent}.
129     */     */
130    public static ComponentUI createUI(JComponent x)    public static ComponentUI createUI(JComponent x)
131    {    {
# Line 118  public class BasicPopupMenuUI extends Po Line 133  public class BasicPopupMenuUI extends Po
133    }    }
134    
135    /**    /**
136     * DOCUMENT ME!     * Installs and initializes all fields for this UI delegate. Any properties
137       * of the UI that need to be initialized and/or set to defaults will be
138       * done now. It will also install any listeners necessary.
139     *     *
140     * @param c DOCUMENT ME!     * @param c The {@link JComponent} that is having this UI installed.
141     */     */
142    public void installUI(JComponent c)    public void installUI(JComponent c)
143    {    {
# Line 128  public class BasicPopupMenuUI extends Po Line 145  public class BasicPopupMenuUI extends Po
145      popupMenu = (JPopupMenu) c;      popupMenu = (JPopupMenu) c;
146      popupMenu.setLayout(new GridBagLayout());      popupMenu.setLayout(new GridBagLayout());
147      popupMenu.setBorderPainted(true);      popupMenu.setBorderPainted(true);
148      popupMenu.setDefaultLightWeightPopupEnabled(true);      JPopupMenu.setDefaultLightWeightPopupEnabled(true);
149    
150      installDefaults();      installDefaults();
151      installListeners();      installListeners();
152    }    }
153    
154    /**    /**
155     * DOCUMENT ME!     * This method installs the defaults that are defined in  the Basic look and
156       * feel for this {@link JPopupMenu}.
157     */     */
158    public void installDefaults()    public void installDefaults()
159    {    {
# Line 148  public class BasicPopupMenuUI extends Po Line 166  public class BasicPopupMenuUI extends Po
166    }    }
167    
168    /**    /**
169     * DOCUMENT ME!     * This method installs the listeners for the {@link JMenuItem}.
170     */     */
171    protected void installListeners()    protected void installListeners()
172    {    {
# Line 158  public class BasicPopupMenuUI extends Po Line 176  public class BasicPopupMenuUI extends Po
176    }    }
177    
178    /**    /**
179     * DOCUMENT ME!     * This method installs the keyboard actions for this {@link JPopupMenu}.
180     */     */
181    protected void installKeyboardActions()    protected void installKeyboardActions()
182    {    {
183        // FIXME: Need to implement
184    }    }
185    
186    /**    /**
187     * DOCUMENT ME!     * Performs the opposite of installUI. Any properties or resources that need
188       * to be cleaned up will be done now. It will also uninstall any listeners
189       * it has. In addition, any properties of this UI will be nulled.
190     *     *
191     * @param c DOCUMENT ME!     * @param c The {@link JComponent} that is having this UI uninstalled.
192     */     */
193    public void uninstallUI(JComponent c)    public void uninstallUI(JComponent c)
194    {    {
# Line 177  public class BasicPopupMenuUI extends Po Line 198  public class BasicPopupMenuUI extends Po
198    }    }
199    
200    /**    /**
201     * DOCUMENT ME!     * This method uninstalls the defaults and sets any objects created during
202       * install to null
203     */     */
204    protected void uninstallDefaults()    protected void uninstallDefaults()
205    {    {
# Line 188  public class BasicPopupMenuUI extends Po Line 210  public class BasicPopupMenuUI extends Po
210    }    }
211    
212    /**    /**
213     * DOCUMENT ME!     * Unregisters all the listeners that this UI delegate was using.
214     */     */
215    protected void uninstallListeners()    protected void uninstallListeners()
216    {    {
217        popupMenu.removeMouseListener(mouseInputListener);
218        popupMenu.removeMouseMotionListener(mouseInputListener);
219        popupMenu.removePopupMenuListener(popupMenuListener);
220    }    }
221    
222    /**    /**
223     * DOCUMENT ME!     * Uninstalls any keyboard actions.
224     */     */
225    protected void uninstallKeyboardActions()    protected void uninstallKeyboardActions()
226    {    {
227        // FIXME: Need to implement
228    }    }
229    
230    /**    /**
231     * DOCUMENT ME!    * This method returns the minimum size of the JPopupMenu.
232     *     *
233     * @param c DOCUMENT ME!    * @param c The JComponent to find a size for.
234     *     *
235     * @return DOCUMENT ME!    * @return The minimum size.
236     */     */
237    public Dimension getMinimumSize(JComponent c)    public Dimension getMinimumSize(JComponent c)
238    {    {
# Line 214  public class BasicPopupMenuUI extends Po Line 240  public class BasicPopupMenuUI extends Po
240    }    }
241    
242    /**    /**
243     * DOCUMENT ME!     * This method returns the preferred size of the JPopupMenu.
244     *     *
245     * @param c DOCUMENT ME!     * @param c The JComponent to find a size for.
246     *     *
247     * @return DOCUMENT ME!     * @return The preferred size.
248     */     */
249    public Dimension getPreferredSize(JComponent c)    public Dimension getPreferredSize(JComponent c)
250    {    {
# Line 226  public class BasicPopupMenuUI extends Po Line 252  public class BasicPopupMenuUI extends Po
252    }    }
253    
254    /**    /**
255     * DOCUMENT ME!     * This method returns the minimum size of the JPopupMenu.
256     *     *
257     * @param c DOCUMENT ME!     * @param c The JComponent to find a size for.
258     *     *
259     * @return DOCUMENT ME!     * @return The minimum size.
260     */     */
261    public Dimension getMaximumSize(JComponent c)    public Dimension getMaximumSize(JComponent c)
262    {    {
# Line 238  public class BasicPopupMenuUI extends Po Line 264  public class BasicPopupMenuUI extends Po
264    }    }
265    
266    /**    /**
267     * DOCUMENT ME!     * Return true if given mouse event is a platform popup trigger,
268       * and false otherwise
269     *     *
270     * @param e DOCUMENT ME!     * @param e MouseEvent that is to be checked for popup trigger event
271     *     *
272     * @return DOCUMENT ME!     * @return true if given mouse event is a platform popup trigger,
273       * and false otherwise
274     */     */
275    public boolean isPopupTrigger(MouseEvent e)    public boolean isPopupTrigger(MouseEvent e)
276    {    {
# Line 250  public class BasicPopupMenuUI extends Po Line 278  public class BasicPopupMenuUI extends Po
278    }    }
279    
280    /**    /**
281     * DOCUMENT ME!     * This listener handles PopupMenuEvents fired by JPopupMenu
282     */     */
283    protected class PopupMenuHandler implements PopupMenuListener    private class PopupMenuHandler implements PopupMenuListener
284    {    {
285      /**      /**
286       * DOCUMENT ME!       * This method is invoked when JPopupMenu is cancelled.
287       *       *
288       * @param event DOCUMENT ME!       * @param event the PopupMenuEvent
289       */       */
290      public void popupMenuCanceled(PopupMenuEvent event)      public void popupMenuCanceled(PopupMenuEvent event)
291      {      {
292          MenuSelectionManager manager = MenuSelectionManager.defaultManager();
293          manager.clearSelectedPath();
294      }      }
295    
296      /**      /**
297       * DOCUMENT ME!       * This method is invoked when JPopupMenu becomes invisible
298       *       *
299       * @param event DOCUMENT ME!       * @param event the PopupMenuEvent
300       */       */
301      public void popupMenuWillBecomeInvisible(PopupMenuEvent event)      public void popupMenuWillBecomeInvisible(PopupMenuEvent event)
302      {      {
303          // remove listener that listens to component events fired
304          // by the top - level window that this popup belongs to.
305          Component invoker = popupMenu.getInvoker();
306    
307          Container rootContainer = (Container) SwingUtilities.getRoot(invoker);
308          rootContainer.removeComponentListener(topWindowListener);
309      }      }
310    
311      /**      /**
312       * DOCUMENT ME!       * This method is invoked when JPopupMenu becomes visible
313       *       *
314       * @param event DOCUMENT ME!       * @param event the PopupMenuEvent
315       */       */
316      public void popupMenuWillBecomeVisible(PopupMenuEvent event)      public void popupMenuWillBecomeVisible(PopupMenuEvent event)
317      {      {
318          // Adds topWindowListener to top-level window to listener to
319          // ComponentEvents fired by it. We need to cancel this popup menu
320          // if topWindow to which this popup belongs was resized or moved.
321          Component invoker = popupMenu.getInvoker();
322          Container rootContainer = (Container) SwingUtilities.getRoot(invoker);
323          rootContainer.addComponentListener(topWindowListener);
324    
325          // if this popup menu is a free floating popup menu,
326          // then by default its first element should be always selected when
327          // this popup menu becomes visible.
328          MenuSelectionManager manager = MenuSelectionManager.defaultManager();
329    
330          if (manager.getSelectedPath().length == 0)
331            {
332              // Set selected path to point to the first item in the popup menu
333              MenuElement[] path = new MenuElement[2];
334              path[0] = popupMenu;
335              Component[] comps = popupMenu.getComponents();
336              if (comps.length != 0 && comps[0] instanceof MenuElement)
337                path[1] = (MenuElement) comps[0];
338              manager.setSelectedPath(path);
339            }
340      }      }
341    }    }
342    
343    /**    /**
344     * DOCUMENT ME!     * ComponentListener that listens to Component Events fired by the
345       * top - level window to which popup menu belongs. If top-level
346       * window was resized, moved or hidded then popup menu will
347       * be hidded and selected path of current menu hierarchy will be set
348       * to null.
349       *
350     */     */
351    protected class MouseInputHandler implements MouseInputListener    private class TopWindowListener implements ComponentListener
352    {    {
353      /**      /**
354       * DOCUMENT ME!       * This method is invoked when top-level window is resized.
355         * This method closes current menu hierarchy.
356       *       *
357       * @param e DOCUMENT ME!       * @param e The ComponentEvent
358       */       */
359      public void mouseClicked(MouseEvent e)      public void componentResized(ComponentEvent e)
360      {      {
361          MenuSelectionManager manager = MenuSelectionManager.defaultManager();
362          manager.clearSelectedPath();
363      }      }
364    
365      /**      /**
366       * DOCUMENT ME!       * This method is invoked when top-level window is moved.
367         * This method closes current menu hierarchy.
368       *       *
369       * @param e DOCUMENT ME!       * @param e The ComponentEvent
370       */       */
371      public void mouseDragged(MouseEvent e)      public void componentMoved(ComponentEvent e)
372      {      {
373          MenuSelectionManager manager = MenuSelectionManager.defaultManager();
374          manager.clearSelectedPath();
375      }      }
376    
377      /**      /**
378       * DOCUMENT ME!       * This method is invoked when top-level window is shown
379         * This method does nothing by default.
380       *       *
381       * @param e DOCUMENT ME!       * @param e The ComponentEvent
382       */       */
383      public void mouseEntered(MouseEvent e)      public void componentShown(ComponentEvent e)
384      {      {
385          MenuSelectionManager manager = MenuSelectionManager.defaultManager();
386          manager.clearSelectedPath();
387      }      }
388    
389      /**      /**
390       * DOCUMENT ME!       * This method is invoked when top-level window is hidden
391         * This method closes current menu hierarchy.
392       *       *
393       * @param e DOCUMENT ME!       * @param e The ComponentEvent
394       */       */
395        public void componentHidden(ComponentEvent e)
396        {
397          MenuSelectionManager manager = MenuSelectionManager.defaultManager();
398          manager.clearSelectedPath();
399        }
400      }
401    
402      private class MouseInputHandler implements MouseInputListener
403      {
404        public void mouseClicked(MouseEvent e)
405        {
406        }
407    
408        public void mouseDragged(MouseEvent e)
409        {
410        }
411    
412        public void mouseEntered(MouseEvent e)
413        {
414        }
415    
416      public void mouseExited(MouseEvent e)      public void mouseExited(MouseEvent e)
417      {      {
418      }      }
419    
     /**  
      * DOCUMENT ME!  
      *  
      * @param e DOCUMENT ME!  
      */  
420      public void mouseMoved(MouseEvent e)      public void mouseMoved(MouseEvent e)
421      {      {
422      }      }
423    
     /**  
      * DOCUMENT ME!  
      *  
      * @param e DOCUMENT ME!  
      */  
424      public void mousePressed(MouseEvent e)      public void mousePressed(MouseEvent e)
425      {      {
426      }      }
427    
     /**  
      * DOCUMENT ME!  
      *  
      * @param e DOCUMENT ME!  
      */  
428      public void mouseReleased(MouseEvent e)      public void mouseReleased(MouseEvent e)
429      {      {
430      }      }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26