home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.im;
-
- import java.awt.AWTException;
- import java.awt.CheckboxMenuItem;
- import java.awt.Component;
- import java.awt.Dialog;
- import java.awt.Frame;
- import java.awt.Menu;
- import java.awt.MenuItem;
- import java.awt.PopupMenu;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.im.spi.InputMethodDescriptor;
- import java.security.AccessController;
- import java.security.PrivilegedActionException;
- import java.util.Hashtable;
- import java.util.Locale;
- import java.util.Vector;
- import sun.awt.SunToolkit;
-
- class ExecutableInputMethodManager extends InputMethodManager implements Runnable, ActionListener {
- private InputContext currentInputContext;
- private String triggerMenuString;
- private PopupMenu selectionMenu;
- private static String selectInputMethodMenuTitle;
- private InputMethodLocator hostAdapterLocator;
- private String hostAdapterLabel;
- private String hostAdapterCommand;
- private int javaInputMethodCount;
- private Vector javaInputMethodLocatorList;
- private Component requestComponent;
- private Hashtable preferredInputMethods;
-
- ExecutableInputMethodManager() {
- Toolkit var1 = Toolkit.getDefaultToolkit();
-
- try {
- InputMethodDescriptor var2 = ((SunToolkit)var1).getInputMethodAdapterDescriptor();
- if (var2 != null) {
- this.hostAdapterLocator = new InputMethodLocator(var2, (ClassLoader)null, (Locale)null);
- this.hostAdapterLabel = var2.getInputMethodDisplayName((Locale)null, Locale.getDefault());
- this.hostAdapterCommand = this.hostAdapterLocator.getActionCommandString();
- }
- } catch (AWTException var3) {
- }
-
- this.javaInputMethodLocatorList = new Vector();
- this.initializeInputMethodLocatorList();
- }
-
- synchronized void initialize() {
- selectInputMethodMenuTitle = Toolkit.getProperty("AWT.InputMethodSelectionMenu", "Select Input Method");
- this.triggerMenuString = selectInputMethodMenuTitle;
- }
-
- public void run() {
- while(!this.hasMultipleInputMethods()) {
- try {
- synchronized(this) {
- this.wait();
- }
- } catch (InterruptedException var4) {
- }
- }
-
- this.selectionMenu = new PopupMenu(selectInputMethodMenuTitle);
-
- while(true) {
- this.waitForChangeRequest();
- this.initializeInputMethodLocatorList();
- this.showInputMethodMenu();
- }
- }
-
- void setInputContext(InputContext var1) {
- if (this.currentInputContext != null && var1 != null) {
- }
-
- this.currentInputContext = var1;
- }
-
- public synchronized void notifyChangeRequest(Component var1) {
- if (var1 instanceof Frame || var1 instanceof Dialog) {
- if (this.requestComponent == null) {
- this.requestComponent = var1;
- this.notify();
- }
- }
- }
-
- public String getTriggerMenuString() {
- return this.triggerMenuString;
- }
-
- public synchronized void actionPerformed(ActionEvent var1) {
- String var2 = var1.getActionCommand();
- this.changeInputMethod(var2);
- }
-
- boolean hasMultipleInputMethods() {
- return this.hostAdapterLocator != null && this.javaInputMethodCount > 0 || this.javaInputMethodCount > 1;
- }
-
- private synchronized void waitForChangeRequest() {
- try {
- while(this.requestComponent == null) {
- this.wait();
- }
- } catch (InterruptedException var2) {
- }
-
- }
-
- private void initializeInputMethodLocatorList() {
- Vector var1 = this.javaInputMethodLocatorList;
- synchronized(var1) {
- this.javaInputMethodLocatorList.clear();
-
- try {
- AccessController.doPrivileged(new 1(this));
- } catch (PrivilegedActionException var4) {
- var4.printStackTrace();
- }
-
- this.javaInputMethodCount = this.javaInputMethodLocatorList.size();
- }
-
- if (!this.hasMultipleInputMethods()) {
- this.triggerMenuString = null;
- }
-
- }
-
- private void showInputMethodMenu() {
- if (!this.hasMultipleInputMethods()) {
- this.requestComponent = null;
- } else {
- this.selectionMenu.removeAll();
- String var1 = this.getCurrentSelection();
- if (this.hostAdapterLabel != null) {
- this.addMenuItem(this.selectionMenu, this.hostAdapterLabel, this.hostAdapterCommand, var1);
- this.selectionMenu.addSeparator();
- }
-
- for(int var2 = 0; var2 < this.javaInputMethodLocatorList.size(); ++var2) {
- InputMethodLocator var3 = (InputMethodLocator)this.javaInputMethodLocatorList.get(var2);
- InputMethodDescriptor var4 = var3.getDescriptor();
- String var5 = var4.getInputMethodDisplayName((Locale)null, Locale.getDefault());
- String var6 = var3.getActionCommandString();
- Locale[] var7 = null;
-
- int var8;
- try {
- var7 = var4.getAvailableLocales();
- var8 = var7.length;
- } catch (AWTException var16) {
- var8 = 0;
- }
-
- if (var8 == 0) {
- this.addMenuItem(this.selectionMenu, var5, (String)null, var1);
- } else if (var8 == 1) {
- if (var4.hasDynamicLocaleList()) {
- var5 = var4.getInputMethodDisplayName(var7[0], Locale.getDefault());
- var6 = var3.deriveLocator(var7[0]).getActionCommandString();
- }
-
- this.addMenuItem(this.selectionMenu, var5, var6, var1);
- } else {
- Menu var9 = new Menu(var5);
- this.selectionMenu.add(var9);
-
- for(int var10 = 0; var10 < var8; ++var10) {
- Locale var11 = var7[var10];
- String var12 = this.getLocaleName(var11);
- String var13 = var3.deriveLocator(var11).getActionCommandString();
- this.addMenuItem(var9, var12, var13, var1);
- }
- }
- }
-
- synchronized(this) {
- this.requestComponent.add(this.selectionMenu);
- this.selectionMenu.show(this.requestComponent, 60, 80);
- this.requestComponent = null;
- }
- }
- }
-
- private String getCurrentSelection() {
- InputContext var1 = this.currentInputContext;
- if (var1 != null) {
- InputMethodLocator var2 = var1.getInputMethodLocator();
- if (var2 != null) {
- return var2.getActionCommandString();
- }
- }
-
- return null;
- }
-
- private MenuItem addMenuItem(Menu var1, String var2, String var3, String var4) {
- Object var5;
- if (isSelected(var3, var4)) {
- var5 = new CheckboxMenuItem(var2, true);
- } else {
- var5 = new MenuItem(var2);
- }
-
- ((MenuItem)var5).setActionCommand(var3);
- ((MenuItem)var5).addActionListener(this);
- ((MenuItem)var5).setEnabled(var3 != null);
- var1.add((MenuItem)var5);
- return (MenuItem)var5;
- }
-
- private static boolean isSelected(String var0, String var1) {
- if (var0 != null && var1 != null) {
- if (var0.equals(var1)) {
- return true;
- } else {
- int var2 = var1.indexOf(10);
- return var2 != -1 && var1.substring(0, var2).equals(var0);
- }
- } else {
- return false;
- }
- }
-
- private String getLocaleName(Locale var1) {
- String var2 = var1.toString();
- String var3 = Toolkit.getProperty("AWT.InputMethodLanguage." + var2, (String)null);
- if (var3 == null) {
- var3 = var1.getDisplayName();
- if (var3 == null || var3.length() == 0) {
- var3 = var2;
- }
- }
-
- return var3;
- }
-
- private void changeInputMethod(String var1) {
- InputMethodLocator var2 = null;
- if (this.hostAdapterCommand != null && this.hostAdapterCommand.equals(var1)) {
- var2 = this.hostAdapterLocator;
- } else {
- String var3 = var1;
- String var4 = null;
- int var5 = var1.indexOf(10);
- if (var5 != -1) {
- var4 = var1.substring(var5 + 1);
- var3 = var1.substring(0, var5);
- }
-
- for(int var6 = 0; var6 < this.javaInputMethodLocatorList.size(); ++var6) {
- InputMethodLocator var7 = (InputMethodLocator)this.javaInputMethodLocatorList.get(var6);
- String var8 = var7.getActionCommandString();
- if (var8.equals(var3)) {
- var2 = var7;
- break;
- }
- }
-
- if (var2 != null && var4 != null) {
- String var12 = "";
- String var14 = "";
- String var9 = "";
- int var10 = var4.indexOf(95);
- if (var10 == -1) {
- var12 = var4;
- } else {
- var12 = var4.substring(0, var10);
- int var11 = var10 + 1;
- var10 = var4.indexOf(95, var11);
- if (var10 == -1) {
- var14 = var4.substring(var11);
- } else {
- var14 = var4.substring(var11, var10);
- var9 = var4.substring(var10 + 1);
- }
- }
-
- Locale var16 = new Locale(var12, var14, var9);
- var2 = var2.deriveLocator(var16);
- if (this.preferredInputMethods == null) {
- this.preferredInputMethods = new Hashtable();
- }
-
- this.preferredInputMethods.put(var4, var2);
- }
- }
-
- if (var2 != null) {
- if (this.currentInputContext != null) {
- this.currentInputContext.changeInputMethod(var2);
- }
-
- }
- }
-
- InputMethodLocator findInputMethod(Locale var1) {
- int var4;
- if (this.preferredInputMethods != null) {
- for(String var2 = var1.toString(); !var2.equals(""); var2 = var2.substring(0, var4)) {
- InputMethodLocator var3 = (InputMethodLocator)this.preferredInputMethods.get(var2);
- if (var3 != null) {
- return var3;
- }
-
- var4 = var2.lastIndexOf(95);
- if (var4 == -1) {
- break;
- }
- }
- }
-
- if (this.hostAdapterLocator != null && this.hostAdapterLocator.isLocaleAvailable(var1)) {
- return this.hostAdapterLocator.deriveLocator(var1);
- } else {
- this.initializeInputMethodLocatorList();
-
- for(int var5 = 0; var5 < this.javaInputMethodLocatorList.size(); ++var5) {
- InputMethodLocator var6 = (InputMethodLocator)this.javaInputMethodLocatorList.get(var5);
- if (var6.isLocaleAvailable(var1)) {
- return var6.deriveLocator(var1);
- }
- }
-
- return null;
- }
- }
-
- // $FF: synthetic method
- static Vector access$000(ExecutableInputMethodManager var0) {
- return var0.javaInputMethodLocatorList;
- }
- }
-