001 /* MenuShortcut.java -- A class for menu accelerators 002 Copyright (C) 1999, 2002 Free Software Foundation, Inc. 003 004 This file is part of GNU Classpath. 005 006 GNU Classpath is free software; you can redistribute it and/or modify 007 it under the terms of the GNU General Public License as published by 008 the Free Software Foundation; either version 2, or (at your option) 009 any later version. 010 011 GNU Classpath is distributed in the hope that it will be useful, but 012 WITHOUT ANY WARRANTY; without even the implied warranty of 013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 General Public License for more details. 015 016 You should have received a copy of the GNU General Public License 017 along with GNU Classpath; see the file COPYING. If not, write to the 018 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 019 02110-1301 USA. 020 021 Linking this library statically or dynamically with other modules is 022 making a combined work based on this library. Thus, the terms and 023 conditions of the GNU General Public License cover the whole 024 combination. 025 026 As a special exception, the copyright holders of this library give you 027 permission to link this library with independent modules to produce an 028 executable, regardless of the license terms of these independent 029 modules, and to copy and distribute the resulting executable under 030 terms of your choice, provided that you also meet, for each linked 031 independent module, the terms and conditions of the license of that 032 module. An independent module is a module which is not derived from 033 or based on this library. If you modify this library, you may extend 034 this exception to your version of the library, but you are not 035 obligated to do so. If you do not wish to do so, delete this 036 exception statement from your version. */ 037 038 039 package java.awt; 040 041 /** 042 * This class implements a keyboard accelerator for a menu item. 043 * 044 * @author Aaron M. Renn (arenn@urbanophile.com) 045 */ 046 public class MenuShortcut implements java.io.Serializable 047 { 048 049 /* 050 * Static Variables 051 */ 052 053 // Serialization Constant 054 private static final long serialVersionUID = 143448358473180225L; 055 056 /*************************************************************************/ 057 058 /* 059 * Instance Variables 060 */ 061 062 /** 063 * @serial The virtual keycode for the shortcut. 064 */ 065 private int key; 066 067 /** 068 * @serial <code>true</code> if the shift key was used with this shortcut, 069 * or <code>false</code> otherwise. 070 */ 071 private boolean usesShift; 072 073 private String keyName; 074 075 /*************************************************************************/ 076 077 /** 078 * Initializes a new instance of <code>MenuShortcut</code> with the 079 * specified virtual key value. 080 * 081 * @param key The virtual keycode for the shortcut. 082 */ 083 public 084 MenuShortcut(int key) 085 { 086 this(key, false); 087 } 088 089 /*************************************************************************/ 090 091 /** 092 * Initializes a new instance of <code>MenuShortcut</code> with the 093 * specified virtual key value and shift setting. 094 * 095 * @param key The virtual keycode for the shortcut. 096 * @param usesShift <code>true</code> if the shift key was pressed, 097 * <code>false</code> otherwise. 098 */ 099 public 100 MenuShortcut(int key, boolean usesShift) 101 { 102 this.key = key; 103 this.usesShift = usesShift; 104 setKeyName(key); 105 } 106 107 /*************************************************************************/ 108 109 /* 110 * Instance Methods 111 */ 112 113 /** 114 * Returns the virtual keycode for this shortcut. 115 * 116 * @return The virtual keycode for this shortcut. 117 */ 118 public int 119 getKey() 120 { 121 return(key); 122 } 123 124 /*************************************************************************/ 125 126 /** 127 * Returns the shift setting for this shortcut. 128 * 129 * @return <code>true</code> if the shift key was pressed, <code>false</code> 130 * otherwise. 131 */ 132 public boolean 133 usesShiftModifier() 134 { 135 return(usesShift); 136 } 137 138 /*************************************************************************/ 139 140 /** 141 * Tests this object for equality against the specified object. The two 142 * objects will be considered equal if and only if the specified object 143 * is an instance of <code>MenuShortcut</code> and has the same key value 144 * and shift setting as this object. 145 * 146 * @param obj The object to test for equality against. 147 * 148 * @return <code>true</code> if the two objects are equal, <code>false</code> 149 * otherwise. 150 */ 151 public boolean 152 equals(MenuShortcut obj) 153 { 154 if (obj == null) 155 return(false); 156 157 if (obj.key != this.key) 158 return(false); 159 160 if (obj.usesShift != this.usesShift) 161 return(false); 162 163 return(true); 164 } 165 166 public boolean 167 equals(Object obj) 168 { 169 if (obj instanceof MenuShortcut) 170 { 171 MenuShortcut ms = (MenuShortcut) obj; 172 return (ms.key == key && ms.usesShift == usesShift); 173 } 174 return false; 175 } 176 177 /*************************************************************************/ 178 179 /** 180 * Returns a string representation of this shortcut. 181 * 182 * @return A string representation of this shortcut. 183 */ 184 public String 185 toString() 186 { 187 String temp = "Ctrl+"; 188 if (usesShift) 189 temp = temp + "Shift+"; 190 temp = temp + keyName; 191 return temp; 192 } 193 194 public int 195 hashCode() 196 { 197 // Arbitrary. 198 return key + (usesShift ? 23 : 57); 199 } 200 201 /*************************************************************************/ 202 203 /** 204 * Returns a debugging string for this object. 205 * 206 * @return A debugging string for this object. 207 */ 208 protected String 209 paramString() 210 { 211 return "key=" + key + ",usesShift=" + usesShift; 212 } 213 214 private void 215 setKeyName(int key) 216 { 217 if (key == '\n') 218 keyName = "Enter"; 219 else if (key == '\b') 220 keyName = "Backspace"; 221 else if (key == '\t') 222 keyName = "Tab"; 223 else if (key == ' ') 224 keyName = "Space"; 225 else if (key == ',') 226 keyName = "Comma"; 227 else if (key == '.') 228 keyName = "Period"; 229 else if (key == '/') 230 keyName = "Slash"; 231 else if (key == '\\') 232 keyName = "Back Slash"; 233 else if (key == ';') 234 keyName = "Semicolon"; 235 else if (key == '=') 236 keyName = "Equals"; 237 else if (key == '[') 238 keyName = "Open Bracket"; 239 else if (key == ']') 240 keyName = "Close Bracket"; 241 else if (key == '0') 242 keyName = "0"; 243 else if (key == '1') 244 keyName = "1"; 245 else if (key == '2') 246 keyName = "2"; 247 else if (key == '3') 248 keyName = "3"; 249 else if (key == '4') 250 keyName = "4"; 251 else if (key == '5') 252 keyName = "5"; 253 else if (key == '6') 254 keyName = "6"; 255 else if (key == '7') 256 keyName = "7"; 257 else if (key == '8') 258 keyName = "8"; 259 else if (key == '9') 260 keyName = "9"; 261 else if (key == 'A') 262 keyName = "A"; 263 else if (key == 'B') 264 keyName = "B"; 265 else if (key == 'C') 266 keyName = "C"; 267 else if (key == 'D') 268 keyName = "D"; 269 else if (key == 'E') 270 keyName = "E"; 271 else if (key == 'F') 272 keyName = "F"; 273 else if (key == 'G') 274 keyName = "G"; 275 else if (key == 'H') 276 keyName = "H"; 277 else if (key == 'I') 278 keyName = "I"; 279 else if (key == 'J') 280 keyName = "J"; 281 else if (key == 'K') 282 keyName = "K"; 283 else if (key == 'L') 284 keyName = "L"; 285 else if (key == 'M') 286 keyName = "M"; 287 else if (key == 'N') 288 keyName = "N"; 289 else if (key == 'O') 290 keyName = "O"; 291 else if (key == 'P') 292 keyName = "P"; 293 else if (key == 'Q') 294 keyName = "Q"; 295 else if (key == 'R') 296 keyName = "R"; 297 else if (key == 'S') 298 keyName = "S"; 299 else if (key == 'T') 300 keyName = "T"; 301 else if (key == 'U') 302 keyName = "U"; 303 else if (key == 'V') 304 keyName = "V"; 305 else if (key == 'W') 306 keyName = "W"; 307 else if (key == 'X') 308 keyName = "X"; 309 else if (key == 'Y') 310 keyName = "Y"; 311 else if (key == 'Z') 312 keyName = "Z"; 313 else if (key == 3) 314 keyName = "Cancel"; 315 else if (key == 12) 316 keyName = "Clear"; 317 else if (key == 16) 318 keyName = "Shift"; 319 else if (key == 17) 320 keyName = "Ctrl"; 321 else if (key == 18) 322 keyName = "Alt"; 323 else if (key == 19) 324 keyName = "Pause"; 325 else if (key == 20) 326 keyName = "Caps Lock"; 327 else if (key == 21) 328 keyName = "Kana"; 329 else if (key == 24) 330 keyName = "Final"; 331 else if (key == 25) 332 keyName = "Kanji"; 333 else if (key == 27) 334 keyName = "Escape"; 335 else if (key == 28) 336 keyName = "Convert"; 337 else if (key == 29) 338 keyName = "No Convert"; 339 else if (key == 30) 340 keyName = "Accept"; 341 else if (key == 31) 342 keyName = "Mode Change"; 343 else if (key == 33) 344 keyName = "Page Up"; 345 else if (key == 34) 346 keyName = "Page Down"; 347 else if (key == 35) 348 keyName = "End"; 349 else if (key == 36) 350 keyName = "Home"; 351 else if (key == 37) 352 keyName = "Left"; 353 else if (key == 38) 354 keyName = "Up"; 355 else if (key == 39) 356 keyName = "Right"; 357 else if (key == 40) 358 keyName = "Down"; 359 else if (key == 96) 360 keyName = "NumPad-0"; 361 else if (key == 97) 362 keyName = "NumPad-1"; 363 else if (key == 98) 364 keyName = "NumPad-2"; 365 else if (key == 99) 366 keyName = "NumPad-3"; 367 else if (key == 100) 368 keyName = "NumPad-4"; 369 else if (key == 101) 370 keyName = "NumPad-5"; 371 else if (key == 102) 372 keyName = "NumPad-6"; 373 else if (key == 103) 374 keyName = "NumPad-7"; 375 else if (key == 104) 376 keyName = "NumPad-8"; 377 else if (key == 105) 378 keyName = "NumPad-9"; 379 else if (key == 106) 380 keyName = "NumPad *"; 381 else if (key == 107) 382 keyName = "NumPad +"; 383 else if (key == 108) 384 keyName = "NumPad ,"; 385 else if (key == 109) 386 keyName = "NumPad -"; 387 else if (key == 110) 388 keyName = "NumPad ."; 389 else if (key == 111) 390 keyName = "NumPad /"; 391 else if (key == 112) 392 keyName = "F1"; 393 else if (key == 113) 394 keyName = "F2"; 395 else if (key == 114) 396 keyName = "F3"; 397 else if (key == 115) 398 keyName = "F4"; 399 else if (key == 116) 400 keyName = "F5"; 401 else if (key == 117) 402 keyName = "F6"; 403 else if (key == 118) 404 keyName = "F7"; 405 else if (key == 119) 406 keyName = "F8"; 407 else if (key == 120) 408 keyName = "F9"; 409 else if (key == 121) 410 keyName = "F10"; 411 else if (key == 122) 412 keyName = "F11"; 413 else if (key == 123) 414 keyName = "F12"; 415 else if (key == 127) 416 keyName = "Delete"; 417 else if (key == 144) 418 keyName = "Num Lock"; 419 else if (key == 145) 420 keyName = "Scroll Lock"; 421 else if (key == 154) 422 keyName = "Print Screen"; 423 else if (key == 155) 424 keyName = "Insert"; 425 else if (key == 156) 426 keyName = "Help"; 427 else if (key == 157) 428 keyName = "Meta"; 429 else if (key == 192) 430 keyName = "Back Quote"; 431 else if (key == 222) 432 keyName = "Quote"; 433 } 434 } // class MenuShortcut