home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / JMenu.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  12.3 KB  |  656 lines

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