1 /* SwingTextFieldPeer.java -- A Swing based peer for AWT textfields 2 Copyright (C) 2006, 2007 Free Software Foundation, Inc. 3 4 This file is part of GNU Classpath. 5 6 GNU Classpath is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GNU Classpath is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Classpath; see the file COPYING. If not, write to the 18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 02110-1301 USA. 20 21 Linking this library statically or dynamically with other modules is 22 making a combined work based on this library. Thus, the terms and 23 conditions of the GNU General Public License cover the whole 24 combination. 25 26 As a special exception, the copyright holders of this library give you 27 permission to link this library with independent modules to produce an 28 executable, regardless of the license terms of these independent 29 modules, and to copy and distribute the resulting executable under 30 terms of your choice, provided that you also meet, for each linked 31 independent module, the terms and conditions of the license of that 32 module. An independent module is a module which is not derived from 33 or based on this library. If you modify this library, you may extend 34 this exception to your version of the library, but you are not 35 obligated to do so. If you do not wish to do so, delete this 36 exception statement from your version. */ 37 package gnu.java.awt.peer.swing; 38 39 import java.awt.Container; 40 import java.awt.Dimension; 41 import java.awt.Graphics; 42 import java.awt.Image; 43 import java.awt.Point; 44 import java.awt.Rectangle; 45 import java.awt.TextField; 46 import java.awt.event.FocusEvent; 47 import java.awt.event.KeyEvent; 48 import java.awt.event.MouseEvent; 49 import java.awt.im.InputMethodRequests; 50 import java.awt.peer.TextFieldPeer; 51 52 import javax.swing.JComponent; 53 import javax.swing.JTextField; 54 55 /** 56 * A TextFieldPeer based on Swing JTextField. 57 * 58 * @author Roman Kennke (kennke@aicas.com) 59 */ 60 public class SwingTextFieldPeer 61 extends SwingComponentPeer 62 implements TextFieldPeer 63 { 64 65 /** 66 * A specialized Swing textfield for use in the peer. 67 * 68 * @author Roman Kennke (kennke@aicas.com) 69 */ 70 private class SwingTextField 71 extends JTextField 72 implements SwingComponent 73 { 74 75 TextField textField; 76 SwingTextField(TextField textField)77 SwingTextField(TextField textField) 78 { 79 this.textField = textField; 80 } 81 82 /** 83 * Overridden to provide normal behaviour even without a real peer 84 * attached. 85 * 86 * @return the location of the textfield on screen 87 */ getLocationOnScreen()88 public Point getLocationOnScreen() 89 { 90 return SwingTextFieldPeer.this.getLocationOnScreen(); 91 } 92 93 /** 94 * Overridden so that the isShowing method returns the correct value 95 * for the swing button, even if it has no peer on its own. 96 * 97 * @return <code>true</code> if the button is currently showing, 98 * <code>false</code> otherwise 99 */ isShowing()100 public boolean isShowing() 101 { 102 boolean retVal = false; 103 if (textField != null) 104 retVal = textField.isShowing(); 105 return retVal; 106 } 107 108 /** 109 * Overridden, so that the Swing button can create an Image without its 110 * own peer. 111 * 112 * @param w the width of the image 113 * @param h the height of the image 114 * 115 * @return an image 116 */ createImage(int w, int h)117 public Image createImage(int w, int h) 118 { 119 return SwingTextFieldPeer.this.createImage(w, h); 120 } 121 122 /** 123 * Returns this textfield. 124 * 125 * @return <code>this</code> 126 */ getJComponent()127 public JComponent getJComponent() 128 { 129 return this; 130 } 131 132 /** 133 * Handles mouse events by forwarding it to the swing textfield. 134 * 135 * @param ev the mouse event 136 */ handleMouseEvent(MouseEvent ev)137 public void handleMouseEvent(MouseEvent ev) 138 { 139 ev.setSource(this); 140 processMouseEvent(ev); 141 } 142 143 /** 144 * Handles mouse motion events by forwarding it to the swing textfield. 145 * 146 * @param ev the mouse motion event 147 */ handleMouseMotionEvent(MouseEvent ev)148 public void handleMouseMotionEvent(MouseEvent ev) 149 { 150 ev.setSource(this); 151 processMouseMotionEvent(ev); 152 } 153 154 /** 155 * Handles key events by forwarding it to the swing textfield. 156 * 157 * @param ev the key event 158 */ handleKeyEvent(KeyEvent ev)159 public void handleKeyEvent(KeyEvent ev) 160 { 161 ev.setSource(this); 162 processKeyEvent(ev); 163 } 164 165 /** 166 * Handles focus events by forwarding it to 167 * <code>processFocusEvent()</code>. 168 * 169 * @param ev the Focus event 170 */ handleFocusEvent(FocusEvent ev)171 public void handleFocusEvent(FocusEvent ev) 172 { 173 processFocusEvent(ev); 174 } 175 176 getParent()177 public Container getParent() 178 { 179 Container par = null; 180 if (textField != null) 181 par = textField.getParent(); 182 return par; 183 } 184 getGraphics()185 public Graphics getGraphics() 186 { 187 return SwingTextFieldPeer.this.getGraphics(); 188 } 189 requestFocus()190 public void requestFocus() { 191 SwingTextFieldPeer.this.requestFocus(awtComponent, false, true, 0); 192 } 193 requestFocus(boolean temporary)194 public boolean requestFocus(boolean temporary) { 195 return SwingTextFieldPeer.this.requestFocus(awtComponent, temporary, 196 true, 0); 197 } 198 199 } 200 201 /** 202 * Creates a new <code>SwingTextFieldPeer</code> instance for the specified 203 * AWT textfield. 204 * 205 * @param textField the AWT textfield 206 */ SwingTextFieldPeer(TextField textField)207 public SwingTextFieldPeer(TextField textField) 208 { 209 SwingTextField swingTextField = new SwingTextField(textField); 210 swingTextField.setText(textField.getText()); 211 init(textField, swingTextField); 212 } 213 214 /** 215 * Returns the minimum size of the textfield. 216 * 217 * @param len not used here 218 * 219 * @return the minimum size of the textfield 220 */ minimumSize(int len)221 public Dimension minimumSize(int len) 222 { 223 return swingComponent.getJComponent().getMinimumSize(); 224 } 225 226 /** 227 * Returns the preferred size of the textfield. 228 * 229 * @param len not used here 230 * 231 * @return the preferred size of the textfield 232 */ preferredSize(int len)233 public Dimension preferredSize(int len) 234 { 235 return swingComponent.getJComponent().getPreferredSize(); 236 } 237 238 /** 239 * Returns the minimum size of the textfield. 240 * 241 * @param len not used here 242 * 243 * @return the minimum size of the textfield 244 */ getMinimumSize(int len)245 public Dimension getMinimumSize(int len) 246 { 247 return swingComponent.getJComponent().getMinimumSize(); 248 } 249 250 /** 251 * Returns the preferred size of the textfield. 252 * 253 * @param len not used here 254 * 255 * @return the preferred size of the textfield 256 */ getPreferredSize(int len)257 public Dimension getPreferredSize(int len) 258 { 259 return swingComponent.getJComponent().getPreferredSize(); 260 } 261 262 /** 263 * Sets the echo character. 264 * 265 * @param echoChar the echo character to be set 266 */ setEchoChar(char echoChar)267 public void setEchoChar(char echoChar) 268 { 269 // TODO: Must be implemented. 270 } 271 272 /** 273 * Sets the echo character. 274 * 275 * @param echoChar the echo character to be set 276 */ setEchoCharacter(char echoChar)277 public void setEchoCharacter(char echoChar) 278 { 279 // TODO: Must be implemented. 280 } 281 282 /** 283 * Returns the end index of the current selection. 284 * 285 * @return the end index of the current selection 286 */ getSelectionEnd()287 public int getSelectionEnd() 288 { 289 // TODO: Must be implemented. 290 return 0; 291 } 292 293 /** 294 * Returns the start index of the current selection. 295 * 296 * @return the start index of the current selection 297 */ getSelectionStart()298 public int getSelectionStart() 299 { 300 // TODO: Must be implemented. 301 return 0; 302 } 303 304 /** 305 * Returns the current content of the textfield. 306 * 307 * @return the current content of the textfield 308 */ getText()309 public String getText() 310 { 311 return ((JTextField) swingComponent.getJComponent()).getText(); 312 } 313 314 /** 315 * Sets the content of the textfield. 316 * 317 * @param text the text to set 318 */ setText(String text)319 public void setText(String text) 320 { 321 ((JTextField) swingComponent.getJComponent()).setText(text); 322 } 323 324 /** 325 * Sets the current selection. 326 * 327 * @param startPos the start index of the selection 328 * @param endPos the start index of the selection 329 */ select(int startPos, int endPos)330 public void select(int startPos, int endPos) 331 { 332 // TODO: Must be implemented. 333 } 334 335 /** 336 * Sets the editable flag of the text field. 337 * 338 * @param editable <code>true</code> to make the textfield editable, 339 * <code>false</code> to make it uneditable 340 */ setEditable(boolean editable)341 public void setEditable(boolean editable) 342 { 343 ((JTextField) swingComponent.getJComponent()).setEditable(editable); 344 } 345 346 /** 347 * Returns the current caret position. 348 * 349 * @return the current caret position 350 */ getCaretPosition()351 public int getCaretPosition() 352 { 353 return ((JTextField) swingComponent.getJComponent()).getCaret().getDot(); 354 } 355 356 /** 357 * Sets the current caret position. 358 * 359 * @param pos the caret position to set 360 */ setCaretPosition(int pos)361 public void setCaretPosition(int pos) 362 { 363 ((JTextField) swingComponent.getJComponent()).getCaret().setDot(pos); 364 } 365 366 /** 367 * Returns the index of the character at the specified location. 368 * 369 * @param x the X coordinate of the point to query 370 * @param y the Y coordinate of the point to query 371 * 372 * @return the index of the character at the specified location 373 */ getIndexAtPoint(int x, int y)374 public int getIndexAtPoint(int x, int y) 375 { 376 // TODO: Must be implemented. 377 return 0; 378 } 379 380 /** 381 * Returns the bounds of the character at the specified index. 382 * 383 * @param pos the index of the character 384 * 385 * @return the bounds of the character at the specified index 386 */ getCharacterBounds(int pos)387 public Rectangle getCharacterBounds(int pos) 388 { 389 // TODO: Must be implemented. 390 return null; 391 } 392 393 /** 394 * Not used. 395 */ filterEvents(long filter)396 public long filterEvents(long filter) 397 { 398 // TODO: Must be implemented. 399 return 0; 400 } 401 402 /** 403 * Not used. 404 */ getInputMethodRequests()405 public InputMethodRequests getInputMethodRequests() 406 { 407 // TODO: Must be implemented. 408 return null; 409 } 410 411 } 412