/* MenuShortcut.java -- A class for menu accelerators
   Copyright (C) 1999, 2002 Free Software Foundation, Inc.

This file is part of GNU Classpath.

GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING.  If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.

Linking this library statically or dynamically with other modules is
making a combined work based on this library.  Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.

As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module.  An independent module is a module which is not derived from
or based on this library.  If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so.  If you do not wish to do so, delete this
exception statement from your version. */


package java.awt;

/**
  * This class implements a keyboard accelerator for a menu item.
  *
  * @author Aaron M. Renn (arenn@urbanophile.com)
  */
public class MenuShortcut implements java.io.Serializable
{

/*
 * Static Variables
 */

// Serialization Constant
private static final long serialVersionUID = 143448358473180225L;

/*************************************************************************/

/*
 * Instance Variables
 */

/**
  * @serial The virtual keycode for the shortcut.
  */
private int key;

/**
  * @serial <code>true</code> if the shift key was used with this shortcut,
  * or <code>false</code> otherwise.
  */
private boolean usesShift;

private String keyName;

/*************************************************************************/

/**
  * Initializes a new instance of <code>MenuShortcut</code> with the
  * specified virtual key value.
  *
  * @param key The virtual keycode for the shortcut.
  */
public
MenuShortcut(int key)
{
  this(key, false);
}

/*************************************************************************/

/**
  * Initializes a new instance of <code>MenuShortcut</code> with the
  * specified virtual key value and shift setting.
  *
  * @param key The virtual keycode for the shortcut.
  * @param usesShift <code>true</code> if the shift key was pressed,
  * <code>false</code> otherwise.
  */
public
MenuShortcut(int key, boolean usesShift)
{
  this.key = key;
  this.usesShift = usesShift;
  setKeyName(key);
}

/*************************************************************************/

/*
 * Instance Methods
 */

/**
  * Returns the virtual keycode for this shortcut.
  *
  * @return The virtual keycode for this shortcut.
  */
public int
getKey()
{
  return(key);
}

/*************************************************************************/

/**
  * Returns the shift setting for this shortcut.
  *
  * @return <code>true</code> if the shift key was pressed, <code>false</code>
  * otherwise.
  */
public boolean
usesShiftModifier()
{
  return(usesShift);
}

/*************************************************************************/

/**
  * Tests this object for equality against the specified object.  The two
  * objects will be considered equal if and only if the specified object
  * is an instance of <code>MenuShortcut</code> and has the same key value
  * and shift setting as this object.
  *
  * @param obj The object to test for equality against.
  *
  * @return <code>true</code> if the two objects are equal, <code>false</code>
  * otherwise.
  */
public boolean
equals(MenuShortcut obj)
{
  if (obj == null)
    return(false);

  if (obj.key != this.key)
    return(false);

  if (obj.usesShift != this.usesShift)
    return(false);

  return(true);
}

public boolean
equals(Object obj)
{
  if (obj instanceof MenuShortcut)
    {
      MenuShortcut ms = (MenuShortcut) obj;
      return (ms.key == key && ms.usesShift == usesShift);
    }      
  return false;
}

/*************************************************************************/

/**
  * Returns a string representation of this shortcut.
  *
  * @return A string representation of this shortcut.
  */
public String
toString()
{
  String temp = "Ctrl+";
  if (usesShift)
    temp = temp + "Shift+";
  temp = temp + keyName;
  return temp;
}

public int
hashCode()
{
  // Arbitrary.
  return key + (usesShift ? 23 : 57);
}

/*************************************************************************/

/**
  * Returns a debugging string for this object.
  *
  * @return A debugging string for this object.
  */
protected String
paramString()
{
  return "key=" + key + ",usesShift=" + usesShift;
}

private void 
setKeyName(int key)
{
  if (key == '\n')
    keyName = "Enter";
  else if (key == '\b')
    keyName = "Backspace";
  else if (key == '\t')
    keyName = "Tab";
  else if (key == ' ')
    keyName = "Space";
  else if (key == ',')
    keyName = "Comma";
  else if (key == '.')
    keyName = "Period";
  else if (key == '/')
    keyName = "Slash";
  else if (key == '\\')
    keyName = "Back Slash";
  else if (key == ';')
    keyName = "Semicolon";
  else if (key == '=')
    keyName = "Equals";
  else if (key == '[')
    keyName = "Open Bracket";
  else if (key == ']')
    keyName = "Close Bracket";
  else if (key == '0')
    keyName = "0";
  else if (key == '1')
    keyName = "1";
  else if (key == '2')
    keyName = "2";
  else if (key == '3')
    keyName = "3";
  else if (key == '4')
    keyName = "4";
  else if (key == '5')
    keyName = "5";
  else if (key == '6')
    keyName = "6";
  else if (key == '7')
    keyName = "7";
  else if (key == '8')
    keyName = "8";
  else if (key == '9')
    keyName = "9";
  else if (key == 'A')
    keyName = "A";
  else if (key == 'B')
    keyName = "B";
  else if (key == 'C')
    keyName = "C";
  else if (key == 'D')
    keyName = "D";
  else if (key == 'E')
    keyName = "E";
  else if (key == 'F')
    keyName = "F";
  else if (key == 'G')
    keyName = "G";
  else if (key == 'H')
    keyName = "H";
  else if (key == 'I')
    keyName = "I";
  else if (key == 'J')
    keyName = "J";
  else if (key == 'K')
    keyName = "K";
  else if (key == 'L')
    keyName = "L";
  else if (key == 'M')
    keyName = "M";
  else if (key == 'N')
    keyName = "N";
  else if (key == 'O')
    keyName = "O";
  else if (key == 'P')
    keyName = "P";
  else if (key == 'Q')
    keyName = "Q";
  else if (key == 'R')
    keyName = "R";
  else if (key == 'S')
    keyName = "S";
  else if (key == 'T')
    keyName = "T";
  else if (key == 'U')
    keyName = "U";
  else if (key == 'V')
    keyName = "V";
  else if (key == 'W')
    keyName = "W";
  else if (key == 'X')
    keyName = "X";
  else if (key == 'Y')
    keyName = "Y";
  else if (key == 'Z')
    keyName = "Z";
  else if (key == 3)
    keyName = "Cancel";
  else if (key == 12)
    keyName = "Clear";
  else if (key == 16)
    keyName = "Shift";
  else if (key == 17)
    keyName = "Ctrl";
  else if (key == 18)
    keyName = "Alt";
  else if (key == 19)
    keyName = "Pause";
  else if (key == 20)
    keyName = "Caps Lock";
  else if (key == 21)
    keyName = "Kana";
  else if (key == 24)
    keyName = "Final";
  else if (key == 25)
    keyName = "Kanji";
  else if (key == 27)
    keyName = "Escape";
  else if (key == 28)
    keyName = "Convert";
  else if (key == 29)
    keyName = "No Convert";
  else if (key == 30)
    keyName = "Accept";
  else if (key == 31)
    keyName = "Mode Change";
  else if (key == 33)
    keyName = "Page Up";
  else if (key == 34)
    keyName = "Page Down";
  else if (key == 35)
    keyName = "End";
  else if (key == 36)
    keyName = "Home";
  else if (key == 37)
    keyName = "Left";
  else if (key == 38)
    keyName = "Up";
  else if (key == 39)
    keyName = "Right";
  else if (key == 40)
    keyName = "Down";
  else if (key == 96)
    keyName = "NumPad-0";
  else if (key == 97)
    keyName = "NumPad-1";
  else if (key == 98)
    keyName = "NumPad-2";
  else if (key == 99)
    keyName = "NumPad-3";
  else if (key == 100)
    keyName = "NumPad-4";
  else if (key == 101)
    keyName = "NumPad-5";
  else if (key == 102)
    keyName = "NumPad-6";
  else if (key == 103)
    keyName = "NumPad-7";
  else if (key == 104)
    keyName = "NumPad-8";
  else if (key == 105)
    keyName = "NumPad-9";
  else if (key == 106)
    keyName = "NumPad *";
  else if (key == 107)
    keyName = "NumPad +";
  else if (key == 108)
    keyName = "NumPad ,";
  else if (key == 109)
    keyName = "NumPad -";
  else if (key == 110)
    keyName = "NumPad .";
  else if (key == 111)
    keyName = "NumPad /";
  else if (key == 112)
    keyName = "F1";
  else if (key == 113)
    keyName = "F2";
  else if (key == 114)
    keyName = "F3";
  else if (key == 115)
    keyName = "F4";
  else if (key == 116)
    keyName = "F5";
  else if (key == 117)
    keyName = "F6";
  else if (key == 118)
    keyName = "F7";
  else if (key == 119)
    keyName = "F8";
  else if (key == 120)
    keyName = "F9";
  else if (key == 121)
    keyName = "F10";
  else if (key == 122)
    keyName = "F11";
  else if (key == 123)
    keyName = "F12";
  else if (key == 127)
    keyName = "Delete";
  else if (key == 144)
    keyName = "Num Lock";
  else if (key == 145)
    keyName = "Scroll Lock";
  else if (key == 154)
    keyName = "Print Screen";
  else if (key == 155)
    keyName = "Insert";
  else if (key == 156)
    keyName = "Help";
  else if (key == 157)
    keyName = "Meta";
  else if (key == 192)
    keyName = "Back Quote";
  else if (key == 222)
    keyName = "Quote";
}
} // class MenuShortcut
