1 /* InputMap.java -- 2 Copyright (C) 2002, 2004 Free Software Foundation, Inc. 3 4 This file is part of GNU Classpath. 5 6 GNU Classpath is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GNU Classpath is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Classpath; see the file COPYING. If not, write to the 18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 02110-1301 USA. 20 21 Linking this library statically or dynamically with other modules is 22 making a combined work based on this library. Thus, the terms and 23 conditions of the GNU General Public License cover the whole 24 combination. 25 26 As a special exception, the copyright holders of this library give you 27 permission to link this library with independent modules to produce an 28 executable, regardless of the license terms of these independent 29 modules, and to copy and distribute the resulting executable under 30 terms of your choice, provided that you also meet, for each linked 31 independent module, the terms and conditions of the license of that 32 module. An independent module is a module which is not derived from 33 or based on this library. If you modify this library, you may extend 34 this exception to your version of the library, but you are not 35 obligated to do so. If you do not wish to do so, delete this 36 exception statement from your version. */ 37 38 package javax.swing; 39 40 import java.io.IOException; 41 import java.io.ObjectInputStream; 42 import java.io.ObjectOutputStream; 43 import java.io.Serializable; 44 import java.util.Arrays; 45 import java.util.HashMap; 46 import java.util.HashSet; 47 import java.util.Map; 48 import java.util.Set; 49 50 51 /** 52 * Maps {@link KeyStroke}s to arbitrary objects, usually Strings. This 53 * is used in combination with {@link ActionMap}s. 54 * 55 * If a component receives an input event, this is looked up in 56 * the component's <code>InputMap</code>. The result is an object which 57 * serves as a key to the components <code>ActionMap</code>. Finally 58 * the <code>Action</code> that is stored is executed. 59 * 60 * @author Andrew Selkirk 61 * @author Michael Koch 62 * 63 * @since 1.3 64 */ 65 public class InputMap 66 implements Serializable 67 { 68 private static final long serialVersionUID = -5429059542008604257L; 69 70 /** 71 * inputMap 72 */ 73 private Map inputMap = new HashMap(); 74 75 /** 76 * parent 77 */ 78 private InputMap parent; 79 80 /** 81 * Creates a new <code>InputMap</code> instance. 82 */ InputMap()83 public InputMap() 84 { 85 // TODO 86 } 87 88 /** 89 * Returns the binding for keystroke. 90 * 91 * @param keystroke the key of the enty 92 * 93 * @return the binding associated with keystroke may be null 94 */ get(KeyStroke keystroke)95 public Object get(KeyStroke keystroke) 96 { 97 Object result = inputMap.get(keystroke); 98 99 if (result == null && parent != null) 100 result = parent.get(keystroke); 101 return result; 102 } 103 104 /** 105 * Puts a new entry into the <code>InputMap</code>. 106 * If actionMapKey is null an existing entry will be removed. 107 * 108 * @param keystroke the keystroke for the entry 109 * @param actionMapKey the action. 110 */ put(KeyStroke keystroke, Object actionMapKey)111 public void put(KeyStroke keystroke, Object actionMapKey) 112 { 113 if (actionMapKey == null) 114 inputMap.remove(keystroke); 115 else 116 inputMap.put(keystroke, actionMapKey); 117 } 118 119 /** 120 * Remove an entry from the <code>InputMap</code>. 121 * 122 * @param keystroke the key of the entry to remove 123 */ remove(KeyStroke keystroke)124 public void remove(KeyStroke keystroke) 125 { 126 inputMap.remove(keystroke); 127 } 128 129 /** 130 * Returns the parent of this <code>InputMap</code>. 131 * 132 * @return the parent, may be null. 133 */ getParent()134 public InputMap getParent() 135 { 136 return parent; 137 } 138 139 /** 140 * Sets a parent for this <code>InputMap</code>. 141 * 142 * @param parentMap the new parent 143 */ setParent(InputMap parentMap)144 public void setParent(InputMap parentMap) 145 { 146 parent = parentMap; 147 } 148 149 /** 150 * Returns the number of entries in this <code>InputMap</code>. 151 * 152 * @return the number of entries 153 */ size()154 public int size() 155 { 156 return inputMap.size(); 157 } 158 159 /** 160 * Clears the <code>InputMap</code>. 161 */ clear()162 public void clear() 163 { 164 inputMap.clear(); 165 } 166 167 /** 168 * Returns all keys of entries in this <code>InputMap</code>. 169 * 170 * @return an array of keys 171 */ keys()172 public KeyStroke[] keys() 173 { 174 KeyStroke[] array = new KeyStroke[size()]; 175 return (KeyStroke[]) inputMap.keySet().toArray(array); 176 } 177 178 /** 179 * Returns all keys of entries in this <code>InputMap</code> 180 * and all its parents. 181 * 182 * @return an array of keys 183 */ allKeys()184 public KeyStroke[] allKeys() 185 { 186 Set set = new HashSet(); 187 188 if (parent != null) 189 set.addAll(Arrays.asList(parent.allKeys())); 190 191 set.addAll(inputMap.keySet()); 192 KeyStroke[] array = new KeyStroke[size()]; 193 return (KeyStroke[]) set.toArray(array); 194 } 195 196 /** 197 * writeObject 198 * 199 * @param stream the stream to write to 200 * 201 * @exception IOException If an error occurs 202 */ writeObject(ObjectOutputStream stream)203 private void writeObject(ObjectOutputStream stream) throws IOException 204 { 205 // TODO 206 } 207 208 /** 209 * readObject 210 * 211 * @param stream the stream to read from 212 * 213 * @exception ClassNotFoundException If the serialized class cannot be found 214 * @exception IOException If an error occurs 215 */ readObject(ObjectInputStream stream)216 private void readObject(ObjectInputStream stream) 217 throws ClassNotFoundException, IOException 218 { 219 // TODO 220 } 221 } 222