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    import java.awt.event.KeyEvent;
042    
043    /**
044      * This class implements a keyboard accelerator for a menu item.
045      *
046      * @author Aaron M. Renn (arenn@urbanophile.com)
047      */
048    public class MenuShortcut implements java.io.Serializable
049    {
050    
051    /*
052     * Static Variables
053     */
054    
055    // Serialization Constant
056    private static final long serialVersionUID = 143448358473180225L;
057    
058    /*************************************************************************/
059    
060    /*
061     * Instance Variables
062     */
063    
064    /**
065      * @serial The virtual keycode for the shortcut.
066      */
067    private int key;
068    
069    /**
070      * @serial <code>true</code> if the shift key was used with this shortcut,
071      * or <code>false</code> otherwise.
072      */
073    private boolean usesShift;
074    
075    private String keyName;
076    
077    /*************************************************************************/
078    
079    /**
080      * Initializes a new instance of <code>MenuShortcut</code> with the
081      * specified virtual key value.
082      *
083      * @param key The virtual keycode for the shortcut.
084      */
085    public
086    MenuShortcut(int key)
087    {
088      this(key, false);
089    }
090    
091    /*************************************************************************/
092    
093    /**
094      * Initializes a new instance of <code>MenuShortcut</code> with the
095      * specified virtual key value and shift setting.
096      *
097      * @param key The virtual keycode for the shortcut.
098      * @param usesShift <code>true</code> if the shift key was pressed,
099      * <code>false</code> otherwise.
100      */
101    public
102    MenuShortcut(int key, boolean usesShift)
103    {
104      this.key = key;
105      this.usesShift = usesShift;
106      setKeyName(key);
107    }
108    
109    /*************************************************************************/
110    
111    /*
112     * Instance Methods
113     */
114    
115    /**
116      * Returns the virtual keycode for this shortcut.
117      *
118      * @return The virtual keycode for this shortcut.
119      */
120    public int
121    getKey()
122    {
123      return(key);
124    }
125    
126    /*************************************************************************/
127    
128    /**
129      * Returns the shift setting for this shortcut.
130      *
131      * @return <code>true</code> if the shift key was pressed, <code>false</code>
132      * otherwise.
133      */
134    public boolean
135    usesShiftModifier()
136    {
137      return(usesShift);
138    }
139    
140    /*************************************************************************/
141    
142    /**
143      * Tests this object for equality against the specified object.  The two
144      * objects will be considered equal if and only if the specified object
145      * is an instance of <code>MenuShortcut</code> and has the same key value
146      * and shift setting as this object.
147      *
148      * @param obj The object to test for equality against.
149      *
150      * @return <code>true</code> if the two objects are equal, <code>false</code>
151      * otherwise.
152      */
153    public boolean
154    equals(MenuShortcut obj)
155    {
156      if (obj == null)
157        return(false);
158    
159      if (obj.key != this.key)
160        return(false);
161    
162      if (obj.usesShift != this.usesShift)
163        return(false);
164    
165      return(true);
166    }
167    
168    public boolean
169    equals(Object obj)
170    {
171      if (obj instanceof MenuShortcut)
172        {
173          MenuShortcut ms = (MenuShortcut) obj;
174          return (ms.key == key && ms.usesShift == usesShift);
175        }      
176      return false;
177    }
178    
179    /*************************************************************************/
180    
181    /**
182      * Returns a string representation of this shortcut.
183      *
184      * @return A string representation of this shortcut.
185      */
186    public String
187    toString()
188    {
189      String temp = "Ctrl+";
190      if (usesShift)
191        temp = temp + "Shift+";
192      temp = temp + keyName;
193      return temp;
194    }
195    
196    public int
197    hashCode()
198    {
199      // Arbitrary.
200      return key + (usesShift ? 23 : 57);
201    }
202    
203    /*************************************************************************/
204    
205    /**
206      * Returns a debugging string for this object.
207      *
208      * @return A debugging string for this object.
209      */
210    protected String
211    paramString()
212    {
213      return "key=" + key + ",usesShift=" + usesShift;
214    }
215    
216    private void 
217    setKeyName(int key)
218    {
219      if (key == '\n')
220        keyName = "Enter";
221      else if (key == '\b')
222        keyName = "Backspace";
223      else if (key == '\t')
224        keyName = "Tab";
225      else if (key == ' ')
226        keyName = "Space";
227      else if (key == ',')
228        keyName = "Comma";
229      else if (key == '.')
230        keyName = "Period";
231      else if (key == '/')
232        keyName = "Slash";
233      else if (key == '\\')
234        keyName = "Back Slash";
235      else if (key == ';')
236        keyName = "Semicolon";
237      else if (key == '=')
238        keyName = "Equals";
239      else if (key == '[')
240        keyName = "Open Bracket";
241      else if (key == ']')
242        keyName = "Close Bracket";
243      else if (key == '0')
244        keyName = "0";
245      else if (key == '1')
246        keyName = "1";
247      else if (key == '2')
248        keyName = "2";
249      else if (key == '3')
250        keyName = "3";
251      else if (key == '4')
252        keyName = "4";
253      else if (key == '5')
254        keyName = "5";
255      else if (key == '6')
256        keyName = "6";
257      else if (key == '7')
258        keyName = "7";
259      else if (key == '8')
260        keyName = "8";
261      else if (key == '9')
262        keyName = "9";
263      else if (key == 'A')
264        keyName = "A";
265      else if (key == 'B')
266        keyName = "B";
267      else if (key == 'C')
268        keyName = "C";
269      else if (key == 'D')
270        keyName = "D";
271      else if (key == 'E')
272        keyName = "E";
273      else if (key == 'F')
274        keyName = "F";
275      else if (key == 'G')
276        keyName = "G";
277      else if (key == 'H')
278        keyName = "H";
279      else if (key == 'I')
280        keyName = "I";
281      else if (key == 'J')
282        keyName = "J";
283      else if (key == 'K')
284        keyName = "K";
285      else if (key == 'L')
286        keyName = "L";
287      else if (key == 'M')
288        keyName = "M";
289      else if (key == 'N')
290        keyName = "N";
291      else if (key == 'O')
292        keyName = "O";
293      else if (key == 'P')
294        keyName = "P";
295      else if (key == 'Q')
296        keyName = "Q";
297      else if (key == 'R')
298        keyName = "R";
299      else if (key == 'S')
300        keyName = "S";
301      else if (key == 'T')
302        keyName = "T";
303      else if (key == 'U')
304        keyName = "U";
305      else if (key == 'V')
306        keyName = "V";
307      else if (key == 'W')
308        keyName = "W";
309      else if (key == 'X')
310        keyName = "X";
311      else if (key == 'Y')
312        keyName = "Y";
313      else if (key == 'Z')
314        keyName = "Z";
315      else if (key == 3)
316        keyName = "Cancel";
317      else if (key == 12)
318        keyName = "Clear";
319      else if (key == 16)
320        keyName = "Shift";
321      else if (key == 17)
322        keyName = "Ctrl";
323      else if (key == 18)
324        keyName = "Alt";
325      else if (key == 19)
326        keyName = "Pause";
327      else if (key == 20)
328        keyName = "Caps Lock";
329      else if (key == 21)
330        keyName = "Kana";
331      else if (key == 24)
332        keyName = "Final";
333      else if (key == 25)
334        keyName = "Kanji";
335      else if (key == 27)
336        keyName = "Escape";
337      else if (key == 28)
338        keyName = "Convert";
339      else if (key == 29)
340        keyName = "No Convert";
341      else if (key == 30)
342        keyName = "Accept";
343      else if (key == 31)
344        keyName = "Mode Change";
345      else if (key == 33)
346        keyName = "Page Up";
347      else if (key == 34)
348        keyName = "Page Down";
349      else if (key == 35)
350        keyName = "End";
351      else if (key == 36)
352        keyName = "Home";
353      else if (key == 37)
354        keyName = "Left";
355      else if (key == 38)
356        keyName = "Up";
357      else if (key == 39)
358        keyName = "Right";
359      else if (key == 40)
360        keyName = "Down";
361      else if (key == 96)
362        keyName = "NumPad-0";
363      else if (key == 97)
364        keyName = "NumPad-1";
365      else if (key == 98)
366        keyName = "NumPad-2";
367      else if (key == 99)
368        keyName = "NumPad-3";
369      else if (key == 100)
370        keyName = "NumPad-4";
371      else if (key == 101)
372        keyName = "NumPad-5";
373      else if (key == 102)
374        keyName = "NumPad-6";
375      else if (key == 103)
376        keyName = "NumPad-7";
377      else if (key == 104)
378        keyName = "NumPad-8";
379      else if (key == 105)
380        keyName = "NumPad-9";
381      else if (key == 106)
382        keyName = "NumPad *";
383      else if (key == 107)
384        keyName = "NumPad +";
385      else if (key == 108)
386        keyName = "NumPad ,";
387      else if (key == 109)
388        keyName = "NumPad -";
389      else if (key == 110)
390        keyName = "NumPad .";
391      else if (key == 111)
392        keyName = "NumPad /";
393      else if (key == 112)
394        keyName = "F1";
395      else if (key == 113)
396        keyName = "F2";
397      else if (key == 114)
398        keyName = "F3";
399      else if (key == 115)
400        keyName = "F4";
401      else if (key == 116)
402        keyName = "F5";
403      else if (key == 117)
404        keyName = "F6";
405      else if (key == 118)
406        keyName = "F7";
407      else if (key == 119)
408        keyName = "F8";
409      else if (key == 120)
410        keyName = "F9";
411      else if (key == 121)
412        keyName = "F10";
413      else if (key == 122)
414        keyName = "F11";
415      else if (key == 123)
416        keyName = "F12";
417      else if (key == 127)
418        keyName = "Delete";
419      else if (key == 144)
420        keyName = "Num Lock";
421      else if (key == 145)
422        keyName = "Scroll Lock";
423      else if (key == 154)
424        keyName = "Print Screen";
425      else if (key == 155)
426        keyName = "Insert";
427      else if (key == 156)
428        keyName = "Help";
429      else if (key == 157)
430        keyName = "Meta";
431      else if (key == 192)
432        keyName = "Back Quote";
433      else if (key == 222)
434        keyName = "Quote";
435    }
436    } // class MenuShortcut