1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * ident "%Z%%M% %I% %E% SMI" 24 * 25 * Copyright (c) 2000 by Sun Microsystems, Inc. 26 * All rights reserved. 27 */ 28 29/* 30 * Copyright (C) 1996 Active Software, Inc. 31 * All rights reserved. 32 * 33 * @(#) KeyField.java 1.6 - last change made 05/02/97 34 */ 35 36package sunsoft.jws.visual.rt.awt; 37 38import sunsoft.jws.visual.rt.base.Global; 39import java.awt.*; 40 41public class KeyField extends Canvas { 42 // commented out -kp use Event constants... 43 // public static final int ESC = 27; 44 // public static final int DELETE = 127; 45 46 47 48 49 private static int ipadx = 20; 50 private static int ipady = 14; 51 52 private int key; 53 private FontMetrics fontMetrics; 54 private boolean hasFocus; 55 56 public void addNotify() { 57 super.addNotify(); 58 fontMetrics = getFontMetrics(getFont()); 59 } 60 61 public void removeNotify() { 62 super.removeNotify(); 63 fontMetrics = null; 64 } 65 66 public Dimension minimumSize() { 67 Dimension d = new Dimension(0, 0); 68 69 if (fontMetrics != null) { 70 d.width = fontMetrics.stringWidth(/* NOI18N */ 71 "Carriage Return") + ipadx; 72 d.height = fontMetrics.getMaxAscent() + ipady; 73 } 74 75 return d; 76 } 77 78 public Dimension preferredSize() { 79 return minimumSize(); 80 } 81 82 public void setKey(int key) { 83 this.key = key; 84 repaint(); 85 } 86 87 public int getKey() { 88 return key; 89 } 90 91 private String getKeyString() { 92 String str; 93 94 switch (key) { 95 case 0: 96 str = /* NOI18N */"null"; 97 break; 98 case /* NOI18N */ '\n': 99 str = /* NOI18N */"Line Feed"; 100 break; 101 case /* NOI18N */ '\t': 102 str = /* NOI18N */"Tab"; 103 break; 104 case /* NOI18N */ '\f': 105 str = /* NOI18N */"Form Feed"; 106 break; 107 case /* NOI18N */ '\r': 108 str = /* NOI18N */"Carriage Return"; 109 break; 110 // case /* NOI18N */ '\b': 111 case Event.BACK_SPACE: 112 str = /* NOI18N */"Back Space"; 113 break; 114 case /* NOI18N */ ' ': 115 str = /* NOI18N */"Space"; 116 break; 117 118 // case ESC: 119 case Event.ESCAPE: 120 str = /* NOI18N */"Esc"; 121 break; 122 // case DELETE: 123 case Event.DELETE: 124 str = /* NOI18N */"Delete"; 125 break; 126 /* added -kp */ 127 case Event.INSERT: 128 str = /* NOI18N */"Insert"; 129 break; 130 case Event.CAPS_LOCK: 131 str = /* NOI18N */"Caps Lock"; 132 break; 133 case Event.NUM_LOCK: 134 str = /* NOI18N */"Num Lock"; 135 break; 136 case Event.PAUSE: 137 str = /* NOI18N */"Pause"; 138 break; 139 case Event.PRINT_SCREEN: 140 str = /* NOI18N */"Print Screen"; 141 break; 142 case Event.SCROLL_LOCK: 143 str = /* NOI18N */"Scroll Lock"; 144 break; 145 /* end added -kp */ 146 case Event.HOME: 147 str = /* NOI18N */"Home"; 148 break; 149 case Event.END: 150 str = /* NOI18N */"End"; 151 break; 152 case Event.PGUP: 153 str = /* NOI18N */"Page Up"; 154 break; 155 case Event.PGDN: 156 str = /* NOI18N */"Page Down"; 157 break; 158 case Event.UP: 159 str = /* NOI18N */"Up"; 160 break; 161 case Event.DOWN: 162 str = /* NOI18N */"Down"; 163 break; 164 case Event.LEFT: 165 str = /* NOI18N */"Left"; 166 break; 167 case Event.RIGHT: 168 str = /* NOI18N */"Right"; 169 break; 170 case Event.F1: 171 str = /* NOI18N */"F1"; 172 break; 173 case Event.F2: 174 str = /* NOI18N */"F2"; 175 break; 176 case Event.F3: 177 str = /* NOI18N */"F3"; 178 break; 179 case Event.F4: 180 str = /* NOI18N */"F4"; 181 break; 182 case Event.F5: 183 str = /* NOI18N */"F5"; 184 break; 185 case Event.F6: 186 str = /* NOI18N */"F6"; 187 break; 188 case Event.F7: 189 str = /* NOI18N */"F7"; 190 break; 191 case Event.F8: 192 str = /* NOI18N */"F8"; 193 break; 194 case Event.F9: 195 str = /* NOI18N */"F9"; 196 break; 197 case Event.F10: 198 str = /* NOI18N */"F10"; 199 break; 200 case Event.F11: 201 str = /* NOI18N */"F11"; 202 break; 203 case Event.F12: 204 str = /* NOI18N */"F12"; 205 break; 206 207 default: 208 if (key >= 32) 209 str = String.valueOf((char)key); 210 else 211 str = /* NOI18N */"^" + String.valueOf((char) 212 (key+ /* NOI18N */ 'A'-1)); 213 214 break; 215 } 216 217 return str; 218 } 219 220 public void paint(Graphics g) { 221 if (Global.isWindows()) 222 g = getGraphics(); 223 Dimension size = size(); 224 225 String str = getKeyString(); 226 int x = (size.width - fontMetrics.stringWidth(str)) / 2; 227 int y = (size.height + fontMetrics.getMaxAscent()) / 2 - 1; 228 if (isEnabled()) 229 g.setColor(getForeground()); 230 else 231 g.setColor(getBackground().darker()); 232 g.setFont(getFont()); 233 g.drawString(str, x, y); 234 235 g.setColor(getBackground()); 236 g.draw3DRect(1, 1, size.width-3, size.height-3, false); 237 g.draw3DRect(2, 2, size.width-5, size.height-5, false); 238 239 if (hasFocus) { 240 g.setColor(getForeground()); 241 g.drawRect(0, 0, size.width-1, size.height-1); 242 } 243 } 244 245 public boolean handleEvent(Event e) { 246 247 if (e.id == Event.GOT_FOCUS) { 248 if (!hasFocus) { 249 hasFocus = true; 250 repaint(); 251 } 252 } else if (e.id == Event.LOST_FOCUS) { 253 if (hasFocus) { 254 hasFocus = false; 255 repaint(); 256 } 257 } else { 258 return super.handleEvent(e); 259 } 260 261 return false; 262 } 263 264 public boolean mouseDown(Event e, int x, int y) { 265 if (!hasFocus) 266 requestFocus(); 267 return false; 268 } 269 270 public boolean keyDown(Event e, int key) { 271 setKey(key); 272 return false; 273 } 274} 275