/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.driver.input; import java.awt.event.KeyEvent; /** * @author Martin Husted Hartvig * @since 0.1.6 */ public class Key { private char lowerChar = KeyEvent.CHAR_UNDEFINED; private char upperChar = KeyEvent.CHAR_UNDEFINED; private char altGrChar = KeyEvent.CHAR_UNDEFINED; private int lowerVirtuelKey = KeyEvent.VK_UNDEFINED; private int upperVirtuelKey = KeyEvent.VK_UNDEFINED; private int altGrVirtuelKey = KeyEvent.VK_UNDEFINED; private char[][] deadChars = null; protected static final char[] noDeadChar = new char[]{0}; public Key() { } public Key(char lowerChar, int lowerVirtuelKey, char upperChar, int upperVirtuelKey, char altGrChar, int altGrVirtuelKey) { this.lowerChar = lowerChar; this.upperChar = upperChar; this.altGrChar = altGrChar; this.lowerVirtuelKey = lowerVirtuelKey; this.upperVirtuelKey = upperVirtuelKey; this.altGrVirtuelKey = altGrVirtuelKey; } public Key(char lowerChar, int lowerVirtuelKey, char upperChar, int upperVirtuelKey) { this.lowerChar = lowerChar; this.upperChar = upperChar; this.lowerVirtuelKey = lowerVirtuelKey; this.upperVirtuelKey = upperVirtuelKey; } public Key(char lowerChar, char upperChar, char altGrChar, int virtuelKey) { this.lowerChar = lowerChar; this.upperChar = upperChar; this.altGrChar = altGrChar; this.lowerVirtuelKey = virtuelKey; this.upperVirtuelKey = virtuelKey; } public Key(char lowerChar, char upperChar, int virtuelKey) { this.lowerChar = lowerChar; this.upperChar = upperChar; this.lowerVirtuelKey = virtuelKey; this.upperVirtuelKey = virtuelKey; } public Key(char lowerUpperChar, int virtuelKey) { this.lowerChar = lowerUpperChar; this.upperChar = lowerUpperChar; this.lowerVirtuelKey = virtuelKey; this.upperVirtuelKey = virtuelKey; } public Key(char lowerChar, char upperChar) { this.lowerChar = lowerChar; this.upperChar = upperChar; } public Key(int virtuelKey) { this.lowerVirtuelKey = virtuelKey; this.upperVirtuelKey = virtuelKey; this.altGrVirtuelKey = virtuelKey; } public char getLowerChar() { return lowerChar; } public void setLowerChar(char lowerChar) { this.lowerChar = lowerChar; } public char getUpperChar() { return upperChar; } public void setUpperChar(char upperChar) { this.upperChar = upperChar; } public char getControlChar() { return (char) (upperChar & 0x1f); } public char getAltGrChar() { return altGrChar; } public void setAltGrChar(char altGrChar) { this.altGrChar = altGrChar; } public int getLowerVirtuelKey() { return lowerVirtuelKey; } public void setLowerVirtuelKey(int lowerVirtuelKey) { this.lowerVirtuelKey = lowerVirtuelKey; } public int getUpperVirtuelKey() { return upperVirtuelKey; } public void setUpperVirtuelKey(int upperVirtuelKey) { this.upperVirtuelKey = upperVirtuelKey; } public int getAltGrVirtuelKey() { return altGrVirtuelKey; } public void setAltGrVirtuelKey(int altGrVirtuelKey) { this.altGrVirtuelKey = altGrVirtuelKey; } public void addDeadKeyChar(int virtuelKey, char[] deadChar) { if (deadChars == null) deadChars = new char[16][2]; switch (virtuelKey) { case KeyEvent.VK_DEAD_ABOVEDOT: deadChars[0] = deadChar; break; case KeyEvent.VK_DEAD_ABOVERING: deadChars[1] = deadChar; break; case KeyEvent.VK_DEAD_ACUTE: deadChars[2] = deadChar; break; case KeyEvent.VK_DEAD_BREVE: deadChars[3] = deadChar; break; case KeyEvent.VK_DEAD_CARON: deadChars[4] = deadChar; break; case KeyEvent.VK_DEAD_CEDILLA: deadChars[5] = deadChar; break; case KeyEvent.VK_DEAD_CIRCUMFLEX: deadChars[6] = deadChar; break; case KeyEvent.VK_DEAD_DIAERESIS: deadChars[7] = deadChar; break; case KeyEvent.VK_DEAD_DOUBLEACUTE: deadChars[8] = deadChar; break; case KeyEvent.VK_DEAD_GRAVE: deadChars[9] = deadChar; break; case KeyEvent.VK_DEAD_IOTA: deadChars[10] = deadChar; break; case KeyEvent.VK_DEAD_MACRON: deadChars[11] = deadChar; break; case KeyEvent.VK_DEAD_OGONEK: deadChars[12] = deadChar; break; case KeyEvent.VK_DEAD_SEMIVOICED_SOUND: deadChars[13] = deadChar; break; case KeyEvent.VK_DEAD_TILDE: deadChars[14] = deadChar; break; case KeyEvent.VK_DEAD_VOICED_SOUND: deadChars[15] = deadChar; break; } } public char[] getDeadKeyChar(int virtuelKey) { if (deadChars == null) return noDeadChar; switch (virtuelKey) { case KeyEvent.VK_DEAD_ABOVEDOT: return deadChars[0]; case KeyEvent.VK_DEAD_ABOVERING: return deadChars[1]; case KeyEvent.VK_DEAD_ACUTE: return deadChars[2]; case KeyEvent.VK_DEAD_BREVE: return deadChars[3]; case KeyEvent.VK_DEAD_CARON: return deadChars[4]; case KeyEvent.VK_DEAD_CEDILLA: return deadChars[5]; case KeyEvent.VK_DEAD_CIRCUMFLEX: return deadChars[6]; case KeyEvent.VK_DEAD_DIAERESIS: return deadChars[7]; case KeyEvent.VK_DEAD_DOUBLEACUTE: return deadChars[8]; case KeyEvent.VK_DEAD_GRAVE: return deadChars[9]; case KeyEvent.VK_DEAD_IOTA: return deadChars[10]; case KeyEvent.VK_DEAD_MACRON: return deadChars[11]; case KeyEvent.VK_DEAD_OGONEK: return deadChars[12]; case KeyEvent.VK_DEAD_SEMIVOICED_SOUND: return deadChars[13]; case KeyEvent.VK_DEAD_TILDE: return deadChars[14]; case KeyEvent.VK_DEAD_VOICED_SOUND: return deadChars[15]; default: return noDeadChar; } } public String toString() { return "Key{" + "lowerChar=" + lowerChar + ", upperChar=" + upperChar + ", altGrChar=" + altGrChar + ", lowerVirtuelKey=" + lowerVirtuelKey + ", upperVirtuelKey=" + upperVirtuelKey + ", altGrVirtuelKey=" + altGrVirtuelKey + '}'; } }