1 /* MenuShortcut.java -- A class for menu accelerators
2 Copyright (C) 1999, 2002 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
39 package java.awt;
40
41 /**
42 * This class implements a keyboard accelerator for a menu item.
43 *
44 * @author Aaron M. Renn (arenn@urbanophile.com)
45 */
46 public class MenuShortcut implements java.io.Serializable
47 {
48
49 /*
50 * Static Variables
51 */
52
53 // Serialization Constant
54 private static final long serialVersionUID = 143448358473180225L;
55
56 /*************************************************************************/
57
58 /*
59 * Instance Variables
60 */
61
62 /**
63 * @serial The virtual keycode for the shortcut.
64 */
65 private int key;
66
67 /**
68 * @serial <code>true</code> if the shift key was used with this shortcut,
69 * or <code>false</code> otherwise.
70 */
71 private boolean usesShift;
72
73 private String keyName;
74
75 /*************************************************************************/
76
77 /**
78 * Initializes a new instance of <code>MenuShortcut</code> with the
79 * specified virtual key value.
80 *
81 * @param key The virtual keycode for the shortcut.
82 */
83 public
MenuShortcut(int key)84 MenuShortcut(int key)
85 {
86 this(key, false);
87 }
88
89 /*************************************************************************/
90
91 /**
92 * Initializes a new instance of <code>MenuShortcut</code> with the
93 * specified virtual key value and shift setting.
94 *
95 * @param key The virtual keycode for the shortcut.
96 * @param usesShift <code>true</code> if the shift key was pressed,
97 * <code>false</code> otherwise.
98 */
99 public
MenuShortcut(int key, boolean usesShift)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
getKey()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
usesShiftModifier()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
equals(MenuShortcut obj)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
equals(Object obj)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
toString()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
hashCode()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
paramString()209 paramString()
210 {
211 return "key=" + key + ",usesShift=" + usesShift;
212 }
213
214 private void
setKeyName(int key)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
435