home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / JMenu.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  13.5 KB  |  582 lines

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