Source for java.awt.Cursor

   1: /* Copyright (C) 1999, 2000, 2002  Free Software Foundation
   2: 
   3: This file is part of GNU Classpath.
   4: 
   5: GNU Classpath is free software; you can redistribute it and/or modify
   6: it under the terms of the GNU General Public License as published by
   7: the Free Software Foundation; either version 2, or (at your option)
   8: any later version.
   9: 
  10: GNU Classpath is distributed in the hope that it will be useful, but
  11: WITHOUT ANY WARRANTY; without even the implied warranty of
  12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13: General Public License for more details.
  14: 
  15: You should have received a copy of the GNU General Public License
  16: along with GNU Classpath; see the file COPYING.  If not, write to the
  17: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18: 02110-1301 USA.
  19: 
  20: Linking this library statically or dynamically with other modules is
  21: making a combined work based on this library.  Thus, the terms and
  22: conditions of the GNU General Public License cover the whole
  23: combination.
  24: 
  25: As a special exception, the copyright holders of this library give you
  26: permission to link this library with independent modules to produce an
  27: executable, regardless of the license terms of these independent
  28: modules, and to copy and distribute the resulting executable under
  29: terms of your choice, provided that you also meet, for each linked
  30: independent module, the terms and conditions of the license of that
  31: module.  An independent module is a module which is not derived from
  32: or based on this library.  If you modify this library, you may extend
  33: this exception to your version of the library, but you are not
  34: obligated to do so.  If you do not wish to do so, delete this
  35: exception statement from your version. */
  36: 
  37: 
  38: package java.awt;
  39: 
  40: /**
  41:   * This class represents various predefined cursor types.
  42:   *
  43:   * @author Aaron M. Renn (arenn@urbanophile.com)
  44:   */
  45: public class Cursor implements java.io.Serializable
  46: {
  47:   static final long serialVersionUID = 8028237497568985504L;
  48: 
  49:   /**
  50:   * Constant for the system default cursor type
  51:   */
  52:   public static final int DEFAULT_CURSOR = 0;
  53: 
  54:   /**
  55:   * Constant for a cross-hair cursor.
  56:   */
  57:   public static final int CROSSHAIR_CURSOR = 1;
  58: 
  59:   /**
  60:   * Constant for a cursor over a text field.
  61:   */
  62:   public static final int TEXT_CURSOR = 2;
  63: 
  64:   /**
  65:   * Constant for a cursor to display while waiting for an action to complete.
  66:   */
  67:   public static final int WAIT_CURSOR = 3;
  68: 
  69:   /**
  70:   * Cursor used over SW corner of window decorations.
  71:   */
  72:   public static final int SW_RESIZE_CURSOR = 4;
  73: 
  74:   /**
  75:   * Cursor used over SE corner of window decorations.
  76:   */
  77:   public static final int SE_RESIZE_CURSOR = 5;
  78: 
  79:   /**
  80:   * Cursor used over NW corner of window decorations.
  81:   */
  82:   public static final int NW_RESIZE_CURSOR = 6;
  83: 
  84:   /**
  85:   * Cursor used over NE corner of window decorations.
  86:   */
  87:   public static final int NE_RESIZE_CURSOR = 7;
  88: 
  89:   /**
  90:   * Cursor used over N edge of window decorations.
  91:   */
  92:   public static final int N_RESIZE_CURSOR = 8;
  93: 
  94:   /**
  95:   * Cursor used over S edge of window decorations.
  96:   */
  97:   public static final int S_RESIZE_CURSOR = 9;
  98: 
  99:   /**
 100:   * Cursor used over W edge of window decorations.
 101:   */
 102:   public static final int W_RESIZE_CURSOR = 10;
 103: 
 104:   /**
 105:   * Cursor used over E edge of window decorations.
 106:   */
 107:   public static final int E_RESIZE_CURSOR = 11;
 108: 
 109:   /**
 110:   * Constant for a hand cursor.
 111:   */
 112:   public static final int HAND_CURSOR = 12;
 113: 
 114:   /**
 115:   * Constant for a cursor used during window move operations.
 116:   */
 117:   public static final int MOVE_CURSOR = 13;
 118: 
 119:   private static String[] NAMES = { "Default Cursor", "Crosshair Cursor",
 120:                                   "Text Cursor", "Wait Cursor",
 121:                                   "Southwest Resize Cursor",
 122:                                   "Southeast Resize Cursor",
 123:                                   "Northwest Resize Cursor",
 124:                                   "Northeast Resize Cursor",
 125:                                   "North Resize Cursor", "South Resize Cursor",
 126:                                   "West Resize Cursor", "East Resize Cursor",
 127:                                   "Hand Cursor", "Move Cursor" };
 128: 
 129:   public static final int CUSTOM_CURSOR    = 0xFFFFFFFF;
 130: 
 131:   private static final int PREDEFINED_COUNT = 14;
 132: 
 133:   protected static Cursor[] predefined = new Cursor[PREDEFINED_COUNT];
 134:   protected String name;
 135: 
 136:   /**
 137:    * @serial The numeric id of this cursor.
 138:    */
 139:   int type;
 140: 
 141:   /**
 142:    * Initializes a new instance of <code>Cursor</code> with the specified
 143:    * type.
 144:    *
 145:    * @param type The cursor type.
 146:    *
 147:    * @exception IllegalArgumentException If the specified cursor type is invalid
 148:    */
 149:   public Cursor(int type)
 150:   {
 151:     if (type < 0 || type >= PREDEFINED_COUNT)
 152:       throw new IllegalArgumentException ("invalid cursor " + type);
 153: 
 154:     this.type = type;
 155: 
 156:     name = NAMES[type];
 157: 
 158:     // FIXME: lookup?
 159:   }
 160: 
 161:   /** This constructor is used internally only.
 162:    * Application code should call Toolkit.createCustomCursor().
 163:    */
 164:   protected Cursor(String name)
 165:   {
 166:     this.name = name;
 167:     this.type = CUSTOM_CURSOR;
 168:   }
 169: 
 170:   /**
 171:    * Returns an instance of <code>Cursor</code> for one of the specified
 172:    * predetermined types.
 173:    *
 174:    * @param type The type contant from this class.
 175:    *
 176:    * @return The requested predefined cursor.
 177:    *
 178:    * @exception IllegalArgumentException If the constant is not one of the
 179:    * predefined cursor type constants from this class.
 180:    */
 181:   public static Cursor getPredefinedCursor(int type)
 182:   {
 183:     if (type < 0 || type >= PREDEFINED_COUNT)
 184:       throw new IllegalArgumentException ("invalid cursor " + type);
 185:     if (predefined[type] == null)
 186:       predefined[type] = new Cursor(type);
 187:     return predefined[type];
 188:   }
 189: 
 190:   /**
 191:    * Retrieves the system specific custom Cursor named Cursor names are,
 192:    * for example: "Invalid.16x16".
 193:    *
 194:    * @exception AWTException
 195:    * @exception HeadlessException If GraphicsEnvironment.isHeadless()
 196:    * returns true.
 197:    */
 198:   public static Cursor getSystemCustomCursor(String name)
 199:                                       throws AWTException
 200:   {
 201:     if (GraphicsEnvironment.isHeadless())
 202:       throw new HeadlessException ();
 203: 
 204:     // FIXME
 205:     return null;
 206:   }
 207: 
 208:   /**
 209:    * Returns an instance of the system default cursor type.
 210:    *
 211:    * @return The system default cursor.
 212:    */
 213:   public static Cursor getDefaultCursor()
 214:   {
 215:     return getPredefinedCursor(DEFAULT_CURSOR);
 216:   }
 217: 
 218:   /**
 219:    * Returns the numeric type identifier for this cursor.
 220:    *
 221:    * @return The cursor id.
 222:    */
 223:   public int getType()
 224:   {
 225:     return type;
 226:   }
 227: 
 228:   public String getName()
 229:   {
 230:     return name;
 231:   }
 232: 
 233:   public String toString()
 234:   {
 235:     return (this.getClass()
 236:             + "[type=" + getType()
 237:             + ",name=" + getName() + "]");
 238:   }
 239: }