< prev index next >

src/share/classes/sun/print/ServiceDialog.java

Print this page
rev 1477 : 7013850: Please change the mnemonic assignment system to avoid translation issue
Reviewed-by: prr, mfang

*** 70,79 **** --- 70,80 ---- import javax.swing.event.PopupMenuListener; import javax.swing.text.NumberFormatter; import sun.print.SunPageSelection; import java.awt.event.KeyEvent; import java.net.URISyntaxException; + import java.lang.reflect.Field; /** * A class which implements a cross-platform print dialog. *
*** 477,514 **** /** * Returns message string from resource */ public static String getMsg(String key) { try { ! return messageRB.getString(key); } catch (java.util.MissingResourceException e) { throw new Error("Fatal: Resource for ServiceUI is broken; " + "there is no " + key + " key in resource"); } } /** * Returns mnemonic character from resource */ private static char getMnemonic(String key) { ! String str = getMsg(key + ".mnemonic"); ! if ((str != null) && (str.length() > 0)) { ! return str.charAt(0); } else { return (char)0; } } /** * Returns the mnemonic as a KeyEvent.VK constant from the resource. */ private static int getVKMnemonic(String key) { ! String str = getMsg(key + ".vkMnemonic"); ! if ((str != null) && (str.length() > 0)) { try { ! return Integer.parseInt(str); ! } catch (NumberFormatException nfe) {} } return 0; } /** --- 478,551 ---- /** * Returns message string from resource */ public static String getMsg(String key) { try { ! return removeMnemonics(messageRB.getString(key)); } catch (java.util.MissingResourceException e) { throw new Error("Fatal: Resource for ServiceUI is broken; " + "there is no " + key + " key in resource"); } } + private static String removeMnemonics(String s) { + int i = s.indexOf('&'); + int len = s.length(); + if (i < 0 || i == (len - 1)) { + return s; + } + int j = s.indexOf('&', i+1); + if (j == i+1) { + if (j+1 == len) { + return s.substring(0, i+1); // string ends with && + } else { + return s.substring(0, i+1) + removeMnemonics(s.substring(j+1)); + } + } + // ok first & not double && + if (i == 0) { + return removeMnemonics(s.substring(1)); + } else { + return (s.substring(0, i) + removeMnemonics(s.substring(i+1))); + } + } + + /** * Returns mnemonic character from resource */ private static char getMnemonic(String key) { ! String str = messageRB.getString(key).replace("&&", ""); ! int index = str.indexOf('&'); ! if (0 <= index && index < str.length() - 1) { ! char c = str.charAt(index + 1); ! return Character.toUpperCase(c); } else { return (char)0; } } /** * Returns the mnemonic as a KeyEvent.VK constant from the resource. */ + static Class _keyEventClazz = null; private static int getVKMnemonic(String key) { ! String s = String.valueOf(getMnemonic(key)); ! if ( s == null || s.length() != 1) { ! return 0; ! } ! String vkString = "VK_" + s.toUpperCase(); ! try { ! if (_keyEventClazz == null) { ! _keyEventClazz= Class.forName("java.awt.event.KeyEvent", ! true, (ServiceDialog.class).getClassLoader()); ! } ! Field field = _keyEventClazz.getDeclaredField(vkString); ! int value = field.getInt(null); ! return value; ! } catch (Exception e) { } return 0; } /**
< prev index next >