OSDN Git Service

Imported GNU Classpath 0.90
[pf3gnuchains/gcc-fork.git] / libjava / classpath / javax / swing / JTextField.java
index 01c5c06..367503b 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -42,6 +42,7 @@ import java.awt.Dimension;
 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;
@@ -110,8 +111,7 @@ public class JTextField extends JTextComponent
   
   private int columns;
   private int align;
-  private int scrollOffset;
-
+  
   /** @since 1.3 */
   private Action action;
 
@@ -184,6 +184,9 @@ public class JTextField extends JTextComponent
 
     this.columns = columns;
 
+    // Initialize the horizontal visibility model.
+    horizontalVisibility = new DefaultBoundedRangeModel();
+
     setDocument(doc == null ? createDefaultModel() : doc);
 
     if (text != null)
@@ -191,9 +194,6 @@ public class JTextField extends JTextComponent
 
     // default value for alignment
     align = LEADING;
-
-    // Initialize the horizontal visibility model.
-    horizontalVisibility = new DefaultBoundedRangeModel();
   }
 
   /**
@@ -270,7 +270,7 @@ public class JTextField extends JTextComponent
    */
   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)
@@ -368,8 +368,7 @@ public class JTextField extends JTextComponent
    */
   public int getScrollOffset()
   {
-    //FIXME: this should return horizontalVisibility's value
-    return scrollOffset;
+    return horizontalVisibility.getValue();
   }
 
   /**
@@ -379,8 +378,13 @@ public class JTextField extends JTextComponent
    */
   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));
+    
   }
 
   /**
@@ -525,9 +529,6 @@ public class JTextField extends JTextComponent
    */
   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;
   }
 
@@ -544,4 +545,25 @@ public class JTextField extends JTextComponent
   {
     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);
+  }
+  
 }