home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / awt / im / ExecutableInputMethodManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.3 KB  |  340 lines

  1. package sun.awt.im;
  2.  
  3. import java.awt.AWTException;
  4. import java.awt.CheckboxMenuItem;
  5. import java.awt.Component;
  6. import java.awt.Dialog;
  7. import java.awt.Frame;
  8. import java.awt.Menu;
  9. import java.awt.MenuItem;
  10. import java.awt.PopupMenu;
  11. import java.awt.Toolkit;
  12. import java.awt.event.ActionEvent;
  13. import java.awt.event.ActionListener;
  14. import java.awt.im.spi.InputMethodDescriptor;
  15. import java.security.AccessController;
  16. import java.security.PrivilegedActionException;
  17. import java.util.Hashtable;
  18. import java.util.Locale;
  19. import java.util.Vector;
  20. import sun.awt.SunToolkit;
  21.  
  22. class ExecutableInputMethodManager extends InputMethodManager implements Runnable, ActionListener {
  23.    private InputContext currentInputContext;
  24.    private String triggerMenuString;
  25.    private PopupMenu selectionMenu;
  26.    private static String selectInputMethodMenuTitle;
  27.    private InputMethodLocator hostAdapterLocator;
  28.    private String hostAdapterLabel;
  29.    private String hostAdapterCommand;
  30.    private int javaInputMethodCount;
  31.    private Vector javaInputMethodLocatorList;
  32.    private Component requestComponent;
  33.    private Hashtable preferredInputMethods;
  34.  
  35.    ExecutableInputMethodManager() {
  36.       Toolkit var1 = Toolkit.getDefaultToolkit();
  37.  
  38.       try {
  39.          InputMethodDescriptor var2 = ((SunToolkit)var1).getInputMethodAdapterDescriptor();
  40.          if (var2 != null) {
  41.             this.hostAdapterLocator = new InputMethodLocator(var2, (ClassLoader)null, (Locale)null);
  42.             this.hostAdapterLabel = var2.getInputMethodDisplayName((Locale)null, Locale.getDefault());
  43.             this.hostAdapterCommand = this.hostAdapterLocator.getActionCommandString();
  44.          }
  45.       } catch (AWTException var3) {
  46.       }
  47.  
  48.       this.javaInputMethodLocatorList = new Vector();
  49.       this.initializeInputMethodLocatorList();
  50.    }
  51.  
  52.    synchronized void initialize() {
  53.       selectInputMethodMenuTitle = Toolkit.getProperty("AWT.InputMethodSelectionMenu", "Select Input Method");
  54.       this.triggerMenuString = selectInputMethodMenuTitle;
  55.    }
  56.  
  57.    public void run() {
  58.       while(!this.hasMultipleInputMethods()) {
  59.          try {
  60.             synchronized(this) {
  61.                this.wait();
  62.             }
  63.          } catch (InterruptedException var4) {
  64.          }
  65.       }
  66.  
  67.       this.selectionMenu = new PopupMenu(selectInputMethodMenuTitle);
  68.  
  69.       while(true) {
  70.          this.waitForChangeRequest();
  71.          this.initializeInputMethodLocatorList();
  72.          this.showInputMethodMenu();
  73.       }
  74.    }
  75.  
  76.    void setInputContext(InputContext var1) {
  77.       if (this.currentInputContext != null && var1 != null) {
  78.       }
  79.  
  80.       this.currentInputContext = var1;
  81.    }
  82.  
  83.    public synchronized void notifyChangeRequest(Component var1) {
  84.       if (var1 instanceof Frame || var1 instanceof Dialog) {
  85.          if (this.requestComponent == null) {
  86.             this.requestComponent = var1;
  87.             this.notify();
  88.          }
  89.       }
  90.    }
  91.  
  92.    public String getTriggerMenuString() {
  93.       return this.triggerMenuString;
  94.    }
  95.  
  96.    public synchronized void actionPerformed(ActionEvent var1) {
  97.       String var2 = var1.getActionCommand();
  98.       this.changeInputMethod(var2);
  99.    }
  100.  
  101.    boolean hasMultipleInputMethods() {
  102.       return this.hostAdapterLocator != null && this.javaInputMethodCount > 0 || this.javaInputMethodCount > 1;
  103.    }
  104.  
  105.    private synchronized void waitForChangeRequest() {
  106.       try {
  107.          while(this.requestComponent == null) {
  108.             this.wait();
  109.          }
  110.       } catch (InterruptedException var2) {
  111.       }
  112.  
  113.    }
  114.  
  115.    private void initializeInputMethodLocatorList() {
  116.       Vector var1 = this.javaInputMethodLocatorList;
  117.       synchronized(var1) {
  118.          this.javaInputMethodLocatorList.clear();
  119.  
  120.          try {
  121.             AccessController.doPrivileged(new 1(this));
  122.          } catch (PrivilegedActionException var4) {
  123.             var4.printStackTrace();
  124.          }
  125.  
  126.          this.javaInputMethodCount = this.javaInputMethodLocatorList.size();
  127.       }
  128.  
  129.       if (!this.hasMultipleInputMethods()) {
  130.          this.triggerMenuString = null;
  131.       }
  132.  
  133.    }
  134.  
  135.    private void showInputMethodMenu() {
  136.       if (!this.hasMultipleInputMethods()) {
  137.          this.requestComponent = null;
  138.       } else {
  139.          this.selectionMenu.removeAll();
  140.          String var1 = this.getCurrentSelection();
  141.          if (this.hostAdapterLabel != null) {
  142.             this.addMenuItem(this.selectionMenu, this.hostAdapterLabel, this.hostAdapterCommand, var1);
  143.             this.selectionMenu.addSeparator();
  144.          }
  145.  
  146.          for(int var2 = 0; var2 < this.javaInputMethodLocatorList.size(); ++var2) {
  147.             InputMethodLocator var3 = (InputMethodLocator)this.javaInputMethodLocatorList.get(var2);
  148.             InputMethodDescriptor var4 = var3.getDescriptor();
  149.             String var5 = var4.getInputMethodDisplayName((Locale)null, Locale.getDefault());
  150.             String var6 = var3.getActionCommandString();
  151.             Locale[] var7 = null;
  152.  
  153.             int var8;
  154.             try {
  155.                var7 = var4.getAvailableLocales();
  156.                var8 = var7.length;
  157.             } catch (AWTException var16) {
  158.                var8 = 0;
  159.             }
  160.  
  161.             if (var8 == 0) {
  162.                this.addMenuItem(this.selectionMenu, var5, (String)null, var1);
  163.             } else if (var8 == 1) {
  164.                if (var4.hasDynamicLocaleList()) {
  165.                   var5 = var4.getInputMethodDisplayName(var7[0], Locale.getDefault());
  166.                   var6 = var3.deriveLocator(var7[0]).getActionCommandString();
  167.                }
  168.  
  169.                this.addMenuItem(this.selectionMenu, var5, var6, var1);
  170.             } else {
  171.                Menu var9 = new Menu(var5);
  172.                this.selectionMenu.add(var9);
  173.  
  174.                for(int var10 = 0; var10 < var8; ++var10) {
  175.                   Locale var11 = var7[var10];
  176.                   String var12 = this.getLocaleName(var11);
  177.                   String var13 = var3.deriveLocator(var11).getActionCommandString();
  178.                   this.addMenuItem(var9, var12, var13, var1);
  179.                }
  180.             }
  181.          }
  182.  
  183.          synchronized(this) {
  184.             this.requestComponent.add(this.selectionMenu);
  185.             this.selectionMenu.show(this.requestComponent, 60, 80);
  186.             this.requestComponent = null;
  187.          }
  188.       }
  189.    }
  190.  
  191.    private String getCurrentSelection() {
  192.       InputContext var1 = this.currentInputContext;
  193.       if (var1 != null) {
  194.          InputMethodLocator var2 = var1.getInputMethodLocator();
  195.          if (var2 != null) {
  196.             return var2.getActionCommandString();
  197.          }
  198.       }
  199.  
  200.       return null;
  201.    }
  202.  
  203.    private MenuItem addMenuItem(Menu var1, String var2, String var3, String var4) {
  204.       Object var5;
  205.       if (isSelected(var3, var4)) {
  206.          var5 = new CheckboxMenuItem(var2, true);
  207.       } else {
  208.          var5 = new MenuItem(var2);
  209.       }
  210.  
  211.       ((MenuItem)var5).setActionCommand(var3);
  212.       ((MenuItem)var5).addActionListener(this);
  213.       ((MenuItem)var5).setEnabled(var3 != null);
  214.       var1.add((MenuItem)var5);
  215.       return (MenuItem)var5;
  216.    }
  217.  
  218.    private static boolean isSelected(String var0, String var1) {
  219.       if (var0 != null && var1 != null) {
  220.          if (var0.equals(var1)) {
  221.             return true;
  222.          } else {
  223.             int var2 = var1.indexOf(10);
  224.             return var2 != -1 && var1.substring(0, var2).equals(var0);
  225.          }
  226.       } else {
  227.          return false;
  228.       }
  229.    }
  230.  
  231.    private String getLocaleName(Locale var1) {
  232.       String var2 = var1.toString();
  233.       String var3 = Toolkit.getProperty("AWT.InputMethodLanguage." + var2, (String)null);
  234.       if (var3 == null) {
  235.          var3 = var1.getDisplayName();
  236.          if (var3 == null || var3.length() == 0) {
  237.             var3 = var2;
  238.          }
  239.       }
  240.  
  241.       return var3;
  242.    }
  243.  
  244.    private void changeInputMethod(String var1) {
  245.       InputMethodLocator var2 = null;
  246.       if (this.hostAdapterCommand != null && this.hostAdapterCommand.equals(var1)) {
  247.          var2 = this.hostAdapterLocator;
  248.       } else {
  249.          String var3 = var1;
  250.          String var4 = null;
  251.          int var5 = var1.indexOf(10);
  252.          if (var5 != -1) {
  253.             var4 = var1.substring(var5 + 1);
  254.             var3 = var1.substring(0, var5);
  255.          }
  256.  
  257.          for(int var6 = 0; var6 < this.javaInputMethodLocatorList.size(); ++var6) {
  258.             InputMethodLocator var7 = (InputMethodLocator)this.javaInputMethodLocatorList.get(var6);
  259.             String var8 = var7.getActionCommandString();
  260.             if (var8.equals(var3)) {
  261.                var2 = var7;
  262.                break;
  263.             }
  264.          }
  265.  
  266.          if (var2 != null && var4 != null) {
  267.             String var12 = "";
  268.             String var14 = "";
  269.             String var9 = "";
  270.             int var10 = var4.indexOf(95);
  271.             if (var10 == -1) {
  272.                var12 = var4;
  273.             } else {
  274.                var12 = var4.substring(0, var10);
  275.                int var11 = var10 + 1;
  276.                var10 = var4.indexOf(95, var11);
  277.                if (var10 == -1) {
  278.                   var14 = var4.substring(var11);
  279.                } else {
  280.                   var14 = var4.substring(var11, var10);
  281.                   var9 = var4.substring(var10 + 1);
  282.                }
  283.             }
  284.  
  285.             Locale var16 = new Locale(var12, var14, var9);
  286.             var2 = var2.deriveLocator(var16);
  287.             if (this.preferredInputMethods == null) {
  288.                this.preferredInputMethods = new Hashtable();
  289.             }
  290.  
  291.             this.preferredInputMethods.put(var4, var2);
  292.          }
  293.       }
  294.  
  295.       if (var2 != null) {
  296.          if (this.currentInputContext != null) {
  297.             this.currentInputContext.changeInputMethod(var2);
  298.          }
  299.  
  300.       }
  301.    }
  302.  
  303.    InputMethodLocator findInputMethod(Locale var1) {
  304.       int var4;
  305.       if (this.preferredInputMethods != null) {
  306.          for(String var2 = var1.toString(); !var2.equals(""); var2 = var2.substring(0, var4)) {
  307.             InputMethodLocator var3 = (InputMethodLocator)this.preferredInputMethods.get(var2);
  308.             if (var3 != null) {
  309.                return var3;
  310.             }
  311.  
  312.             var4 = var2.lastIndexOf(95);
  313.             if (var4 == -1) {
  314.                break;
  315.             }
  316.          }
  317.       }
  318.  
  319.       if (this.hostAdapterLocator != null && this.hostAdapterLocator.isLocaleAvailable(var1)) {
  320.          return this.hostAdapterLocator.deriveLocator(var1);
  321.       } else {
  322.          this.initializeInputMethodLocatorList();
  323.  
  324.          for(int var5 = 0; var5 < this.javaInputMethodLocatorList.size(); ++var5) {
  325.             InputMethodLocator var6 = (InputMethodLocator)this.javaInputMethodLocatorList.get(var5);
  326.             if (var6.isLocaleAvailable(var1)) {
  327.                return var6.deriveLocator(var1);
  328.             }
  329.          }
  330.  
  331.          return null;
  332.       }
  333.    }
  334.  
  335.    // $FF: synthetic method
  336.    static Vector access$000(ExecutableInputMethodManager var0) {
  337.       return var0.javaInputMethodLocatorList;
  338.    }
  339. }
  340.