home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / swing / JMenu.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  12.3 KB  |  648 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Component;
  4. import java.awt.ComponentOrientation;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.GraphicsConfiguration;
  8. import java.awt.GraphicsDevice;
  9. import java.awt.GraphicsEnvironment;
  10. import java.awt.Insets;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.Toolkit;
  14. import java.awt.event.KeyEvent;
  15. import java.beans.PropertyChangeListener;
  16. import java.io.IOException;
  17. import java.io.ObjectOutputStream;
  18. import java.util.Hashtable;
  19. import java.util.Vector;
  20. import javax.accessibility.Accessible;
  21. import javax.accessibility.AccessibleContext;
  22. import javax.swing.event.ChangeListener;
  23. import javax.swing.event.MenuEvent;
  24. import javax.swing.event.MenuListener;
  25. import javax.swing.plaf.MenuItemUI;
  26. import javax.swing.plaf.PopupMenuUI;
  27.  
  28. public class JMenu extends JMenuItem implements Accessible, MenuElement {
  29.    private static final String uiClassID = "MenuUI";
  30.    private JPopupMenu popupMenu;
  31.    private ChangeListener menuChangeListener;
  32.    private MenuEvent menuEvent;
  33.    private static Hashtable listenerRegistry = null;
  34.    private int delay;
  35.    private Point customMenuLocation;
  36.    private static final boolean TRACE = false;
  37.    private static final boolean VERBOSE = false;
  38.    private static final boolean DEBUG = false;
  39.    protected WinListener popupListener;
  40.  
  41.    public JMenu() {
  42.       this("");
  43.    }
  44.  
  45.    public JMenu(String var1) {
  46.       super(var1);
  47.       this.menuChangeListener = null;
  48.       this.menuEvent = null;
  49.       this.customMenuLocation = null;
  50.    }
  51.  
  52.    public JMenu(Action var1) {
  53.       this();
  54.       this.setAction(var1);
  55.    }
  56.  
  57.    public JMenu(String var1, boolean var2) {
  58.       this(var1);
  59.    }
  60.  
  61.    void initFocusability() {
  62.    }
  63.  
  64.    public void updateUI() {
  65.       this.setUI((MenuItemUI)UIManager.getUI(this));
  66.       if (this.popupMenu != null) {
  67.          this.popupMenu.setUI((PopupMenuUI)UIManager.getUI(this.popupMenu));
  68.       }
  69.  
  70.    }
  71.  
  72.    public String getUIClassID() {
  73.       return "MenuUI";
  74.    }
  75.  
  76.    public void setModel(ButtonModel var1) {
  77.       ButtonModel var2 = this.getModel();
  78.       super.setModel(var1);
  79.       if (var2 != null && this.menuChangeListener != null) {
  80.          var2.removeChangeListener(this.menuChangeListener);
  81.          this.menuChangeListener = null;
  82.       }
  83.  
  84.       this.model = var1;
  85.       if (var1 != null) {
  86.          this.menuChangeListener = this.createMenuChangeListener();
  87.          var1.addChangeListener(this.menuChangeListener);
  88.       }
  89.  
  90.    }
  91.  
  92.    public boolean isSelected() {
  93.       return this.getModel().isSelected();
  94.    }
  95.  
  96.    public void setSelected(boolean var1) {
  97.       ButtonModel var2 = this.getModel();
  98.       boolean var3 = var2.isSelected();
  99.       if (var1 != var2.isSelected()) {
  100.          this.getModel().setSelected(var1);
  101.       }
  102.  
  103.    }
  104.  
  105.    public boolean isPopupMenuVisible() {
  106.       this.ensurePopupMenuCreated();
  107.       return this.popupMenu.isVisible();
  108.    }
  109.  
  110.    public void setPopupMenuVisible(boolean var1) {
  111.       boolean var2 = this.isPopupMenuVisible();
  112.       if (var1 != var2 && (this.isEnabled() || !var1)) {
  113.          this.ensurePopupMenuCreated();
  114.          if (var1 && this.isShowing()) {
  115.             Point var3 = this.getCustomMenuLocation();
  116.             if (var3 == null) {
  117.                var3 = this.getPopupMenuOrigin();
  118.             }
  119.  
  120.             this.getPopupMenu().show(this, var3.x, var3.y);
  121.          } else {
  122.             this.getPopupMenu().setVisible(false);
  123.          }
  124.       }
  125.  
  126.    }
  127.  
  128.    protected Point getPopupMenuOrigin() {
  129.       int var1 = 0;
  130.       int var2 = 0;
  131.       JPopupMenu var3 = this.getPopupMenu();
  132.       Dimension var4 = this.getSize();
  133.       Dimension var5 = var3.getSize();
  134.       if (var5.width == 0) {
  135.          var5 = var3.getPreferredSize();
  136.       }
  137.  
  138.       Point var6 = this.getLocationOnScreen();
  139.       Toolkit var7 = Toolkit.getDefaultToolkit();
  140.       GraphicsConfiguration var8 = this.getGraphicsConfiguration();
  141.       Rectangle var9 = new Rectangle(var7.getScreenSize());
  142.       GraphicsEnvironment var10 = GraphicsEnvironment.getLocalGraphicsEnvironment();
  143.       GraphicsDevice[] var11 = var10.getScreenDevices();
  144.  
  145.       for(int var12 = 0; var12 < var11.length; ++var12) {
  146.          if (var11[var12].getType() == 0) {
  147.             GraphicsConfiguration var13 = var11[var12].getDefaultConfiguration();
  148.             if (var13.getBounds().contains(var6)) {
  149.                var8 = var13;
  150.                break;
  151.             }
  152.          }
  153.       }
  154.  
  155.       if (var8 != null) {
  156.          var9 = var8.getBounds();
  157.          Insets var17 = var7.getScreenInsets(var8);
  158.          var9.width -= Math.abs(var17.left + var17.right);
  159.          var9.height -= Math.abs(var17.top + var17.bottom);
  160.          var6.x -= Math.abs(var17.left);
  161.          var6.y -= Math.abs(var17.top);
  162.       }
  163.  
  164.       Container var18 = this.getParent();
  165.       if (var18 instanceof JPopupMenu) {
  166.          int var19 = UIManager.getInt("Menu.submenuPopupOffsetX");
  167.          int var14 = UIManager.getInt("Menu.submenuPopupOffsetY");
  168.          if (SwingUtilities.isLeftToRight(this)) {
  169.             var1 = var4.width + var19;
  170.             if (var6.x + var1 + var5.width >= var9.width + var9.x && var9.width - var4.width < 2 * (var6.x - var9.x)) {
  171.                var1 = 0 - var19 - var5.width;
  172.             }
  173.          } else {
  174.             var1 = 0 - var19 - var5.width;
  175.             if (var6.x + var1 < var9.x && var9.width - var4.width > 2 * (var6.x - var9.x)) {
  176.                var1 = var4.width + var19;
  177.             }
  178.          }
  179.  
  180.          var2 = var14;
  181.          if (var6.y + var14 + var5.height >= var9.height + var9.y && var9.height - var4.height < 2 * (var6.y - var9.y)) {
  182.             var2 = var4.height - var14 - var5.height;
  183.          }
  184.       } else {
  185.          int var20 = UIManager.getInt("Menu.menuPopupOffsetX");
  186.          int var21 = UIManager.getInt("Menu.menuPopupOffsetY");
  187.          if (SwingUtilities.isLeftToRight(this)) {
  188.             var1 = var20;
  189.             if (var6.x + var20 + var5.width >= var9.width + var9.x && var9.width - var4.width < 2 * (var6.x - var9.x)) {
  190.                var1 = var4.width - var20 - var5.width;
  191.             }
  192.          } else {
  193.             var1 = var4.width - var20 - var5.width;
  194.             if (var6.x + var1 < var9.x && var9.width - var4.width > 2 * (var6.x - var9.x)) {
  195.                var1 = var20;
  196.             }
  197.          }
  198.  
  199.          var2 = var4.height + var21;
  200.          if (var6.y + var2 + var5.height >= var9.height && var9.height - var4.height < 2 * (var6.y - var9.y)) {
  201.             var2 = 0 - var21 - var5.height;
  202.          }
  203.       }
  204.  
  205.       return new Point(var1, var2);
  206.    }
  207.  
  208.    public int getDelay() {
  209.       return this.delay;
  210.    }
  211.  
  212.    public void setDelay(int var1) {
  213.       if (var1 < 0) {
  214.          throw new IllegalArgumentException("Delay must be a positive integer");
  215.       } else {
  216.          this.delay = var1;
  217.       }
  218.    }
  219.  
  220.    private void ensurePopupMenuCreated() {
  221.       if (this.popupMenu == null) {
  222.          this.popupMenu = new JPopupMenu();
  223.          this.popupMenu.setInvoker(this);
  224.          this.popupListener = this.createWinListener(this.popupMenu);
  225.       }
  226.  
  227.    }
  228.  
  229.    private Point getCustomMenuLocation() {
  230.       return this.customMenuLocation;
  231.    }
  232.  
  233.    public void setMenuLocation(int var1, int var2) {
  234.       this.customMenuLocation = new Point(var1, var2);
  235.       if (this.popupMenu != null) {
  236.          this.popupMenu.setLocation(var1, var2);
  237.       }
  238.  
  239.    }
  240.  
  241.    public JMenuItem add(JMenuItem var1) {
  242.       this.ensurePopupMenuCreated();
  243.       return this.popupMenu.add(var1);
  244.    }
  245.  
  246.    public Component add(Component var1) {
  247.       this.ensurePopupMenuCreated();
  248.       this.popupMenu.add(var1);
  249.       return var1;
  250.    }
  251.  
  252.    public Component add(Component var1, int var2) {
  253.       this.ensurePopupMenuCreated();
  254.       this.popupMenu.add(var1, var2);
  255.       return var1;
  256.    }
  257.  
  258.    public JMenuItem add(String var1) {
  259.       return this.add(new JMenuItem(var1));
  260.    }
  261.  
  262.    public JMenuItem add(Action var1) {
  263.       JMenuItem var2 = this.createActionComponent(var1);
  264.       var2.setAction(var1);
  265.       this.add(var2);
  266.       return var2;
  267.    }
  268.  
  269.    protected JMenuItem createActionComponent(Action var1) {
  270.       1 var2 = new 1(this);
  271.       ((JMenuItem)var2).setHorizontalTextPosition(11);
  272.       ((JMenuItem)var2).setVerticalTextPosition(0);
  273.       return var2;
  274.    }
  275.  
  276.    protected PropertyChangeListener createActionChangeListener(JMenuItem var1) {
  277.       return var1.createActionPropertyChangeListener0(var1.getAction());
  278.    }
  279.  
  280.    public void addSeparator() {
  281.       this.ensurePopupMenuCreated();
  282.       this.popupMenu.addSeparator();
  283.    }
  284.  
  285.    public void insert(String var1, int var2) {
  286.       if (var2 < 0) {
  287.          throw new IllegalArgumentException("index less than zero.");
  288.       } else {
  289.          this.ensurePopupMenuCreated();
  290.          this.popupMenu.insert(new JMenuItem(var1), var2);
  291.       }
  292.    }
  293.  
  294.    public JMenuItem insert(JMenuItem var1, int var2) {
  295.       if (var2 < 0) {
  296.          throw new IllegalArgumentException("index less than zero.");
  297.       } else {
  298.          this.ensurePopupMenuCreated();
  299.          this.popupMenu.insert(var1, var2);
  300.          return var1;
  301.       }
  302.    }
  303.  
  304.    public JMenuItem insert(Action var1, int var2) {
  305.       if (var2 < 0) {
  306.          throw new IllegalArgumentException("index less than zero.");
  307.       } else {
  308.          this.ensurePopupMenuCreated();
  309.          JMenuItem var3 = new JMenuItem(var1);
  310.          var3.setHorizontalTextPosition(11);
  311.          var3.setVerticalTextPosition(0);
  312.          this.popupMenu.insert(var3, var2);
  313.          return var3;
  314.       }
  315.    }
  316.  
  317.    public void insertSeparator(int var1) {
  318.       if (var1 < 0) {
  319.          throw new IllegalArgumentException("index less than zero.");
  320.       } else {
  321.          this.ensurePopupMenuCreated();
  322.          this.popupMenu.insert(new JPopupMenu.Separator(), var1);
  323.       }
  324.    }
  325.  
  326.    public JMenuItem getItem(int var1) {
  327.       if (var1 < 0) {
  328.          throw new IllegalArgumentException("index less than zero.");
  329.       } else {
  330.          Component var2 = this.getMenuComponent(var1);
  331.          if (var2 instanceof JMenuItem) {
  332.             JMenuItem var3 = (JMenuItem)var2;
  333.             return var3;
  334.          } else {
  335.             return null;
  336.          }
  337.       }
  338.    }
  339.  
  340.    public int getItemCount() {
  341.       return this.getMenuComponentCount();
  342.    }
  343.  
  344.    public boolean isTearOff() {
  345.       throw new Error("boolean isTearOff() {} not yet implemented");
  346.    }
  347.  
  348.    public void remove(JMenuItem var1) {
  349.       if (this.popupMenu != null) {
  350.          this.popupMenu.remove(var1);
  351.       }
  352.  
  353.    }
  354.  
  355.    public void remove(int var1) {
  356.       if (var1 < 0) {
  357.          throw new IllegalArgumentException("index less than zero.");
  358.       } else if (var1 > this.getItemCount()) {
  359.          throw new IllegalArgumentException("index greater than the number of items.");
  360.       } else {
  361.          if (this.popupMenu != null) {
  362.             this.popupMenu.remove(var1);
  363.          }
  364.  
  365.       }
  366.    }
  367.  
  368.    public void remove(Component var1) {
  369.       if (this.popupMenu != null) {
  370.          this.popupMenu.remove(var1);
  371.       }
  372.  
  373.    }
  374.  
  375.    public void removeAll() {
  376.       if (this.popupMenu != null) {
  377.          this.popupMenu.removeAll();
  378.       }
  379.  
  380.    }
  381.  
  382.    public int getMenuComponentCount() {
  383.       int var1 = 0;
  384.       if (this.popupMenu != null) {
  385.          var1 = this.popupMenu.getComponentCount();
  386.       }
  387.  
  388.       return var1;
  389.    }
  390.  
  391.    public Component getMenuComponent(int var1) {
  392.       return this.popupMenu != null ? this.popupMenu.getComponent(var1) : null;
  393.    }
  394.  
  395.    public Component[] getMenuComponents() {
  396.       return this.popupMenu != null ? this.popupMenu.getComponents() : new Component[0];
  397.    }
  398.  
  399.    public boolean isTopLevelMenu() {
  400.       return this.getParent() instanceof JMenuBar;
  401.    }
  402.  
  403.    public boolean isMenuComponent(Component var1) {
  404.       if (var1 == this) {
  405.          return true;
  406.       } else {
  407.          if (var1 instanceof JPopupMenu) {
  408.             JPopupMenu var2 = (JPopupMenu)var1;
  409.             if (var2 == this.getPopupMenu()) {
  410.                return true;
  411.             }
  412.          }
  413.  
  414.          int var7 = this.getMenuComponentCount();
  415.          Component[] var3 = this.getMenuComponents();
  416.  
  417.          for(int var4 = 0; var4 < var7; ++var4) {
  418.             Component var5 = var3[var4];
  419.             if (var5 == var1) {
  420.                return true;
  421.             }
  422.  
  423.             if (var5 instanceof JMenu) {
  424.                JMenu var6 = (JMenu)var5;
  425.                if (var6.isMenuComponent(var1)) {
  426.                   return true;
  427.                }
  428.             }
  429.          }
  430.  
  431.          return false;
  432.       }
  433.    }
  434.  
  435.    private Point translateToPopupMenu(Point var1) {
  436.       return this.translateToPopupMenu(var1.x, var1.y);
  437.    }
  438.  
  439.    private Point translateToPopupMenu(int var1, int var2) {
  440.       int var3;
  441.       int var4;
  442.       if (this.getParent() instanceof JPopupMenu) {
  443.          var3 = var1 - this.getSize().width;
  444.          var4 = var2;
  445.       } else {
  446.          var3 = var1;
  447.          var4 = var2 - this.getSize().height;
  448.       }
  449.  
  450.       return new Point(var3, var4);
  451.    }
  452.  
  453.    public JPopupMenu getPopupMenu() {
  454.       this.ensurePopupMenuCreated();
  455.       return this.popupMenu;
  456.    }
  457.  
  458.    public void addMenuListener(MenuListener var1) {
  459.       this.listenerList.add(MenuListener.class, var1);
  460.    }
  461.  
  462.    public void removeMenuListener(MenuListener var1) {
  463.       this.listenerList.remove(MenuListener.class, var1);
  464.    }
  465.  
  466.    public MenuListener[] getMenuListeners() {
  467.       return (MenuListener[])this.listenerList.getListeners(MenuListener.class);
  468.    }
  469.  
  470.    protected void fireMenuSelected() {
  471.       Object[] var1 = this.listenerList.getListenerList();
  472.  
  473.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  474.          if (var1[var2] == MenuListener.class) {
  475.             if (var1[var2 + 1] == null) {
  476.                throw new Error(this.getText() + " has a NULL Listener!! " + var2);
  477.             }
  478.  
  479.             if (this.menuEvent == null) {
  480.                this.menuEvent = new MenuEvent(this);
  481.             }
  482.  
  483.             ((MenuListener)var1[var2 + 1]).menuSelected(this.menuEvent);
  484.          }
  485.       }
  486.  
  487.    }
  488.  
  489.    protected void fireMenuDeselected() {
  490.       Object[] var1 = this.listenerList.getListenerList();
  491.  
  492.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  493.          if (var1[var2] == MenuListener.class) {
  494.             if (var1[var2 + 1] == null) {
  495.                throw new Error(this.getText() + " has a NULL Listener!! " + var2);
  496.             }
  497.  
  498.             if (this.menuEvent == null) {
  499.                this.menuEvent = new MenuEvent(this);
  500.             }
  501.  
  502.             ((MenuListener)var1[var2 + 1]).menuDeselected(this.menuEvent);
  503.          }
  504.       }
  505.  
  506.    }
  507.  
  508.    protected void fireMenuCanceled() {
  509.       Object[] var1 = this.listenerList.getListenerList();
  510.  
  511.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  512.          if (var1[var2] == MenuListener.class) {
  513.             if (var1[var2 + 1] == null) {
  514.                throw new Error(this.getText() + " has a NULL Listener!! " + var2);
  515.             }
  516.  
  517.             if (this.menuEvent == null) {
  518.                this.menuEvent = new MenuEvent(this);
  519.             }
  520.  
  521.             ((MenuListener)var1[var2 + 1]).menuCanceled(this.menuEvent);
  522.          }
  523.       }
  524.  
  525.    }
  526.  
  527.    void configureAcceleratorFromAction(Action var1) {
  528.    }
  529.  
  530.    private ChangeListener createMenuChangeListener() {
  531.       return new MenuChangeListener(this);
  532.    }
  533.  
  534.    protected WinListener createWinListener(JPopupMenu var1) {
  535.       return new WinListener(this, var1);
  536.    }
  537.  
  538.    public void menuSelectionChanged(boolean var1) {
  539.       this.setSelected(var1);
  540.    }
  541.  
  542.    public MenuElement[] getSubElements() {
  543.       if (this.popupMenu == null) {
  544.          return new MenuElement[0];
  545.       } else {
  546.          MenuElement[] var1 = new MenuElement[]{this.popupMenu};
  547.          return var1;
  548.       }
  549.    }
  550.  
  551.    public Component getComponent() {
  552.       return this;
  553.    }
  554.  
  555.    public void applyComponentOrientation(ComponentOrientation var1) {
  556.       super.applyComponentOrientation(var1);
  557.       if (this.popupMenu != null) {
  558.          int var2 = this.getMenuComponentCount();
  559.  
  560.          for(int var3 = 0; var3 < var2; ++var3) {
  561.             this.getMenuComponent(var3).applyComponentOrientation(var1);
  562.          }
  563.  
  564.          this.popupMenu.setComponentOrientation(var1);
  565.       }
  566.  
  567.    }
  568.  
  569.    public void setComponentOrientation(ComponentOrientation var1) {
  570.       super.setComponentOrientation(var1);
  571.       if (this.popupMenu != null) {
  572.          this.popupMenu.setComponentOrientation(var1);
  573.       }
  574.  
  575.    }
  576.  
  577.    public void setAccelerator(KeyStroke var1) {
  578.       throw new Error("setAccelerator() is not defined for JMenu.  Use setMnemonic() instead.");
  579.    }
  580.  
  581.    protected void processKeyEvent(KeyEvent var1) {
  582.       MenuSelectionManager.defaultManager().processKeyEvent(var1);
  583.       if (!var1.isConsumed()) {
  584.          super.processKeyEvent(var1);
  585.       }
  586.    }
  587.  
  588.    public void doClick(int var1) {
  589.       MenuElement[] var2 = this.buildMenuElementArray(this);
  590.       MenuSelectionManager.defaultManager().setSelectedPath(var2);
  591.    }
  592.  
  593.    private MenuElement[] buildMenuElementArray(JMenu var1) {
  594.       Vector var2 = new Vector();
  595.       Object var3 = var1.getPopupMenu();
  596.  
  597.       while(true) {
  598.          while(!(var3 instanceof JPopupMenu)) {
  599.             if (var3 instanceof JMenu) {
  600.                JMenu var5 = (JMenu)var3;
  601.                var2.insertElementAt(var5, 0);
  602.                var3 = var5.getParent();
  603.             } else if (var3 instanceof JMenuBar) {
  604.                JMenuBar var6 = (JMenuBar)var3;
  605.                var2.insertElementAt(var6, 0);
  606.                MenuElement[] var7 = new MenuElement[var2.size()];
  607.                var2.copyInto(var7);
  608.                return var7;
  609.             }
  610.          }
  611.  
  612.          JPopupMenu var4 = (JPopupMenu)var3;
  613.          var2.insertElementAt(var4, 0);
  614.          var3 = var4.getInvoker();
  615.       }
  616.    }
  617.  
  618.    private void writeObject(ObjectOutputStream var1) throws IOException {
  619.       var1.defaultWriteObject();
  620.       if (this.getUIClassID().equals("MenuUI")) {
  621.          byte var2 = JComponent.getWriteObjCounter(this);
  622.          --var2;
  623.          JComponent.setWriteObjCounter(this, var2);
  624.          if (var2 == 0 && this.ui != null) {
  625.             this.ui.installUI(this);
  626.          }
  627.       }
  628.  
  629.    }
  630.  
  631.    protected String paramString() {
  632.       return super.paramString();
  633.    }
  634.  
  635.    public AccessibleContext getAccessibleContext() {
  636.       if (this.accessibleContext == null) {
  637.          this.accessibleContext = new AccessibleJMenu(this);
  638.       }
  639.  
  640.       return this.accessibleContext;
  641.    }
  642.  
  643.    // $FF: synthetic method
  644.    static MenuElement[] access$000(JMenu var0, JMenu var1) {
  645.       return var0.buildMenuElementArray(var1);
  646.    }
  647. }
  648.