home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / MenuSelectionManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  4.6 KB  |  223 lines

  1. package com.sun.java.swing;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.Component;
  5. import java.awt.Point;
  6. import java.awt.Rectangle;
  7. import java.awt.event.InputEvent;
  8. import java.awt.event.KeyEvent;
  9. import java.awt.event.MouseEvent;
  10. import java.util.EventObject;
  11. import java.util.Vector;
  12.  
  13. public class MenuSelectionManager {
  14.    private static final MenuSelectionManager instance = new MenuSelectionManager();
  15.    Vector selection = new Vector();
  16.  
  17.    public static MenuSelectionManager defaultManager() {
  18.       return instance;
  19.    }
  20.  
  21.    public void setSelectedPath(MenuElement[] var1) {
  22.       int var4 = this.selection.size();
  23.       int var5 = 0;
  24.       if (var1 == null) {
  25.          var1 = new MenuElement[0];
  26.       }
  27.  
  28.       int var2 = 0;
  29.  
  30.       for(int var3 = var1.length; var2 < var3 && var2 < var4 && (MenuElement)this.selection.elementAt(var2) == var1[var2]; ++var2) {
  31.          ++var5;
  32.       }
  33.  
  34.       for(int var6 = var4 - 1; var6 >= var5; --var6) {
  35.          ((MenuElement)this.selection.elementAt(var6)).menuSelectionChanged(false);
  36.          this.selection.removeElementAt(var6);
  37.       }
  38.  
  39.       var2 = var5;
  40.  
  41.       for(int var8 = var1.length; var2 < var8; ++var2) {
  42.          var1[var2].menuSelectionChanged(true);
  43.          this.selection.addElement(var1[var2]);
  44.       }
  45.  
  46.    }
  47.  
  48.    public MenuElement[] getSelectedPath() {
  49.       MenuElement[] var1 = new MenuElement[this.selection.size()];
  50.       int var2 = 0;
  51.  
  52.       for(int var3 = this.selection.size(); var2 < var3; ++var2) {
  53.          var1[var2] = (MenuElement)this.selection.elementAt(var2);
  54.       }
  55.  
  56.       return var1;
  57.    }
  58.  
  59.    public void clearSelectedPath() {
  60.       this.setSelectedPath((MenuElement[])null);
  61.    }
  62.  
  63.    public void processMouseEvent(MouseEvent var1) {
  64.       Point var4 = var1.getPoint();
  65.       Component var17 = (Component)((EventObject)var1).getSource();
  66.       if (!var17.isShowing()) {
  67.          System.err.println("Received a mouse event from a non-showing Component " + var17);
  68.       } else {
  69.          SwingUtilities.convertPointToScreen(var4, var17);
  70.          int var2 = var4.x;
  71.          int var3 = var4.y;
  72.          Vector var15 = (Vector)this.selection.clone();
  73.          int var16 = var15.size();
  74.  
  75.          for(int var5 = var16 - 1; var5 >= 0; --var5) {
  76.             MenuElement var12 = (MenuElement)var15.elementAt(var5);
  77.             MenuElement[] var13 = var12.getSubElements();
  78.             MenuElement[] var14 = null;
  79.             int var6 = 0;
  80.  
  81.             for(int var7 = var13.length; var6 < var7; ++var6) {
  82.                if (var13[var6] != null) {
  83.                   Component var8 = var13[var6].getComponent();
  84.                   if (var8.isShowing()) {
  85.                      int var10;
  86.                      int var11;
  87.                      if (var8 instanceof JComponent) {
  88.                         var10 = ((JComponent)var8).getWidth();
  89.                         var11 = ((JComponent)var8).getHeight();
  90.                      } else {
  91.                         Rectangle var9 = var8.getBounds();
  92.                         var10 = var9.width;
  93.                         var11 = var9.height;
  94.                      }
  95.  
  96.                      var4.x = var2;
  97.                      var4.y = var3;
  98.                      SwingUtilities.convertPointFromScreen(var4, var8);
  99.                      if (var5 < var16 - 1 && var15.elementAt(var5 + 1) == var13[var6] || var4.x >= 0 && var4.x < var10 && var4.y >= 0 && var4.y < var11) {
  100.                         if (var14 == null) {
  101.                            var14 = new MenuElement[var5 + 2];
  102.  
  103.                            for(int var18 = 0; var18 <= var5; ++var18) {
  104.                               var14[var18] = (MenuElement)var15.elementAt(var18);
  105.                            }
  106.                         }
  107.  
  108.                         var14[var5 + 1] = var13[var6];
  109.                         var13[var6].processMouseEvent(new MouseEvent(var8, ((AWTEvent)var1).getID(), ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var4.x, var4.y, var1.getClickCount(), var1.isPopupTrigger()), var14, this);
  110.                      }
  111.                   }
  112.                }
  113.             }
  114.          }
  115.  
  116.       }
  117.    }
  118.  
  119.    public Component componentForPoint(Component var1, Point var2) {
  120.       Point var5 = var2;
  121.       SwingUtilities.convertPointToScreen(var2, var1);
  122.       int var3 = var2.x;
  123.       int var4 = var2.y;
  124.       Vector var15 = (Vector)this.selection.clone();
  125.       int var16 = var15.size();
  126.  
  127.       for(int var6 = var16 - 1; var6 >= 0; --var6) {
  128.          MenuElement var13 = (MenuElement)var15.elementAt(var6);
  129.          MenuElement[] var14 = var13.getSubElements();
  130.          int var7 = 0;
  131.  
  132.          for(int var8 = var14.length; var7 < var8; ++var7) {
  133.             if (var14[var7] != null) {
  134.                Component var9 = var14[var7].getComponent();
  135.                if (var9.isShowing()) {
  136.                   int var11;
  137.                   int var12;
  138.                   if (var9 instanceof JComponent) {
  139.                      var11 = ((JComponent)var9).getWidth();
  140.                      var12 = ((JComponent)var9).getHeight();
  141.                   } else {
  142.                      Rectangle var10 = var9.getBounds();
  143.                      var11 = var10.width;
  144.                      var12 = var10.height;
  145.                   }
  146.  
  147.                   var5.x = var3;
  148.                   var5.y = var4;
  149.                   SwingUtilities.convertPointFromScreen(var5, var9);
  150.                   if (var5.x >= 0 && var5.x < var11 && var5.y >= 0 && var5.y < var12) {
  151.                      return var9;
  152.                   }
  153.                }
  154.             }
  155.          }
  156.       }
  157.  
  158.       return null;
  159.    }
  160.  
  161.    public void processKeyEvent(KeyEvent var1) {
  162.       Vector var2 = (Vector)this.selection.clone();
  163.       int var3 = var2.size();
  164.  
  165.       for(int var4 = var3 - 1; var4 >= 0; --var4) {
  166.          MenuElement var7 = (MenuElement)var2.elementAt(var4);
  167.          MenuElement[] var8 = var7.getSubElements();
  168.          MenuElement[] var9 = null;
  169.          int var5 = 0;
  170.  
  171.          for(int var6 = var8.length; var5 < var6; ++var5) {
  172.             if (var8[var5] != null) {
  173.                Component var10 = var8[var5].getComponent();
  174.                if (var10.isShowing()) {
  175.                   if (var9 == null) {
  176.                      var9 = new MenuElement[var4 + 2];
  177.  
  178.                      for(int var11 = 0; var11 <= var4; ++var11) {
  179.                         var9[var11] = (MenuElement)var2.elementAt(var11);
  180.                      }
  181.                   }
  182.  
  183.                   var9[var4 + 1] = var8[var5];
  184.                   var8[var5].processKeyEvent(var1, var9, this);
  185.                   if (((InputEvent)var1).isConsumed()) {
  186.                      return;
  187.                   }
  188.                }
  189.             }
  190.          }
  191.       }
  192.  
  193.    }
  194.  
  195.    public boolean isComponentPartOfCurrentMenu(Component var1) {
  196.       if (this.selection.size() > 0) {
  197.          MenuElement var2 = (MenuElement)this.selection.elementAt(0);
  198.          return this.isComponentPartOfCurrentMenu(var2, var1);
  199.       } else {
  200.          return false;
  201.       }
  202.    }
  203.  
  204.    private boolean isComponentPartOfCurrentMenu(MenuElement var1, Component var2) {
  205.       if (var1 == null) {
  206.          return false;
  207.       } else if (var1.getComponent() == var2) {
  208.          return true;
  209.       } else {
  210.          MenuElement[] var3 = var1.getSubElements();
  211.          int var4 = 0;
  212.  
  213.          for(int var5 = var3.length; var4 < var5; ++var4) {
  214.             if (this.isComponentPartOfCurrentMenu(var3[var4], var2)) {
  215.                return true;
  216.             }
  217.          }
  218.  
  219.          return false;
  220.       }
  221.    }
  222. }
  223.