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