1 package devisor2.grid.options; 2 3 import java.util.*; 4 import java.awt.event.*; 5 import javax.swing.*; 6 7 /** 8 * This class maps the GUI representation of accelerator keys to the 9 * Java object representation. <br> 10 * So, nothing spectacular here, just a long, boring multi-if-else-statement. 11 * <br> 12 * The application-wide accelerator settings are managed and saved in the 13 * Options class. See there for details. <br> 14 * 15 * @see devisor2.options.Options 16 * @author Dominik Goeddeke 17 * @version 1.0 (fully tested) 18 */ 19 public class Accelerators 20 { 21 22 /** 23 * Returns the Swing representation of the accelerator defined by 24 * modifier + key 25 * 26 * @param modifier - one of the constants CRTL, ALT, SHIFT 27 * @param key - one of the constants A-Z, 0-9, F-keys or INS, DEL etc. 28 * 29 * @return a KeyStroke representation of the combination modifiers + key 30 * @see javax.swing.KeyStroke 31 */ getAccelerator(String modifier, String key)32 public static KeyStroke getAccelerator (String modifier, String key) 33 { 34 if (modifier.equals ("CTRL")) 35 return KeyStroke.getKeyStroke (getKeyConstant(key), ActionEvent.CTRL_MASK); 36 if (modifier.equals ("ALT")) 37 return KeyStroke.getKeyStroke (getKeyConstant(key), ActionEvent.ALT_MASK); 38 if (modifier.equals ("SHIFT")) 39 return KeyStroke.getKeyStroke (getKeyConstant(key), ActionEvent.SHIFT_MASK); 40 if (modifier.equals ("NONE")) 41 return KeyStroke.getKeyStroke (getKeyConstant(key), 0); 42 return null; 43 } 44 45 46 /** 47 * Returns the Swing representation of the given (internal) string 48 * representing of an accelerator. 49 * The input format is as follows: "modifier+key". 50 * 51 * @param a String representing an accelerator 52 * @return a Keystroke object representing the accelerator 53 */ getAccelerator(String accString)54 public static KeyStroke getAccelerator (String accString) 55 { 56 int pluspos = accString.indexOf ('+'); 57 String mod, key; 58 if (pluspos == -1) 59 { 60 mod = "NONE"; 61 key = accString; 62 } 63 else 64 { 65 mod = accString.substring (0,pluspos); 66 key = accString.substring (pluspos+1); 67 } 68 69 return getAccelerator (mod, key); 70 } 71 72 73 /** 74 * Returns a String representation of the given mmemonic 75 * specified by the KeyEvent constant 76 * 77 * @param key - a KeyEvent constant 78 * @returns a String representation of the given constant 79 */ getKeyString(int key)80 public static String getKeyString (int key) 81 { 82 if (key == KeyEvent.VK_A) return "A"; 83 if (key == KeyEvent.VK_A) return "A"; 84 if (key == KeyEvent.VK_B) return "B"; 85 if (key == KeyEvent.VK_C) return "C"; 86 if (key == KeyEvent.VK_D) return "D"; 87 if (key == KeyEvent.VK_E) return "E"; 88 if (key == KeyEvent.VK_F) return "F"; 89 if (key == KeyEvent.VK_G) return "G"; 90 if (key == KeyEvent.VK_H) return "H"; 91 if (key == KeyEvent.VK_I) return "I"; 92 if (key == KeyEvent.VK_J) return "J"; 93 if (key == KeyEvent.VK_K) return "K"; 94 if (key == KeyEvent.VK_L) return "L"; 95 if (key == KeyEvent.VK_M) return "M"; 96 if (key == KeyEvent.VK_N) return "N"; 97 if (key == KeyEvent.VK_O) return "O"; 98 if (key == KeyEvent.VK_P) return "P"; 99 if (key == KeyEvent.VK_Q) return "Q"; 100 if (key == KeyEvent.VK_R) return "R"; 101 if (key == KeyEvent.VK_S) return "S"; 102 if (key == KeyEvent.VK_T) return "T"; 103 if (key == KeyEvent.VK_U) return "U"; 104 if (key == KeyEvent.VK_V) return "V"; 105 if (key == KeyEvent.VK_W) return "W"; 106 if (key == KeyEvent.VK_X) return "X"; 107 if (key == KeyEvent.VK_Y) return "Y"; 108 if (key == KeyEvent.VK_Z) return "Z"; 109 if (key == KeyEvent.VK_0) return "0"; 110 if (key == KeyEvent.VK_1) return "1"; 111 if (key == KeyEvent.VK_2) return "2"; 112 if (key == KeyEvent.VK_3) return "3"; 113 if (key == KeyEvent.VK_4) return "4"; 114 if (key == KeyEvent.VK_5) return "5"; 115 if (key == KeyEvent.VK_6) return "6"; 116 if (key == KeyEvent.VK_7) return "7"; 117 if (key == KeyEvent.VK_8) return "8"; 118 if (key == KeyEvent.VK_9) return "9"; 119 if (key == KeyEvent.VK_F1) return "F1"; 120 if (key == KeyEvent.VK_F2) return "F2"; 121 if (key == KeyEvent.VK_F3) return "F3"; 122 if (key == KeyEvent.VK_F4) return "F4"; 123 if (key == KeyEvent.VK_F5) return "F5"; 124 if (key == KeyEvent.VK_F6) return "F6"; 125 if (key == KeyEvent.VK_F7) return "F7"; 126 if (key == KeyEvent.VK_F8) return "F8"; 127 if (key == KeyEvent.VK_F9) return "F9"; 128 if (key == KeyEvent.VK_F10) return "F10"; 129 if (key == KeyEvent.VK_F11) return "F11"; 130 if (key == KeyEvent.VK_F12) return "F12"; 131 if (key == KeyEvent.VK_INSERT) return "INS"; 132 if (key == KeyEvent.VK_DELETE) return "DEL"; 133 if (key == KeyEvent.VK_HOME) return "HOME"; 134 if (key == KeyEvent.VK_END) return "END"; 135 if (key == KeyEvent.VK_PAGE_UP) return "PGUP"; 136 if (key == KeyEvent.VK_PAGE_DOWN) return "PGDN"; 137 return "NONE"; 138 } 139 140 /** 141 * returns the KEY_VK constant assigned to the given key 142 * @see javax.swing.KeyEvent 143 * 144 * @param key - an A-Z, 0-9, alphanumerical character 145 * @returns the corresponding KeyEvent constant 146 */ getKeyConstant(String key)147 public static int getKeyConstant (String key) 148 { 149 if (key.equals("A")) return KeyEvent.VK_A; 150 if (key.equals("B")) return KeyEvent.VK_B; 151 if (key.equals("C")) return KeyEvent.VK_C; 152 if (key.equals("D")) return KeyEvent.VK_D; 153 if (key.equals("E")) return KeyEvent.VK_E; 154 if (key.equals("F")) return KeyEvent.VK_F; 155 if (key.equals("G")) return KeyEvent.VK_G; 156 if (key.equals("H")) return KeyEvent.VK_H; 157 if (key.equals("I")) return KeyEvent.VK_I; 158 if (key.equals("J")) return KeyEvent.VK_J; 159 if (key.equals("K")) return KeyEvent.VK_K; 160 if (key.equals("L")) return KeyEvent.VK_L; 161 if (key.equals("M")) return KeyEvent.VK_M; 162 if (key.equals("N")) return KeyEvent.VK_N; 163 if (key.equals("O")) return KeyEvent.VK_O; 164 if (key.equals("P")) return KeyEvent.VK_P; 165 if (key.equals("Q")) return KeyEvent.VK_Q; 166 if (key.equals("R")) return KeyEvent.VK_R; 167 if (key.equals("S")) return KeyEvent.VK_S; 168 if (key.equals("T")) return KeyEvent.VK_T; 169 if (key.equals("U")) return KeyEvent.VK_U; 170 if (key.equals("V")) return KeyEvent.VK_V; 171 if (key.equals("W")) return KeyEvent.VK_W; 172 if (key.equals("X")) return KeyEvent.VK_X; 173 if (key.equals("Y")) return KeyEvent.VK_Y; 174 if (key.equals("Z")) return KeyEvent.VK_Z; 175 if (key.equals("0")) return KeyEvent.VK_0; 176 if (key.equals("1")) return KeyEvent.VK_1; 177 if (key.equals("2")) return KeyEvent.VK_2; 178 if (key.equals("3")) return KeyEvent.VK_3; 179 if (key.equals("4")) return KeyEvent.VK_4; 180 if (key.equals("5")) return KeyEvent.VK_5; 181 if (key.equals("6")) return KeyEvent.VK_6; 182 if (key.equals("7")) return KeyEvent.VK_7; 183 if (key.equals("8")) return KeyEvent.VK_8; 184 if (key.equals("9")) return KeyEvent.VK_9; 185 if (key.equals("F1")) return KeyEvent.VK_F1; 186 if (key.equals("F2")) return KeyEvent.VK_F2; 187 if (key.equals("F3")) return KeyEvent.VK_F3; 188 if (key.equals("F4")) return KeyEvent.VK_F4; 189 if (key.equals("F5")) return KeyEvent.VK_F5; 190 if (key.equals("F6")) return KeyEvent.VK_F6; 191 if (key.equals("F7")) return KeyEvent.VK_F7; 192 if (key.equals("F8")) return KeyEvent.VK_F8; 193 if (key.equals("F9")) return KeyEvent.VK_F9; 194 if (key.equals("F10")) return KeyEvent.VK_F10; 195 if (key.equals("F11")) return KeyEvent.VK_F11; 196 if (key.equals("F12")) return KeyEvent.VK_F12; 197 if (key.equals("INS")) return KeyEvent.VK_INSERT; 198 if (key.equals("DEL")) return KeyEvent.VK_DELETE; 199 if (key.equals("HOME")) return KeyEvent.VK_HOME; 200 if (key.equals("END")) return KeyEvent.VK_END; 201 if (key.equals("PGUP")) return KeyEvent.VK_PAGE_UP; 202 if (key.equals("PGDN")) return KeyEvent.VK_PAGE_DOWN; 203 return KeyEvent.VK_UNDEFINED; 204 } 205 206 /** 207 * This method "just" checks if the given combination of modifier 208 * and key is a correct accelerator. 209 * Accepted combinations are: 210 * - if the modifier is NONE, only function keys and INS,DEL,HOME,END 211 * PGUP and PGDN are accepted 212 * - if the modifier is ALT, no letters are accepted (because these are 213 * reserved for the menu) 214 * 215 * @param modifier - the strings CTRL, ALT, SHIFT, NONE 216 * @param key - a String representation of a key (see above) 217 * 218 * @returns true if the given combination represents a correct 219 * accelerator, false otherwise 220 */ isCorrectAccelerator(String modifier, String key)221 public static boolean isCorrectAccelerator (String modifier, String key) 222 { 223 // the CTRL part: as keys can only be those from the combobox, 224 // everything is allowed 225 if (modifier.equals("CTRL") & !(key.equals("NONE"))) return true; 226 // same with the SHIFT part 227 if (modifier.equals("SHIFT") & !(key.equals("NONE"))) return true; 228 // the NONE part 229 if (modifier.equals("NONE")) 230 { 231 if (key.equals ("F1")) return true; 232 if (key.equals ("F1")) return true; 233 if (key.equals ("F2")) return true; 234 if (key.equals ("F3")) return true; 235 if (key.equals ("F4")) return true; 236 if (key.equals ("F5")) return true; 237 if (key.equals ("F6")) return true; 238 if (key.equals ("F7")) return true; 239 if (key.equals ("F8")) return true; 240 if (key.equals ("F9")) return true; 241 if (key.equals ("F10")) return true; 242 if (key.equals ("F11")) return true; 243 if (key.equals ("F12")) return true; 244 if (key.equals ("INS")) return true; 245 if (key.equals ("DEL")) return true; 246 if (key.equals ("HOME")) return true; 247 if (key.equals ("END")) return true; 248 if (key.equals ("PGUP")) return true; 249 if (key.equals ("PGDN")) return true; 250 if (key.equals ("NONE")) return true; 251 } 252 // the ALT part 253 if (modifier.equals("ALT")) 254 { 255 if (key.equals ("F1")) return true; 256 if (key.equals ("F1")) return true; 257 if (key.equals ("F2")) return true; 258 if (key.equals ("F3")) return true; 259 if (key.equals ("F4")) return true; 260 if (key.equals ("F5")) return true; 261 if (key.equals ("F6")) return true; 262 if (key.equals ("F7")) return true; 263 if (key.equals ("F8")) return true; 264 if (key.equals ("F9")) return true; 265 if (key.equals ("F10")) return true; 266 if (key.equals ("F11")) return true; 267 if (key.equals ("F12")) return true; 268 if (key.equals ("INS")) return true; 269 if (key.equals ("DEL")) return true; 270 if (key.equals ("HOME")) return true; 271 if (key.equals ("END")) return true; 272 if (key.equals ("PGUP")) return true; 273 if (key.equals ("PGDN")) return true; 274 if (key.equals ("1")) return true; 275 if (key.equals ("2")) return true; 276 if (key.equals ("3")) return true; 277 if (key.equals ("4")) return true; 278 if (key.equals ("5")) return true; 279 if (key.equals ("6")) return true; 280 if (key.equals ("7")) return true; 281 if (key.equals ("8")) return true; 282 if (key.equals ("9")) return true; 283 if (key.equals ("0")) return true; 284 } 285 return false; 286 } 287 } 288 289 290 291 292 293 294