/* * ProxyKeyEvent.java * * Copyright (c) 2010 VDP <vdp DOT kindle AT gmail.com>. * * This file is part of MidpSSH. * * MidpSSH is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MidpSSH 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MidpSSH. If not, see <http ://www.gnu.org/licenses/>. */ package kindle; import java.awt.Component; import java.awt.event.KeyEvent; import java.util.StringTokenizer; public class ProxyKeyEvent extends KeyEvent { private final static String HDR_EVENT_ID = "EVENT_ID"; private final static String HDR_MODIFIERS = "MODIFIERS"; private final static String HDR_KEY_CODE = "KEY_CODE"; private final static String HDR_KEY_CHAR = "KEY_CHAR"; private int id; public ProxyKeyEvent(Component source, int id, long when, int modifiers, int keyCode, char keyChar) { super(source, id, when, modifiers, keyCode, keyChar); this.id = id; } public ProxyKeyEvent(KeyEvent ke) { super(ke.getComponent(), ke.getID(), ke.getWhen(), ke.getModifiers(), ke.getKeyCode(), ke.getKeyChar()); this.id = ke.getID(); } /** * Event format in text (everything below is of type string) * EVENT_ID (KEY_PRESSED | KEY_RELEASED | KEY_TYPED) * MODIFIERS STRING_REPR_OF_INT * KEY_CODE STRING_REPR_OF_INT * KEY_CHAR STRING_REPR_OF_CHAR */ public static ProxyKeyEvent makeEvent(String eventDescr, Component source, long when) { int id = 0, modifiers = 0, code = 0; char keyChar = 0; StringTokenizer st = new StringTokenizer(eventDescr); while (st.hasMoreTokens()) { String token = st.nextToken(); if (token.equals(HDR_EVENT_ID)) { id = Integer.parseInt(st.nextToken()); } else if (token.equals(HDR_MODIFIERS)) { modifiers = Integer.parseInt(st.nextToken()); } else if (token.equals(HDR_KEY_CODE)) { code = Integer.parseInt(st.nextToken()); } else if (token.equals(HDR_KEY_CHAR)) { String charString = st.nextToken(); keyChar = charString.charAt(0); if (keyChar == '\\') { switch (charString.charAt(1)) { case 'n': keyChar = '\n'; break; case 't': keyChar = '\t'; break; case 's': keyChar = ' '; break; } } } else { //throw new IllegalArgumentException("Unexpected event token: " + token); } } ProxyKeyEvent theEvent = new ProxyKeyEvent(source, id, when, modifiers, code, keyChar); return theEvent; } public String toString() { String keyStr; StringBuffer sb = new StringBuffer(200); sb.append(HDR_EVENT_ID).append(' ').append(getID()).append('\n'); sb.append(HDR_MODIFIERS).append(' ').append(getModifiers()).append('\n'); sb.append(HDR_KEY_CODE).append(' ').append(getKeyCode()).append('\n'); sb.append(HDR_KEY_CHAR).append(' '); char kc = getKeyChar(); if (kc == '\n') { sb.append("\\n"); } else if (kc == '\t') { sb.append("\\t"); } else if (kc == ' ') { sb.append("\\s"); } else { sb.append(kc); } return sb.toString(); } public int getID() { return id; } public void setID(int id) { this.id = id; } }