package org.geogebra.desktop.gui.virtualkeyboard; import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; // /** * adapted from * http://stackoverflow.com/questions/1248510/convert-string-to-keyevents */ public class WindowsUnicodeKeyboard extends Keyboard { private Robot windowsRobot; /** * @param robot * robot */ public WindowsUnicodeKeyboard(Robot robot) { super(robot); this.windowsRobot = robot; } /** * @throws AWTException * when super fails */ public WindowsUnicodeKeyboard() throws AWTException { super(); this.windowsRobot = super.robot; } @Override public void type(char character) { try { super.type(character); } catch (IllegalArgumentException e) { int unicodeDigits = character; // Application.debug(unicodeDigits+""); windowsRobot.keyPress(KeyEvent.VK_ALT); try { // make sure Alt is released! // convert to decimal (with leading zero(es)) int digit = unicodeDigits / 1000; unicodeDigits -= digit * 1000; typeNumPad(digit); digit = unicodeDigits / 100; unicodeDigits -= digit * 100; typeNumPad(digit); digit = unicodeDigits / 10; unicodeDigits -= digit * 10; typeNumPad(digit); typeNumPad(unicodeDigits); } catch (Exception ex) { ex.printStackTrace(); } windowsRobot.keyRelease(KeyEvent.VK_ALT); } } private void typeNumPad(int digit) { // System.err.println(digit+""); switch (digit) { default: // do nothing break; case 0: doType(KeyEvent.VK_NUMPAD0); break; case 1: doType(KeyEvent.VK_NUMPAD1); break; case 2: doType(KeyEvent.VK_NUMPAD2); break; case 3: doType(KeyEvent.VK_NUMPAD3); break; case 4: doType(KeyEvent.VK_NUMPAD4); break; case 5: doType(KeyEvent.VK_NUMPAD5); break; case 6: doType(KeyEvent.VK_NUMPAD6); break; case 7: doType(KeyEvent.VK_NUMPAD7); break; case 8: doType(KeyEvent.VK_NUMPAD8); break; case 9: doType(KeyEvent.VK_NUMPAD9); break; } } } // */