/* JTextField.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Insets;
+import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
private int columns;
private int align;
- private int scrollOffset;
-
+
/** @since 1.3 */
private Action action;
this.columns = columns;
+ // Initialize the horizontal visibility model.
+ horizontalVisibility = new DefaultBoundedRangeModel();
+
setDocument(doc == null ? createDefaultModel() : doc);
if (text != null)
// default value for alignment
align = LEADING;
-
- // Initialize the horizontal visibility model.
- horizontalVisibility = new DefaultBoundedRangeModel();
}
/**
*/
protected void fireActionPerformed()
{
- ActionEvent event = new ActionEvent(this, 0, notifyAction);
+ ActionEvent event = new ActionEvent(this, 0, getText());
ActionListener[] listeners = getActionListeners();
for (int index = 0; index < listeners.length; ++index)
*/
public int getScrollOffset()
{
- //FIXME: this should return horizontalVisibility's value
- return scrollOffset;
+ return horizontalVisibility.getValue();
}
/**
*/
public void setScrollOffset(int offset)
{
- //FIXME: this should actualy scroll the field if needed
- scrollOffset = offset;
+ // Automatically sets to the highest possible value if
+ // offset is bigger than that.
+ horizontalVisibility.setValue(
+ Math.min(horizontalVisibility.getMaximum()
+ - horizontalVisibility.getExtent(),
+ offset));
+
}
/**
*/
public BoundedRangeModel getHorizontalVisibility()
{
- // TODO: The real implementation of this property is still missing.
- // However, this is not done in JTextField but must instead be handled in
- // javax.swing.text.FieldView.
return horizontalVisibility;
}
{
return ! (getParent() instanceof JViewport);
}
+
+ public void scrollRectToVisible(Rectangle r)
+ {
+ int v = horizontalVisibility.getValue();
+
+ // The extent value is the inner width of the text field.
+ int e = horizontalVisibility.getExtent();
+ Insets i = getInsets();
+
+ // The x value in the rectangle (usually) denotes the new location
+ // of the caret. We check whether the location lies inside the left or
+ // right border and scroll into the appropriate direction.
+ // The calculation has to be shifted by the BoundedRangeModel's value
+ // because that value was already used to calculate r.x (this happens
+ // as part of a modelToView() call in FieldView).
+ if (r.x < i.left)
+ setScrollOffset(v + r.x - i.left);
+ else if (r.x > e + i.left)
+ setScrollOffset(r.x + v - e - i.left);
+ }
+
}