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 / java / awt / AWTKeyStroke.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.1 KB  |  411 lines

  1. package java.awt;
  2.  
  3. import java.awt.event.KeyEvent;
  4. import java.io.ObjectStreamException;
  5. import java.io.Serializable;
  6. import java.lang.reflect.Constructor;
  7. import java.lang.reflect.Field;
  8. import java.lang.reflect.InvocationTargetException;
  9. import java.security.AccessController;
  10. import java.util.Collections;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. import java.util.StringTokenizer;
  14.  
  15. public class AWTKeyStroke implements Serializable {
  16.    static final long serialVersionUID = -6430539691155161871L;
  17.    private static Map cache;
  18.    private static AWTKeyStroke cacheKey;
  19.    private static Constructor ctor = getCtor(AWTKeyStroke.class);
  20.    private static Map modifierKeywords;
  21.    private static VKCollection vks;
  22.    private char keyChar = '\uffff';
  23.    private int keyCode = 0;
  24.    private int modifiers;
  25.    private boolean onKeyRelease;
  26.  
  27.    protected AWTKeyStroke() {
  28.    }
  29.  
  30.    protected AWTKeyStroke(char var1, int var2, int var3, boolean var4) {
  31.       this.keyChar = var1;
  32.       this.keyCode = var2;
  33.       this.modifiers = var3;
  34.       this.onKeyRelease = var4;
  35.    }
  36.  
  37.    protected static void registerSubclass(Class<?> var0) {
  38.       if (var0 == null) {
  39.          throw new IllegalArgumentException("subclass cannot be null");
  40.       } else if (!ctor.getDeclaringClass().equals(var0)) {
  41.          if (!AWTKeyStroke.class.isAssignableFrom(var0)) {
  42.             throw new ClassCastException("subclass is not derived from AWTKeyStroke");
  43.          } else {
  44.             Constructor var1 = getCtor(var0);
  45.             String var2 = "subclass could not be instantiated";
  46.             if (var1 == null) {
  47.                throw new IllegalArgumentException(var2);
  48.             } else {
  49.                try {
  50.                   AWTKeyStroke var3 = (AWTKeyStroke)var1.newInstance((Object[])null);
  51.                   if (var3 == null) {
  52.                      throw new IllegalArgumentException(var2);
  53.                   }
  54.                } catch (NoSuchMethodError var6) {
  55.                   throw new IllegalArgumentException(var2);
  56.                } catch (ExceptionInInitializerError var7) {
  57.                   throw new IllegalArgumentException(var2);
  58.                } catch (InstantiationException var8) {
  59.                   throw new IllegalArgumentException(var2);
  60.                } catch (IllegalAccessException var9) {
  61.                   throw new IllegalArgumentException(var2);
  62.                } catch (InvocationTargetException var10) {
  63.                   throw new IllegalArgumentException(var2);
  64.                }
  65.  
  66.                synchronized(AWTKeyStroke.class) {
  67.                   ctor = var1;
  68.                   cache = null;
  69.                   cacheKey = null;
  70.                }
  71.             }
  72.          }
  73.       }
  74.    }
  75.  
  76.    private static Constructor getCtor(Class var0) {
  77.       Object var1 = AccessController.doPrivileged(new 1(var0));
  78.       return (Constructor)var1;
  79.    }
  80.  
  81.    private static synchronized AWTKeyStroke getCachedStroke(char var0, int var1, int var2, boolean var3) {
  82.       if (cache == null) {
  83.          cache = new HashMap();
  84.       }
  85.  
  86.       if (cacheKey == null) {
  87.          try {
  88.             cacheKey = (AWTKeyStroke)ctor.newInstance((Object[])null);
  89.          } catch (InstantiationException var5) {
  90.             assert false;
  91.          } catch (IllegalAccessException var6) {
  92.             assert false;
  93.          } catch (InvocationTargetException var7) {
  94.             assert false;
  95.          }
  96.       }
  97.  
  98.       cacheKey.keyChar = var0;
  99.       cacheKey.keyCode = var1;
  100.       cacheKey.modifiers = mapNewModifiers(mapOldModifiers(var2));
  101.       cacheKey.onKeyRelease = var3;
  102.       AWTKeyStroke var4 = (AWTKeyStroke)cache.get(cacheKey);
  103.       if (var4 == null) {
  104.          var4 = cacheKey;
  105.          cache.put(var4, var4);
  106.          cacheKey = null;
  107.       }
  108.  
  109.       return var4;
  110.    }
  111.  
  112.    public static AWTKeyStroke getAWTKeyStroke(char var0) {
  113.       return getCachedStroke(var0, 0, 0, false);
  114.    }
  115.  
  116.    public static AWTKeyStroke getAWTKeyStroke(Character var0, int var1) {
  117.       if (var0 == null) {
  118.          throw new IllegalArgumentException("keyChar cannot be null");
  119.       } else {
  120.          return getCachedStroke(var0, 0, var1, false);
  121.       }
  122.    }
  123.  
  124.    public static AWTKeyStroke getAWTKeyStroke(int var0, int var1, boolean var2) {
  125.       return getCachedStroke('\uffff', var0, var1, var2);
  126.    }
  127.  
  128.    public static AWTKeyStroke getAWTKeyStroke(int var0, int var1) {
  129.       return getCachedStroke('\uffff', var0, var1, false);
  130.    }
  131.  
  132.    public static AWTKeyStroke getAWTKeyStrokeForEvent(KeyEvent var0) {
  133.       int var1 = var0.getID();
  134.       switch (var1) {
  135.          case 400:
  136.             return getCachedStroke(var0.getKeyChar(), 0, var0.getModifiers(), false);
  137.          case 401:
  138.          case 402:
  139.             return getCachedStroke('\uffff', var0.getKeyCode(), var0.getModifiers(), var1 == 402);
  140.          default:
  141.             return null;
  142.       }
  143.    }
  144.  
  145.    public static AWTKeyStroke getAWTKeyStroke(String var0) {
  146.       if (var0 == null) {
  147.          throw new IllegalArgumentException("String cannot be null");
  148.       } else {
  149.          StringTokenizer var2 = new StringTokenizer(var0, " ");
  150.          int var3 = 0;
  151.          boolean var4 = false;
  152.          boolean var5 = false;
  153.          boolean var6 = false;
  154.          if (modifierKeywords == null) {
  155.             synchronized(AWTKeyStroke.class) {
  156.                if (modifierKeywords == null) {
  157.                   HashMap var8 = new HashMap(8, 1.0F);
  158.                   var8.put("shift", 65);
  159.                   var8.put("control", 130);
  160.                   var8.put("ctrl", 130);
  161.                   var8.put("meta", 260);
  162.                   var8.put("alt", 520);
  163.                   var8.put("altGraph", 8224);
  164.                   var8.put("button1", 1024);
  165.                   var8.put("button2", 2048);
  166.                   var8.put("button3", 4096);
  167.                   modifierKeywords = Collections.synchronizedMap(var8);
  168.                }
  169.             }
  170.          }
  171.  
  172.          int var13 = var2.countTokens();
  173.  
  174.          for(int var14 = 1; var14 <= var13; ++var14) {
  175.             String var9 = var2.nextToken();
  176.             if (var5) {
  177.                if (var9.length() == 1 && var14 == var13) {
  178.                   return getCachedStroke(var9.charAt(0), 0, var3, false);
  179.                }
  180.  
  181.                throw new IllegalArgumentException("String formatted incorrectly");
  182.             }
  183.  
  184.             if (var6 || var4 || var14 == var13) {
  185.                if (var14 != var13) {
  186.                   throw new IllegalArgumentException("String formatted incorrectly");
  187.                } else {
  188.                   String var15 = "VK_" + var9;
  189.                   int var11 = getVKValue(var15);
  190.                   return getCachedStroke('\uffff', var11, var3, var4);
  191.                }
  192.             }
  193.  
  194.             if (var9.equals("released")) {
  195.                var4 = true;
  196.             } else if (var9.equals("pressed")) {
  197.                var6 = true;
  198.             } else if (var9.equals("typed")) {
  199.                var5 = true;
  200.             } else {
  201.                Integer var10 = (Integer)modifierKeywords.get(var9);
  202.                if (var10 == null) {
  203.                   throw new IllegalArgumentException("String formatted incorrectly");
  204.                }
  205.  
  206.                var3 |= var10;
  207.             }
  208.          }
  209.  
  210.          throw new IllegalArgumentException("String formatted incorrectly");
  211.       }
  212.    }
  213.  
  214.    private static VKCollection getVKCollection() {
  215.       if (vks == null) {
  216.          vks = new VKCollection();
  217.       }
  218.  
  219.       return vks;
  220.    }
  221.  
  222.    private static int getVKValue(String var0) {
  223.       VKCollection var1 = getVKCollection();
  224.       Integer var2 = var1.findCode(var0);
  225.       if (var2 == null) {
  226.          int var3 = 0;
  227.  
  228.          try {
  229.             var3 = KeyEvent.class.getField(var0).getInt(KeyEvent.class);
  230.          } catch (NoSuchFieldException var6) {
  231.             throw new IllegalArgumentException("String formatted incorrectly");
  232.          } catch (IllegalAccessException var7) {
  233.             throw new IllegalArgumentException("String formatted incorrectly");
  234.          }
  235.  
  236.          var2 = var3;
  237.          var1.put(var0, var2);
  238.       }
  239.  
  240.       return var2;
  241.    }
  242.  
  243.    public final char getKeyChar() {
  244.       return this.keyChar;
  245.    }
  246.  
  247.    public final int getKeyCode() {
  248.       return this.keyCode;
  249.    }
  250.  
  251.    public final int getModifiers() {
  252.       return this.modifiers;
  253.    }
  254.  
  255.    public final boolean isOnKeyRelease() {
  256.       return this.onKeyRelease;
  257.    }
  258.  
  259.    public final int getKeyEventType() {
  260.       if (this.keyCode == 0) {
  261.          return 400;
  262.       } else {
  263.          return this.onKeyRelease ? 402 : 401;
  264.       }
  265.    }
  266.  
  267.    public int hashCode() {
  268.       return (this.keyChar + 1) * 2 * (this.keyCode + 1) * (this.modifiers + 1) + (this.onKeyRelease ? 1 : 2);
  269.    }
  270.  
  271.    public final boolean equals(Object var1) {
  272.       if (!(var1 instanceof AWTKeyStroke)) {
  273.          return false;
  274.       } else {
  275.          AWTKeyStroke var2 = (AWTKeyStroke)var1;
  276.          return var2.keyChar == this.keyChar && var2.keyCode == this.keyCode && var2.onKeyRelease == this.onKeyRelease && var2.modifiers == this.modifiers;
  277.       }
  278.    }
  279.  
  280.    public String toString() {
  281.       return this.keyCode == 0 ? getModifiersText(this.modifiers) + "typed " + this.keyChar : getModifiersText(this.modifiers) + (this.onKeyRelease ? "released" : "pressed") + " " + getVKText(this.keyCode);
  282.    }
  283.  
  284.    static String getModifiersText(int var0) {
  285.       StringBuffer var1 = new StringBuffer();
  286.       if ((var0 & 64) != 0) {
  287.          var1.append("shift ");
  288.       }
  289.  
  290.       if ((var0 & 128) != 0) {
  291.          var1.append("ctrl ");
  292.       }
  293.  
  294.       if ((var0 & 256) != 0) {
  295.          var1.append("meta ");
  296.       }
  297.  
  298.       if ((var0 & 512) != 0) {
  299.          var1.append("alt ");
  300.       }
  301.  
  302.       if ((var0 & 8192) != 0) {
  303.          var1.append("altGraph ");
  304.       }
  305.  
  306.       if ((var0 & 1024) != 0) {
  307.          var1.append("button1 ");
  308.       }
  309.  
  310.       if ((var0 & 2048) != 0) {
  311.          var1.append("button2 ");
  312.       }
  313.  
  314.       if ((var0 & 4096) != 0) {
  315.          var1.append("button3 ");
  316.       }
  317.  
  318.       return var1.toString();
  319.    }
  320.  
  321.    static String getVKText(int var0) {
  322.       VKCollection var1 = getVKCollection();
  323.       Integer var2 = var0;
  324.       String var3 = var1.findName(var2);
  325.       if (var3 != null) {
  326.          return var3.substring(3);
  327.       } else {
  328.          byte var4 = 25;
  329.          Field[] var5 = KeyEvent.class.getDeclaredFields();
  330.  
  331.          for(int var6 = 0; var6 < var5.length; ++var6) {
  332.             try {
  333.                if (var5[var6].getModifiers() == var4 && var5[var6].getType() == Integer.TYPE && var5[var6].getName().startsWith("VK_") && var5[var6].getInt(KeyEvent.class) == var0) {
  334.                   var3 = var5[var6].getName();
  335.                   var1.put(var3, var2);
  336.                   return var3.substring(3);
  337.                }
  338.             } catch (IllegalAccessException var8) {
  339.                assert false;
  340.             }
  341.          }
  342.  
  343.          return "UNKNOWN";
  344.       }
  345.    }
  346.  
  347.    protected Object readResolve() throws ObjectStreamException {
  348.       synchronized(AWTKeyStroke.class) {
  349.          Class var2 = this.getClass();
  350.          if (!var2.equals(ctor.getDeclaringClass())) {
  351.             registerSubclass(var2);
  352.          }
  353.  
  354.          return getCachedStroke(this.keyChar, this.keyCode, this.modifiers, this.onKeyRelease);
  355.       }
  356.    }
  357.  
  358.    private static int mapOldModifiers(int var0) {
  359.       if ((var0 & 1) != 0) {
  360.          var0 |= 64;
  361.       }
  362.  
  363.       if ((var0 & 8) != 0) {
  364.          var0 |= 512;
  365.       }
  366.  
  367.       if ((var0 & 32) != 0) {
  368.          var0 |= 8192;
  369.       }
  370.  
  371.       if ((var0 & 2) != 0) {
  372.          var0 |= 128;
  373.       }
  374.  
  375.       if ((var0 & 4) != 0) {
  376.          var0 |= 256;
  377.       }
  378.  
  379.       var0 &= 16320;
  380.       return var0;
  381.    }
  382.  
  383.    private static int mapNewModifiers(int var0) {
  384.       if ((var0 & 64) != 0) {
  385.          var0 |= 1;
  386.       }
  387.  
  388.       if ((var0 & 512) != 0) {
  389.          var0 |= 8;
  390.       }
  391.  
  392.       if ((var0 & 8192) != 0) {
  393.          var0 |= 32;
  394.       }
  395.  
  396.       if ((var0 & 128) != 0) {
  397.          var0 |= 2;
  398.       }
  399.  
  400.       if ((var0 & 256) != 0) {
  401.          var0 |= 4;
  402.       }
  403.  
  404.       return var0;
  405.    }
  406.  
  407.    static {
  408.       Toolkit.loadLibraries();
  409.    }
  410. }
  411.