001: /*
002: * @(#)GTextComponentPeer.java 1.18 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program 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 version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: *
026: */
027:
028: package sun.awt.gtk;
029:
030: import java.security.*;
031: import java.awt.*;
032: import java.awt.event.*;
033: import java.awt.datatransfer.*;
034: import sun.awt.peer.*;
035:
036: /**
037: *
038: *
039: * @author Nicholas Allen
040: */
041:
042: abstract class GTextComponentPeer extends GComponentPeer implements
043: TextComponentPeer {
044: private static native void initIDs();
045:
046: static {
047: initIDs();
048: }
049:
050: /** Creates a new GTextComponentPeer. */
051:
052: GTextComponentPeer(GToolkit toolkit, TextComponent target) {
053: super (toolkit, target);
054: setText(target.getText());
055: setEditable(target.isEditable());
056: }
057:
058: public boolean isFocusTraversable() {
059: return true;
060: }
061:
062: public native void setEditable(boolean editable);
063:
064: protected native byte[] getTextNative();
065:
066: public String getText() {
067: byte[] text = getTextNative();
068: return new String(text);
069: }
070:
071: protected native void setTextNative(byte[] text);
072:
073: public void setText(String text) {
074: if (text != null)
075: if ((text.length() > 0) || (getText().length() > 0))
076: setTextNative(stringToNulMultiByte(text));
077: }
078:
079: public Dimension getPreferredSize(int rows, int columns) {
080: return getMinimumSize(rows, columns);
081: }
082:
083: public Dimension getMinimumSize(int rows, int columns) {
084: FontMetrics fm = getFontMetrics(target.getFont());
085: /* Calculate proper size for text area
086: */
087: int colWidth = fm.charWidth('0');
088: int rowHeight = fm.getHeight();
089: /* adding 1 to both columns and row to extend visual space
090: * of the minimumSize - fixes bug 4707759
091: */
092: return new Dimension((columns + 1) * colWidth, (rows + 1)
093: * rowHeight);
094: }
095:
096: public native int getSelectionStart();
097:
098: public native int getSelectionEnd();
099:
100: public native void select(int selStart, int selEnd);
101:
102: public native void setCaretPosition(int pos);
103:
104: public native int getCaretPosition();
105:
106: /*
107: * Post a new TextEvent when the value of a text component changes.
108: */
109:
110: private void postTextEvent() {
111: GToolkit.postEvent(new TextEvent(target,
112: TextEvent.TEXT_VALUE_CHANGED));
113: }
114: }
|