[kaffe] CVS kaffe (robilad): Resynced with GNU Classpath: awt and swing fixes

Kaffe CVS cvs-commits at kaffe.org
Sun Jul 3 07:02:47 PDT 2005


PatchSet 6683 
Date: 2005/07/03 13:58:06
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
Resynced with GNU Classpath: awt and swing fixes

Members: 
	ChangeLog:1.4208->1.4209 
	libraries/javalib/Makefile.am:1.366->1.367 
	libraries/javalib/Makefile.in:1.456->1.457 
	libraries/javalib/all.files:1.137->1.138 
	libraries/javalib/java/awt/image/SampleModel.java:INITIAL->1.5 
	libraries/javalib/java/text/AttributedStringIterator.java:1.6->1.7 
	libraries/javalib/javax/swing/JFormattedTextField.java:1.10->1.11 
	libraries/javalib/javax/swing/JSpinner.java:1.7->1.8 
	libraries/javalib/javax/swing/plaf/metal/MetalLookAndFeel.java:1.10->1.11 
	libraries/javalib/javax/swing/plaf/metal/MetalScrollBarUI.java:1.2->1.3 
	libraries/javalib/javax/swing/plaf/metal/MetalSplitPaneDivider.java:INITIAL->1.1 
	libraries/javalib/javax/swing/plaf/metal/MetalSplitPaneUI.java:1.2->1.3 
	libraries/javalib/javax/swing/plaf/metal/MetalUtils.java:INITIAL->1.1 
	libraries/javalib/javax/swing/text/DateFormatter.java:INITIAL->1.1 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4208 kaffe/ChangeLog:1.4209
--- kaffe/ChangeLog:1.4208	Sun Jul  3 02:14:03 2005
+++ kaffe/ChangeLog	Sun Jul  3 13:58:06 2005
@@ -2,6 +2,58 @@
 
 	Resynced with GNU Classpath.
 
+	2005-06-13  Ziga Mahkovec  <ziga.mahkovec at klika.si>
+
+        * java/awt/image/SampleModel.java (getPixels): Fixed array
+        assignment.
+
+	2005-06-13  Ziga Mahkovec  <ziga.mahkovec at klika.si>
+
+        * java/text/AttributedStringIterator.java (getRunLimit): Fixed the
+        range of the returned indexes.
+
+	2005-06-13  Roman Kennke  <roman at kennke.org>
+
+        * javax/swing/plaf/metal/MetalUtils.java:
+        Added new package-private helper class.
+        * javax/swing/plaf/metal/MetalSplitPaneDivider.java:
+        Added new package-private class. This is the divider used
+        by JSplitPane.
+        * javax/swing/plaf/metal/MetalScrollBarUI.java
+        (paintThumb): Use new MetalUtils class for drawing the typical
+        Metal pattern on the thumb.
+        * javax/swing/plaf/metal/MetalScrollBarUI.java
+        (initComponentDefaults): Added color defaults for SplitPane.
+        * javax/swing/plaf/metal/MetalSplitPaneUI.java:
+        (createDefaultDivider): Implemented new method. This creates
+        the Metal divider for JSplitPane.
+
+	2005-06-13  Roman Kennke  <roman at kennke.org>
+
+        * javax/swing/JSpinner.java
+        (StubEditor): Removed this inner class.
+        (DefaultEditor): Implemented this class and its dummy methods.
+        (DateEditor): Added and implemented this inner class.
+
+	2005-06-13  Roman Kennke  <roman at kennke.org>
+
+        * javax/swing/JFormattedTextField.java
+        (setValue): Creates an AbstractFormatter instance based on the type
+        of the value beeing set.
+        (createFormatter): New helper method.
+
+
+	2005-06-13  Roman Kennke  <roman at kennke.org>
+
+        * javax/swing/text/DateFormatter.java:
+        Implemented new class.
+        * javax/swing/JFormattedTextField.java
+        (setValue): Added conversion from value to text.
+
+2005-07-03  Dalibor Topic  <robilad at kaffe.org>
+
+	Resynced with GNU Classpath.
+
 	2005-06-12  Ziga Mahkovec  <ziga.mahkovec at klika.si>
 
         * java/text/MessageFormat.java (parse): When parsing strings, check
Index: kaffe/libraries/javalib/Makefile.am
diff -u kaffe/libraries/javalib/Makefile.am:1.366 kaffe/libraries/javalib/Makefile.am:1.367
--- kaffe/libraries/javalib/Makefile.am:1.366	Sun Jul  3 01:32:19 2005
+++ kaffe/libraries/javalib/Makefile.am	Sun Jul  3 13:58:09 2005
@@ -3853,6 +3853,7 @@
 	javax/swing/plaf/metal/MetalScrollPaneUI.java \
 	javax/swing/plaf/metal/MetalSeparatorUI.java \
 	javax/swing/plaf/metal/MetalSliderUI.java \
+	javax/swing/plaf/metal/MetalSplitPaneDivider.java \
 	javax/swing/plaf/metal/MetalSplitPaneUI.java \
 	javax/swing/plaf/metal/MetalTabbedPaneUI.java \
 	javax/swing/plaf/metal/MetalTextFieldUI.java \
@@ -3860,7 +3861,8 @@
 	javax/swing/plaf/metal/MetalToggleButtonUI.java \
 	javax/swing/plaf/metal/MetalToolBarUI.java \
 	javax/swing/plaf/metal/MetalToolTipUI.java \
-	javax/swing/plaf/metal/MetalTreeUI.java
+	javax/swing/plaf/metal/MetalTreeUI.java \
+	javax/swing/plaf/metal/MetalUtils.java
 javax_swing_table_SRCS = \
 	javax/swing/table/AbstractTableModel.java \
 	javax/swing/table/DefaultTableCellRenderer.java \
@@ -3879,6 +3881,7 @@
 	javax/swing/text/Caret.java \
 	javax/swing/text/ChangedCharSetException.java \
 	javax/swing/text/ComponentView.java \
+	javax/swing/text/DateFormatter.java \
 	javax/swing/text/DefaultCaret.java \
 	javax/swing/text/DefaultEditorKit.java \
 	javax/swing/text/DefaultFormatter.java \
Index: kaffe/libraries/javalib/Makefile.in
diff -u kaffe/libraries/javalib/Makefile.in:1.456 kaffe/libraries/javalib/Makefile.in:1.457
--- kaffe/libraries/javalib/Makefile.in:1.456	Sun Jul  3 01:32:20 2005
+++ kaffe/libraries/javalib/Makefile.in	Sun Jul  3 13:58:10 2005
@@ -4428,6 +4428,7 @@
 	javax/swing/plaf/metal/MetalScrollPaneUI.java \
 	javax/swing/plaf/metal/MetalSeparatorUI.java \
 	javax/swing/plaf/metal/MetalSliderUI.java \
+	javax/swing/plaf/metal/MetalSplitPaneDivider.java \
 	javax/swing/plaf/metal/MetalSplitPaneUI.java \
 	javax/swing/plaf/metal/MetalTabbedPaneUI.java \
 	javax/swing/plaf/metal/MetalTextFieldUI.java \
@@ -4435,7 +4436,8 @@
 	javax/swing/plaf/metal/MetalToggleButtonUI.java \
 	javax/swing/plaf/metal/MetalToolBarUI.java \
 	javax/swing/plaf/metal/MetalToolTipUI.java \
-	javax/swing/plaf/metal/MetalTreeUI.java
+	javax/swing/plaf/metal/MetalTreeUI.java \
+	javax/swing/plaf/metal/MetalUtils.java
 
 javax_swing_table_SRCS = \
 	javax/swing/table/AbstractTableModel.java \
@@ -4456,6 +4458,7 @@
 	javax/swing/text/Caret.java \
 	javax/swing/text/ChangedCharSetException.java \
 	javax/swing/text/ComponentView.java \
+	javax/swing/text/DateFormatter.java \
 	javax/swing/text/DefaultCaret.java \
 	javax/swing/text/DefaultEditorKit.java \
 	javax/swing/text/DefaultFormatter.java \
Index: kaffe/libraries/javalib/all.files
diff -u kaffe/libraries/javalib/all.files:1.137 kaffe/libraries/javalib/all.files:1.138
--- kaffe/libraries/javalib/all.files:1.137	Sun Jul  3 01:32:23 2005
+++ kaffe/libraries/javalib/all.files	Sun Jul  3 13:58:11 2005
@@ -3263,6 +3263,7 @@
 javax/swing/plaf/metal/MetalScrollPaneUI.java
 javax/swing/plaf/metal/MetalSeparatorUI.java
 javax/swing/plaf/metal/MetalSliderUI.java
+javax/swing/plaf/metal/MetalSplitPaneDivider.java
 javax/swing/plaf/metal/MetalSplitPaneUI.java
 javax/swing/plaf/metal/MetalTabbedPaneUI.java
 javax/swing/plaf/metal/MetalTextFieldUI.java
@@ -3271,6 +3272,7 @@
 javax/swing/plaf/metal/MetalToolBarUI.java
 javax/swing/plaf/metal/MetalToolTipUI.java
 javax/swing/plaf/metal/MetalTreeUI.java
+javax/swing/plaf/metal/MetalUtils.java
 javax/swing/table/AbstractTableModel.java
 javax/swing/table/DefaultTableCellRenderer.java
 javax/swing/table/DefaultTableColumnModel.java
@@ -3287,6 +3289,7 @@
 javax/swing/text/Caret.java
 javax/swing/text/ChangedCharSetException.java
 javax/swing/text/ComponentView.java
+javax/swing/text/DateFormatter.java
 javax/swing/text/DefaultCaret.java
 javax/swing/text/DefaultEditorKit.java
 javax/swing/text/DefaultFormatter.java
===================================================================
Checking out kaffe/libraries/javalib/java/awt/image/SampleModel.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/java/awt/image/SampleModel.java,v
VERS: 1.5
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/java/awt/image/SampleModel.java	Sun Jul  3 14:02:46 2005
@@ -0,0 +1,477 @@
+/* Copyright (C) 2000, 2001, 2002, 2005  Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+package java.awt.image;
+
+/**
+ * @author Rolf W. Rasmussen (rolfwr at ii.uib.no)
+ */
+public abstract class SampleModel
+{
+  /** Width of image described. */
+  protected int width;
+  
+  /** Height of image described. */
+  protected int height;
+  
+  /** Number of bands in the image described. */
+  protected int numBands;
+
+  /** 
+   * The DataBuffer type that is used to store the data of the image
+   * described.
+   */
+  protected int dataType;
+
+  public SampleModel(int dataType, int w, int h, int numBands)
+  {
+    if ((w <= 0) || (h <= 0)) 
+      throw new IllegalArgumentException((w <= 0 ? " width<=0" : " width is ok")
+                                         +(h <= 0 ? " height<=0" : " height is ok"));
+	
+    // FIXME: How can an int be greater than Integer.MAX_VALUE?
+    // FIXME: How do we identify an unsupported data type?
+
+    this.dataType = dataType;
+    this.width = w;
+    this.height = h;
+    this.numBands = numBands;  
+  }
+  
+  public final int getWidth()
+  {
+    return width;
+  }
+
+  public final int getHeight()
+  {
+    return height;
+  }
+
+  public final int getNumBands()
+  {
+    return numBands;
+  }
+    
+  public abstract int getNumDataElements();
+  
+  public final int getDataType()
+  {
+    return dataType;
+  }
+
+  public int getTransferType()
+  {
+    // FIXME: Is this a reasonable default implementation?
+    return dataType;
+  }
+
+  public int[] getPixel(int x, int y, int[] iArray, DataBuffer data)
+  {
+    if (iArray == null) iArray = new int[numBands];
+    for (int b=0; b<numBands; b++) iArray[b] = getSample(x, y, b, data);
+    return iArray;
+  }
+  
+  /**
+   *
+   * This method is provided as a faster alternative to getPixel(),
+   * that can be used when there is no need to decode the pixel into
+   * separate sample values.
+   *
+   * @param obj An array to return the pixel data in. If null, an
+   * array of the right type and size will be created.
+   *
+   * @return A single pixel as an array object of a primitive type,
+   * based on the transfer type. Eg. if transfer type is
+   * DataBuffer.TYPE_USHORT, then a short[] object is returned.
+   */
+  public abstract Object getDataElements(int x, int y, Object obj,
+					 DataBuffer data);
+
+    
+  public Object getDataElements(int x, int y, int w, int h, Object obj,
+				DataBuffer data)
+  {
+    int size = w*h;
+    int numDataElements = getNumDataElements();
+    int dataSize = numDataElements*size;
+    
+    if (obj == null)
+      {
+	switch (getTransferType())
+	  {
+	  case DataBuffer.TYPE_BYTE:
+	    obj = new byte[dataSize];
+	    break;
+	  case DataBuffer.TYPE_USHORT:
+	    obj = new short[dataSize];
+	    break;
+	  case DataBuffer.TYPE_INT:
+	    obj = new int[dataSize];
+	    break;
+	  default:
+	    // Seems like the only sensible thing to do.
+	    throw new ClassCastException();
+	  }
+      }
+    Object pixelData = null;
+    int outOffset = 0;
+    for (int yy = y; yy<(y+h); yy++)
+      {
+	for (int xx = x; xx<(x+w); xx++)
+	  {
+	    pixelData = getDataElements(xx, yy, pixelData, data);
+	    System.arraycopy(pixelData, 0, obj, outOffset,
+			     numDataElements);
+	    outOffset += numDataElements;
+	  }
+      }
+    return obj;
+  }
+
+  public abstract void setDataElements(int x, int y, Object obj,
+				       DataBuffer data);
+
+  public void setDataElements(int x, int y, int w, int h,
+			      Object obj, DataBuffer data)
+  {
+    int size = w*h;
+    int numDataElements = getNumDataElements();
+    int dataSize = numDataElements*size;
+    
+    Object pixelData;
+    switch (getTransferType())
+      {
+      case DataBuffer.TYPE_BYTE:
+	pixelData = new byte[numDataElements];
+	break;
+      case DataBuffer.TYPE_USHORT:
+	pixelData = new short[numDataElements];
+	break;
+      case DataBuffer.TYPE_INT:
+	pixelData = new int[numDataElements];
+	break;
+      default:
+	// Seems like the only sensible thing to do.
+	throw new ClassCastException();
+      }
+    int inOffset = 0;
+
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    System.arraycopy(obj, inOffset, pixelData, 0,
+			     numDataElements);
+	    setDataElements(xx, yy, pixelData, data);
+	    inOffset += numDataElements;
+	  }
+      }
+  }
+
+  public float[] getPixel(int x, int y, float[] fArray, DataBuffer data)
+  {
+    if (fArray == null) fArray = new float[numBands];
+    
+    for (int b=0; b<numBands; b++)
+      {
+        fArray[b] = getSampleFloat(x, y, b, data);
+      }
+    return fArray;
+  }
+
+  public double[] getPixel(int x, int y, double[] dArray, DataBuffer data) {
+    if (dArray == null) dArray = new double[numBands];
+    for (int b=0; b<numBands; b++)
+      {
+	dArray[b] = getSampleDouble(x, y, b, data);
+      }
+    return dArray;
+  }
+
+  /* FIXME: Should it return a banded or pixel interleaved array of
+     samples? (Assume interleaved.) */
+  public int[] getPixels(int x, int y, int w, int h, int[] iArray,
+			 DataBuffer data)
+  {
+    int size = w*h;
+    int outOffset = 0;
+    int[] pixel = null;
+    if (iArray == null) iArray = new int[w*h*numBands];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    pixel = getPixel(xx, yy, pixel, data);
+	    System.arraycopy(pixel, 0, iArray, outOffset, numBands);
+	    outOffset += numBands;
+	  }
+      }
+    return iArray;
+  }
+
+  /* FIXME: Should it return a banded or pixel interleaved array of
+     samples? (Assume interleaved.) */
+  public float[] getPixels(int x, int y, int w, int h, float[] fArray,
+			   DataBuffer data)
+  {
+    int size = w*h;
+    int outOffset = 0;
+    float[] pixel = null;
+    if (fArray == null) fArray = new float[w*h*numBands];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    pixel = getPixel(xx, yy, pixel, data);
+	    System.arraycopy(pixel, 0, fArray, outOffset, numBands);
+	    outOffset += numBands;
+	  }
+      }
+    return fArray;
+  }
+    
+  /* FIXME: Should it return a banded or pixel interleaved array of
+     samples? (Assume interleaved.) */
+  public double[] getPixels(int x, int y, int w, int h, double[] dArray,
+			    DataBuffer data)
+  {
+    int size = w*h;
+    int outOffset = 0;
+    double[] pixel = null;
+    if (dArray == null) dArray = new double[w*h*numBands];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    pixel = getPixel(xx, yy, pixel, data);
+	    System.arraycopy(pixel, 0, dArray, outOffset, numBands);
+	    outOffset += numBands;
+	  }
+      }
+    return dArray;
+  }
+
+  public abstract int getSample(int x, int y, int b, DataBuffer data);
+
+  public float getSampleFloat(int x, int y, int b, DataBuffer data)
+  {
+    return getSample(x, y, b, data);
+  }
+
+  public double getSampleDouble(int x, int y, int b, DataBuffer data)
+  {
+    return getSampleFloat(x, y, b, data);
+  }
+
+  public int[] getSamples(int x, int y, int w, int h, int b,
+			  int[] iArray, DataBuffer data)
+  {
+    int size = w*h;
+    int outOffset = 0;
+    if (iArray == null) iArray = new int[size];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    iArray[outOffset++] = getSample(xx, yy, b, data);
+	  }
+      }
+    return iArray;
+  }
+
+  public float[] getSamples(int x, int y, int w, int h, int b,
+			    float[] fArray, DataBuffer data)
+  {
+    int size = w*h;
+    int outOffset = 0;
+    if (fArray == null) fArray = new float[size];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    fArray[outOffset++] = getSampleFloat(xx, yy, b, data);
+	  }
+      }
+    return fArray;
+  }
+
+  public double[] getSamples(int x, int y, int w, int h, int b,
+			     double[] dArray, DataBuffer data)
+  {
+    int size = w*h;
+    int outOffset = 0;
+    if (dArray == null) dArray = new double[size];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    dArray[outOffset++] = getSampleDouble(xx, yy, b, data);
+	  }
+      }
+    return dArray;
+  }
+  
+  public void setPixel(int x, int y, int[] iArray, DataBuffer data)
+  {
+    for (int b=0; b<numBands; b++) setSample(x, y, b, iArray[b], data);
+  }
+
+  public void setPixel(int x, int y, float[] fArray, DataBuffer data)
+  {
+    for (int b=0; b<numBands; b++) setSample(x, y, b, fArray[b], data);
+  }
+
+  public void setPixel(int x, int y, double[] dArray, DataBuffer data)
+  {
+    for (int b=0; b<numBands; b++) setSample(x, y, b, dArray[b], data);
+  }
+
+  public void setPixels(int x, int y, int w, int h, int[] iArray,
+			DataBuffer data)
+  {
+    int inOffset = 0;
+    int[] pixel = new int[numBands];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    System.arraycopy(iArray, inOffset, pixel, 0, numBands);
+	    setPixel(xx, yy, pixel, data);
+	    inOffset += numBands;
+	  }
+      }
+  }
+
+  public void setPixels(int x, int y, int w, int h, float[] fArray,
+			DataBuffer data)
+  {
+    int inOffset = 0;
+    float[] pixel = new float[numBands];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    System.arraycopy(fArray, inOffset, pixel, 0, numBands);
+	    setPixel(xx, yy, pixel, data);
+	    inOffset += numBands;
+	  }
+      }
+  }
+
+  public void setPixels(int x, int y, int w, int h, double[] dArray,
+			DataBuffer data)
+  {
+    int inOffset = 0;
+    double[] pixel = new double[numBands];
+    for (int yy=y; yy<(y+h); yy++)
+      {
+	for (int xx=x; xx<(x+w); xx++)
+	  {
+	    System.arraycopy(dArray, inOffset, pixel, 0, numBands);
+	    setPixel(xx, yy, pixel, data);
+	    inOffset += numBands;
+	  }
+      }
+  }
+
+  public abstract void setSample(int x, int y, int b, int s,
+				 DataBuffer data);
+
+  public void setSample(int x, int y, int b, float s,
+			DataBuffer data)
+  {
+    setSample(x, y, b, (int) s, data);
+  }
+
+  public void setSample(int x, int y, int b, double s,
+			DataBuffer data)
+  {
+    setSample(x, y, b, (float) s, data);
+  }
+
+  public void setSamples(int x, int y, int w, int h, int b,
+			 int[] iArray, DataBuffer data)
+  {
+    int size = w*h;
+    int inOffset = 0;
+    for (int yy=y; yy<(y+h); yy++)
+      for (int xx=x; xx<(x+w); xx++)
+	setSample(xx, yy, b, iArray[inOffset++], data);
+  }
+
+  public void setSamples(int x, int y, int w, int h, int b,
+			 float[] fArray, DataBuffer data)
+  {
+    int size = w*h;
+    int inOffset = 0;
+    for (int yy=y; yy<(y+h); yy++)
+      for (int xx=x; xx<(x+w); xx++)
+	setSample(xx, yy, b, fArray[inOffset++], data);
+
+    }
+
+    public void setSamples(int x, int y, int w, int h, int b,
+			   double[] dArray, DataBuffer data) {
+      int size = w*h;
+      int inOffset = 0;
+      for (int yy=y; yy<(y+h); yy++)
+	for (int xx=x; xx<(x+w); xx++)
+	  setSample(xx, yy, b, dArray[inOffset++], data);
+    }
+
+    public abstract SampleModel createCompatibleSampleModel(int w, int h);
+
+    /**
+     * Return a SampleModel with a subset of the bands in this model.
+     * 
+     * Selects bands.length bands from this sample model.  The bands chosen
+     * are specified in the indices of bands[].  This also permits permuting
+     * the bands as well as taking a subset.  Thus, giving an array with
+     * 1, 2, 3, ..., numbands, will give an identical sample model.
+     * 
+     * @param bands Array with band indices to include.
+     * @return A new sample model
+     */
+    public abstract SampleModel createSubsetSampleModel(int[] bands);
+
+    public abstract DataBuffer createDataBuffer();
+
+    public abstract int[] getSampleSize();
+
+    public abstract int getSampleSize(int band);
+}
Index: kaffe/libraries/javalib/java/text/AttributedStringIterator.java
diff -u kaffe/libraries/javalib/java/text/AttributedStringIterator.java:1.6 kaffe/libraries/javalib/java/text/AttributedStringIterator.java:1.7
--- kaffe/libraries/javalib/java/text/AttributedStringIterator.java:1.6	Sun May  2 05:55:30 2004
+++ kaffe/libraries/javalib/java/text/AttributedStringIterator.java	Sun Jul  3 13:58:15 2005
@@ -1,5 +1,5 @@
 /* AttributedStringIterator.java -- Class to iterate over AttributedString
-   Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -228,7 +228,7 @@
   for (int i = 0; i < attribs.length; ++i)
     {
       if (pos >= attribs[i].begin_index &&
-          pos <= attribs[i].end_index)
+          pos < attribs[i].end_index)
         {
           Iterator iter = attribute_set.iterator();
           while(iter.hasNext()) 
@@ -242,7 +242,7 @@
   if (hit)
     return runLimit;
   else
-    return -1;
+    return ci.getEndIndex();
 }
 
 /*************************************************************************/
Index: kaffe/libraries/javalib/javax/swing/JFormattedTextField.java
diff -u kaffe/libraries/javalib/javax/swing/JFormattedTextField.java:1.10 kaffe/libraries/javalib/javax/swing/JFormattedTextField.java:1.11
--- kaffe/libraries/javalib/javax/swing/JFormattedTextField.java:1.10	Sat Jun 11 21:43:17 2005
+++ kaffe/libraries/javalib/javax/swing/JFormattedTextField.java	Sun Jul  3 13:58:15 2005
@@ -42,7 +42,10 @@
 import java.io.Serializable;
 import java.text.Format;
 import java.text.ParseException;
+import java.util.Date;
 
+import javax.swing.text.DateFormatter;
+import javax.swing.text.DefaultFormatter;
 import javax.swing.text.Document;
 import javax.swing.text.DocumentFilter;
 import javax.swing.text.NavigationFilter;
@@ -296,9 +299,49 @@
   {
     if (value == newValue)
       return;
-    
+
+    // format value
+    AbstractFormatter formatter = createFormatter(newValue);
+    try
+      {
+        setText(formatter.valueToString(newValue));
+      }
+    catch (ParseException ex)
+      {
+        // TODO: what should we do with this?
+      }
+
     Object oldValue = value;
     value = newValue;
     firePropertyChange("value", oldValue, newValue);
+  }
+
+  /**
+   * A helper method that attempts to create a formatter that is suitable
+   * to format objects of the type like <code>value</code>.
+   *
+   * If <code>formatterFactory</code> is not null and the returned formatter
+   * is also not <code>null</code> then this formatter is used. Otherwise we
+   * try to create one based on the type of <code>value</code>.
+   *
+   * @param value an object which should be formatted by the formatter
+   *
+   * @return a formatter able to format objects of the class of
+   *     <code>value</code>
+   */
+  AbstractFormatter createFormatter(Object value)
+  {
+    AbstractFormatter formatter = null;
+    if (formatterFactory != null
+        && formatterFactory.getFormatter(this) != null)
+     formatter = formatterFactory.getFormatter(this);
+   else
+     {
+       if (value instanceof Date)
+         formatter = new DateFormatter();
+       else
+         formatter = new DefaultFormatter();
+     }
+    return formatter;
   }
 }
Index: kaffe/libraries/javalib/javax/swing/JSpinner.java
diff -u kaffe/libraries/javalib/javax/swing/JSpinner.java:1.7 kaffe/libraries/javalib/javax/swing/JSpinner.java:1.8
--- kaffe/libraries/javalib/javax/swing/JSpinner.java:1.7	Mon May 30 01:27:47 2005
+++ kaffe/libraries/javalib/javax/swing/JSpinner.java	Sun Jul  3 13:58:15 2005
@@ -41,17 +41,19 @@
 import java.awt.Component;
 import java.awt.Container;
 import java.awt.Dimension;
+import java.awt.Insets;
 import java.awt.LayoutManager;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.text.DecimalFormat;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 
 import javax.swing.border.EtchedBorder;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.plaf.SpinnerUI;
-
+import javax.swing.text.DateFormatter;
 
 /**
  * A JSpinner is a component which typically contains a numeric value and a
@@ -66,53 +68,15 @@
   /**
    * DOCUMENT ME!
    */
-  public static class StubEditor extends JLabel implements ChangeListener
-  {
-    /** DOCUMENT ME! */
-    private JLabel label;
-
-    /** DOCUMENT ME! */
-    private JButton up;
-
-    /** DOCUMENT ME! */
-    private JButton down;
-
-    /** DOCUMENT ME! */
-    private JSpinner spinner;
-
-    /**
-     * Creates a new StubEditor object.
-     *
-     * @param spinner DOCUMENT ME!
-     */
-    public StubEditor(JSpinner spinner)
-    {
-      this.spinner = spinner;
-      setBorder(new EtchedBorder());
-      setHorizontalAlignment(SwingConstants.TRAILING);
-      stateChanged(null); /* fill in the label */
-    }
-
-    /**
-     * DOCUMENT ME!
-     *
-     * @param evt DOCUMENT ME!
-     */
-    public void stateChanged(ChangeEvent evt)
-    {
-      setText(String.valueOf(spinner.getValue()));
-    }
-  }
-
-  /**
-   * DOCUMENT ME!
-   */
   public static class DefaultEditor extends JPanel implements ChangeListener,
                                                               PropertyChangeListener,
                                                               LayoutManager
   {
     private JSpinner spinner;
-    
+
+    /** The JFormattedTextField that backs the editor. */
+    JFormattedTextField ftf;
+
     /**
      * For compatability with Sun's JDK 1.4.2 rev. 5
      */
@@ -125,8 +89,12 @@
      */
     public DefaultEditor(JSpinner spinner)
     {
+      super();
+      setLayout(this);
       this.spinner = spinner;
-      
+      ftf = new JFormattedTextField();
+      add(ftf);
+      ftf.setValue(spinner.getValue());
       spinner.addChangeListener(this);
     }
 
@@ -163,8 +131,8 @@
      */
     public JFormattedTextField getTextField()
     {
-      return null;
-    } /* TODO */
+      return ftf;
+    }
     
     /**
      * DOCUMENT ME!
@@ -173,7 +141,12 @@
      */
     public void layoutContainer(Container parent)
     {
-    } /* TODO */
+      Insets insets = getInsets();
+      Dimension size = getSize();
+      ftf.setBounds(insets.left, insets.top,
+                    size.width - insets.left - insets.right,
+                    size.height - insets.top - insets.bottom);
+    }
     
     /**
      * DOCUMENT ME!
@@ -184,8 +157,11 @@
      */
     public Dimension minimumLayoutSize(Container parent)
     {
-      return null;
-    } /* TODO */
+      Insets insets = getInsets();
+      Dimension minSize = ftf.getMinimumSize();
+      return new Dimension(minSize.width + insets.left + insets.right,
+                            minSize.height + insets.top + insets.bottom);
+    }
     
     /**
      * DOCUMENT ME!
@@ -196,8 +172,11 @@
      */
     public Dimension preferredLayoutSize(Container parent)
     {
-      return null;
-    } /* TODO */
+      Insets insets = getInsets();
+      Dimension prefSize = ftf.getPreferredSize();
+      return new Dimension(prefSize.width + insets.left + insets.right,
+                            prefSize.height + insets.top + insets.bottom);
+    }
     
     /**
      * DOCUMENT ME!
@@ -279,6 +258,95 @@
     }
   }
 
+  /**
+   * An editor class for a <code>JSpinner</code> that is used
+   * for displaying and editing dates (e.g. that uses
+   * <code>SpinnerDateModel</code> as model).
+   *
+   * The editor uses a {@link JTextField} with the value
+   * displayed by a {@link DateFormatter} instance.
+   */
+  public static class DateEditor extends DefaultEditor
+  {
+
+    /** The serialVersionUID. */
+    private static final long serialVersionUID = -4279356973770397815L;
+
+    /** The DateFormat instance used to format the date. */
+    SimpleDateFormat dateFormat;
+
+    /**
+     * Creates a new instance of DateEditor for the specified
+     * <code>JSpinner</code>.
+     *
+     * @param spinner the <code>JSpinner</code> for which to
+     *     create a <code>DateEditor</code> instance
+     */
+    public DateEditor(JSpinner spinner)
+    {
+      super(spinner);
+      init(new SimpleDateFormat());
+    }
+
+    /**
+     * Creates a new instance of DateEditor for the specified
+     * <code>JSpinner</code> using the specified date format
+     * pattern.
+     *
+     * @param spinner the <code>JSpinner</code> for which to
+     *     create a <code>DateEditor</code> instance
+     * @param dateFormatPattern the date format to use
+     *
+     * @see SimpleDateFormat(String)
+     */
+    public DateEditor(JSpinner spinner, String dateFormatPattern)
+    {
+      super(spinner);
+      init(new SimpleDateFormat(dateFormatPattern));
+    }
+
+    /**
+     * Initializes the JFormattedTextField for this editor.
+     *
+     * @param the date format to use in the formatted text field
+     */
+    private void init(SimpleDateFormat format)
+    {
+      dateFormat = format;
+      getTextField().setFormatterFactory(
+        new JFormattedTextField.AbstractFormatterFactory()
+        {
+          public JFormattedTextField.AbstractFormatter
+          getFormatter(JFormattedTextField ftf)
+          {
+            return new DateFormatter(dateFormat);
+          }
+        });
+    }
+
+    /**
+     * Returns the <code>SimpleDateFormat</code> instance that is used to
+     * format the date value.
+     *
+     * @return the <code>SimpleDateFormat</code> instance that is used to
+     *     format the date value
+     */
+    public SimpleDateFormat getFormat()
+    {
+      return dateFormat;
+    }
+
+    /**
+     * Returns the {@link SpinnerDateModel} that is edited by this editor.
+     *
+     * @return the <code>SpinnerDateModel</code> that is edited by this editor
+     */
+    public SpinnerDateModel getModel()
+    {
+      return (SpinnerDateModel) getSpinner().getModel();
+    }
+  }
+
   private static final long serialVersionUID = 3412663575706551720L;
 

*** Patch too long, truncated ***




More information about the kaffe mailing list