[kaffe] CVS kaffe (robilad): resynced with gnu classpath: swing fixes

Kaffe CVS cvs-commits at kaffe.org
Thu May 26 04:16:24 PDT 2005


PatchSet 6574 
Date: 2005/05/26 11:10:36
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
resynced with gnu classpath: swing fixes

Members: 
	ChangeLog:1.4101->1.4102 
	libraries/javalib/javax/swing/AbstractButton.java:1.13->1.14 
	libraries/javalib/javax/swing/BoxLayout.java:1.6->1.7 
	libraries/javalib/javax/swing/DefaultListSelectionModel.java:1.6->1.7 
	libraries/javalib/javax/swing/JButton.java:1.3->1.4 
	libraries/javalib/javax/swing/JFileChooser.java:1.4->1.5 
	libraries/javalib/javax/swing/JInternalFrame.java:1.8->1.9 
	libraries/javalib/javax/swing/JLayeredPane.java:1.6->1.7 
	libraries/javalib/javax/swing/JMenuItem.java:1.8->1.9 
	libraries/javalib/javax/swing/JTextArea.java:1.9->1.10 
	libraries/javalib/javax/swing/JViewport.java:1.8->1.9 
	libraries/javalib/javax/swing/SwingUtilities.java:1.13->1.14 
	libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.12->1.13 
	libraries/javalib/javax/swing/plaf/basic/BasicSplitPaneUI.java:1.4->1.5 
	libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java:1.11->1.12 
	libraries/javalib/javax/swing/plaf/basic/BasicViewportUI.java:1.5->1.6 
	libraries/javalib/javax/swing/text/JTextComponent.java:1.17->1.18 
	libraries/javalib/javax/swing/tree/TreePath.java:1.1->1.2 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4101 kaffe/ChangeLog:1.4102
--- kaffe/ChangeLog:1.4101	Thu May 26 10:24:22 2005
+++ kaffe/ChangeLog	Thu May 26 11:10:36 2005
@@ -2,6 +2,125 @@
 
         Resynced with GNU Classpath.
 
+	2005-05-25  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/AbstractButton.java:
+	(constructor): Removed model creation.
+	* javax/swing/JButton.java:
+	(constructor): Added model creation.
+	* javax/swing/JMenuItem.java:
+	(init): Added model creation.
+
+	2005-05-25  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JLayeredPane.java
+	(static getLayer): Add cast to force a call to the instance method
+	getLayer().
+	(getLayeredPaneAbove): Added and implemented method.
+	* javax/swing/JInternalFrame.java
+	(getLayer): Add cast to force a call to the instance method
+	getLayer() of JLayeredPane.
+
+	2005-05-25  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/plaf/basic/BasicSplitPaneUI.java
+	(paint): Added check to make sure the split pane divider has
+	a valid location.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/text/JTextComponent.java
+	(getPreferredScrollableViewportSize): Implemented this method.
+	(getScrollableUnitIncrement): Implemented this method.
+	(getScrollableBlockIncrement): Implemented this method.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JTextArea.java
+	(getPreferredScrollableViewportSize): Added and implemented
+	new method.
+	(getScrollableUnitIncrement): Added and implemented new
+	method.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JLayeredPane.java
+	(getLayer): Added and implemented new (static) method.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JFileChooser.java
+	(constructor(String, FileSystemView)): Added constructor.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JViewport.java
+	(createLayoutManager): Added and implemented new method.
+	(constructor): Set the LayoutManager that is created by
+	createLayoutManager().
+	* javax/swing/plaf/basic/BasicViewportUI.java
+	(installUI): Removed setLayout(..). This is moved into
+	the constructor of JViewport (as the API docs suggest).
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JViewport.java:
+	(ViewListener): Added and implemented inner class.
+	(createViewListener): Added and implemented new method.
+	(setView): Add and remove ViewListener to/from the view component.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/DefaultListSelectionModel.java
+	(fireValueChanged(boolean)): Added and implemented this method.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/SwingUtilities.java:
+	(getWindowAncestor): Added and implemented this method.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/JFileChooser.java:
+	Fixed the values of several public constant fields.
+
+	2005-05-23  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/plaf/basic/BasicLookAndFeel.java
+	(initComponentDefaults): Uncommented code that has accidentally
+	been commented out.
+
+	2005-05-22  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/BoxLayout.java
+	(maximumLayoutSize): Added checks for overflow. This is necessary
+	because some components have maximumSize of Integer.MAX_VALUE,
+	that would cause an overflow if summed up.
+
+	2005-05-22  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/tree/TreePath.java
+	(getParentPath): Return null if this path only has no parent.
+
+	2005-05-22  Roman Kennke  <roman at kennke.org>
+
+        * javax/swing/plaf/basic/BasicTextUI.java:
+        (getMaximumSize): Fixed comment.
+
+	2005-05-22  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/tree/TreePath.java:
+	Reformatted this file in order to match our coding style.
+
+	2005-05-22  Roman Kennke  <roman at kennke.org>
+
+	* javax/swing/plaf/basic/BasicTextUI.java
+	(getMaximumSize): Implemented this method.
+
+2005-05-26  Dalibor Topic  <robilad at kaffe.org>
+
+        Resynced with GNU Classpath.
+
 	2005-05-25  Audrius Meskauskas  <AudriusA at Bioinformatics.org>
 
 	* org/omg/CORBA/TRANSIENT.java (serialVersionUID): Added 1.4 SVUID.
Index: kaffe/libraries/javalib/javax/swing/AbstractButton.java
diff -u kaffe/libraries/javalib/javax/swing/AbstractButton.java:1.13 kaffe/libraries/javalib/javax/swing/AbstractButton.java:1.14
--- kaffe/libraries/javalib/javax/swing/AbstractButton.java:1.13	Thu May 19 00:31:20 2005
+++ kaffe/libraries/javalib/javax/swing/AbstractButton.java	Thu May 26 11:10:40 2005
@@ -523,14 +523,9 @@
  {
     this.text = text;
     default_icon = icon;
-    model = new DefaultButtonModel();
     actionListener = createActionListener();
     changeListener = createChangeListener();
     itemListener = createItemListener();
-
-    model.addActionListener(actionListener);
-    model.addChangeListener(changeListener);
-    model.addItemListener(itemListener);
 
     horizontalAlignment = CENTER;
     horizontalTextPosition = TRAILING;
Index: kaffe/libraries/javalib/javax/swing/BoxLayout.java
diff -u kaffe/libraries/javalib/javax/swing/BoxLayout.java:1.6 kaffe/libraries/javalib/javax/swing/BoxLayout.java:1.7
--- kaffe/libraries/javalib/javax/swing/BoxLayout.java:1.6	Sun May 15 10:13:28 2005
+++ kaffe/libraries/javalib/javax/swing/BoxLayout.java	Thu May 26 11:10:40 2005
@@ -477,6 +477,9 @@
             Component comp = children[index];
             Dimension sz = comp.getMaximumSize();
             x += sz.width;
+            // Check for overflow.
+            if (x < 0)
+              x = Integer.MAX_VALUE;
             y = Math.max(y, sz.height);
           }
       }
@@ -489,6 +492,9 @@
             Component comp = children[index];
             Dimension sz = comp.getMaximumSize();
             y += sz.height;
+            // Check for overflow
+            if (y < 0)
+              y = Integer.MAX_VALUE;
             x = Math.max(x, sz.width);
           }
       } 
Index: kaffe/libraries/javalib/javax/swing/DefaultListSelectionModel.java
diff -u kaffe/libraries/javalib/javax/swing/DefaultListSelectionModel.java:1.6 kaffe/libraries/javalib/javax/swing/DefaultListSelectionModel.java:1.7
--- kaffe/libraries/javalib/javax/swing/DefaultListSelectionModel.java:1.6	Sat Jan 22 18:29:05 2005
+++ kaffe/libraries/javalib/javax/swing/DefaultListSelectionModel.java	Thu May 26 11:10:40 2005
@@ -516,6 +516,24 @@
 
   /**
    * Fires a {@link ListSelectionEvent} to all the listeners of type {@link
+   * ListSelectionListener} registered with this selection model to
+   * indicate that a series of adjustment has just ended.
+   *
+   * The values of {@link #getMinSelectionIndex} and
+   * {@link getMaxSelectionIndex} are used in the {@link ListSelectionEvent}
+   * that gets fired.
+   *
+   * @param isAdjusting <code>true</code> if this is the final change
+   *     in a series of adjustments, <code>false/code> otherwise
+   */
+  protected void fireValueChanged(boolean isAdjusting)
+  {
+    fireValueChanged(getMinSelectionIndex(), getMaxSelectionIndex(),
+                     isAdjusting);
+  }
+
+  /**
+   * Fires a {@link ListSelectionEvent} to all the listeners of type {@link
    * ListSelectionListener} registered with this selection model.
    *
    * @param firstIndex The low index of the changed range
Index: kaffe/libraries/javalib/javax/swing/JButton.java
diff -u kaffe/libraries/javalib/javax/swing/JButton.java:1.3 kaffe/libraries/javalib/javax/swing/JButton.java:1.4
--- kaffe/libraries/javalib/javax/swing/JButton.java:1.3	Sun Aug  8 19:46:03 2004
+++ kaffe/libraries/javalib/javax/swing/JButton.java	Thu May 26 11:10:40 2005
@@ -78,6 +78,7 @@
   public JButton(String text, Icon icon)
   {
     super(text, icon);
+    setModel(new DefaultButtonModel());
   }
 
   public Object[] getSelectedObjects()
Index: kaffe/libraries/javalib/javax/swing/JFileChooser.java
diff -u kaffe/libraries/javalib/javax/swing/JFileChooser.java:1.4 kaffe/libraries/javalib/javax/swing/JFileChooser.java:1.5
--- kaffe/libraries/javalib/javax/swing/JFileChooser.java:1.4	Sat May 21 15:13:39 2005
+++ kaffe/libraries/javalib/javax/swing/JFileChooser.java	Thu May 26 11:10:40 2005
@@ -92,58 +92,73 @@
   public static final String APPROVE_SELECTION = "ApproveSelection";
 
   /** DOCUMENT ME! */
-  public static final String APPROVE_BUTTON_TEXT_CHANGED_PROPERTY = "approvebuttonText";
+  public static final String APPROVE_BUTTON_TEXT_CHANGED_PROPERTY =
+    "ApproveButtonTextChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY = "approveButtonToolTipText";
+  public static final String APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY =
+    "ApproveButtonToolTipTextChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY = "approveButtonMnemonic";
+  public static final String APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY =
+    "ApproveButtonMnemonicChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY = "controlButtonsAreShown";
+  public static final String CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY =
+    "ControlButtonsAreShownChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String DIRECTORY_CHANGED_PROPERTY = "directory";
+  public static final String DIRECTORY_CHANGED_PROPERTY = "directoryChanged";
 
   /** DOCUMENT ME! */
-  public static final String SELECTED_FILE_CHANGED_PROPERTY = "SelectedFileChangedProperty";
+  public static final String SELECTED_FILE_CHANGED_PROPERTY =
+    "SelectedFilesChangedProperty";
 
   /** DOCUMENT ME! */
   public static final String SELECTED_FILES_CHANGED_PROPERTY = "selectedFiles";
 
   /** DOCUMENT ME! */
-  public static final String MULTI_SELECTION_ENABLED_CHANGED_PROPERTY = "multiSelectionEnabled";
+  public static final String MULTI_SELECTION_ENABLED_CHANGED_PROPERTY =
+    "MultiSelectionEnabledChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String FILE_SYSTEM_VIEW_CHANGED_PROPERTY = "fileSystemView";
+  public static final String FILE_SYSTEM_VIEW_CHANGED_PROPERTY =
+    "FileSystemViewChanged";
 
   /** DOCUMENT ME! */
-  public static final String FILE_VIEW_CHANGED_PROPERTY = "fileView";
+  public static final String FILE_VIEW_CHANGED_PROPERTY = "fileViewChanged";
 
   /** DOCUMENT ME! */
-  public static final String FILE_HIDING_CHANGED_PROPERTY = "fileHidingEnabled";
+  public static final String FILE_HIDING_CHANGED_PROPERTY =
+    "FileHidingChanged";
 
   /** DOCUMENT ME! */
-  public static final String FILE_FILTER_CHANGED_PROPERTY = "fileFilter";
+  public static final String FILE_FILTER_CHANGED_PROPERTY =
+    "fileFilterChanged";
 
   /** DOCUMENT ME! */
-  public static final String FILE_SELECTION_MODE_CHANGED_PROPERTY = "fileSelectionMode";
+  public static final String FILE_SELECTION_MODE_CHANGED_PROPERTY =
+    "fileSelectionChanged";
 
   /** DOCUMENT ME! */
-  public static final String ACCESSORY_CHANGED_PROPERTY = "accessory";
+  public static final String ACCESSORY_CHANGED_PROPERTY =
+    "AccessoryChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String ACCEPT_ALL_FILE_FILTER_USED_CHANGED_PROPERTY = "acceptAllFileFilter";
+  public static final String ACCEPT_ALL_FILE_FILTER_USED_CHANGED_PROPERTY =
+    "acceptAllFileFilterUsedChanged";
 
   /** DOCUMENT ME! */
-  public static final String DIALOG_TITLE_CHANGED_PROPERTY = "dialogTitle";
+  public static final String DIALOG_TITLE_CHANGED_PROPERTY =
+    "DialogTitleChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String DIALOG_TYPE_CHANGED_PROPERTY = "dialogType";
+  public static final String DIALOG_TYPE_CHANGED_PROPERTY =
+    "DialogTypeChangedProperty";
 
   /** DOCUMENT ME! */
-  public static final String CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY = "choosableFileFilter";
+  public static final String CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY =
+    "ChoosableFileFilterChangedProperty";
 
   /** DOCUMENT ME! */
   protected AccessibleContext accessibleContext;
@@ -222,6 +237,20 @@
   public JFileChooser(String currentDirectoryPath)
   {
     setup(null);
+    setCurrentDirectory(fsv.createFileObject(currentDirectoryPath));
+  }
+
+  /**
+   * Creates a new JFileChooser object with the specified directory and
+   * FileSystemView.
+   *
+   * @param currentDirectoryPath the directory that should initially be
+   *     shown the filechooser
+   * @param fsv the FileSystemView object to use
+   */
+  public JFileChooser(String currentDirectoryPath, FileSystemView fsv)
+  {
+    setup(fsv);
     setCurrentDirectory(fsv.createFileObject(currentDirectoryPath));
   }
 
Index: kaffe/libraries/javalib/javax/swing/JInternalFrame.java
diff -u kaffe/libraries/javalib/javax/swing/JInternalFrame.java:1.8 kaffe/libraries/javalib/javax/swing/JInternalFrame.java:1.9
--- kaffe/libraries/javalib/javax/swing/JInternalFrame.java:1.8	Wed Jan 26 13:40:05 2005
+++ kaffe/libraries/javalib/javax/swing/JInternalFrame.java	Thu May 26 11:10:40 2005
@@ -862,7 +862,10 @@
   {
     JDesktopPane pane = getDesktopPane();
     if (pane != null)
-      return pane.getLayer(this);
+      // The cast here forces the call to the instance method getLayer()
+      // instead of the static method (this would lead to infinite
+      // recursion).
+      return pane.getLayer((Component) this);
     return -1;
   }
 
Index: kaffe/libraries/javalib/javax/swing/JLayeredPane.java
diff -u kaffe/libraries/javalib/javax/swing/JLayeredPane.java:1.6 kaffe/libraries/javalib/javax/swing/JLayeredPane.java:1.7
--- kaffe/libraries/javalib/javax/swing/JLayeredPane.java:1.6	Thu Jan 27 14:02:39 2005
+++ kaffe/libraries/javalib/javax/swing/JLayeredPane.java	Thu May 26 11:10:40 2005
@@ -130,6 +130,48 @@
   }
 
   /**
+   * Looks up the layer of <code>comp</code> in the component's nearest
+   * JLayeredPane ancestor. If <code>comp</code> is not contained
+   * in a JLayeredPane, the value 0 (default layer) is returned.
+   *
+   * @param comp the component for which the layer is looked up
+   *
+   * @return the layer of <code>comp</code> in its nearest JLayeredPane
+   *     ancestor
+   */
+  public static int getLayer(JComponent comp)
+  {
+    JLayeredPane lp = (JLayeredPane) SwingUtilities.getAncestorOfClass
+      (JLayeredPane.class, comp);
+    if (lp == null)
+      return 0;
+    else
+      // The cast here forces the call to the instance method getLayer()
+      // instead of the static method (this would lead to infinite
+      // recursion).
+      return lp.getLayer((Component) comp);
+  }
+
+  /**
+   * Returns the first JLayeredPane that contains the Component
+   * <code>comp</code> or <code>null</code> if <code>comp</code> is
+   * not contained in a JLayeredPane.
+   *
+   * @param comp the component for which we are searching the JLayeredPane
+   *     ancestor
+   *
+   * @return the first JLayeredPane that contains the Component
+   *     <code>comp</code> or <code>null</code> if <code>comp</code> is
+   *     not contained in a JLayeredPane
+   */
+  public static JLayeredPane getLayeredPaneAbove(Component comp)
+  {
+    JLayeredPane lp = (JLayeredPane) SwingUtilities.getAncestorOfClass
+      (JLayeredPane.class, comp);
+    return lp;
+  }
+
+  /**
    * <p>Returns a pair of ints representing a half-open interval 
    * <code>[top, bottom)</code>, which is the range of component indices 
    * the provided layer number corresponds to.</p>
Index: kaffe/libraries/javalib/javax/swing/JMenuItem.java
diff -u kaffe/libraries/javalib/javax/swing/JMenuItem.java:1.8 kaffe/libraries/javalib/javax/swing/JMenuItem.java:1.9
--- kaffe/libraries/javalib/javax/swing/JMenuItem.java:1.8	Sat Jan 29 15:39:57 2005
+++ kaffe/libraries/javalib/javax/swing/JMenuItem.java	Thu May 26 11:10:40 2005
@@ -163,6 +163,7 @@
   protected void init(String text, Icon icon)
   {
     super.init(text, icon);
+    setModel(new DefaultButtonModel());
 
     // Initializes properties for this menu item, that are different
     // from Abstract button properties. 
Index: kaffe/libraries/javalib/javax/swing/JTextArea.java
diff -u kaffe/libraries/javalib/javax/swing/JTextArea.java:1.9 kaffe/libraries/javalib/javax/swing/JTextArea.java:1.10
--- kaffe/libraries/javalib/javax/swing/JTextArea.java:1.9	Sun May 15 12:06:48 2005
+++ kaffe/libraries/javalib/javax/swing/JTextArea.java	Thu May 26 11:10:40 2005
@@ -38,7 +38,9 @@
 
 package javax.swing;
 
+import java.awt.Dimension;
 import java.awt.FontMetrics;
+import java.awt.Rectangle;
 
 import javax.swing.text.BadLocationException;
 import javax.swing.text.Document;
@@ -227,6 +229,55 @@
   public boolean getScrollableTracksViewportWidth()
   {
     return lineWrap ? true : super.getScrollableTracksViewportWidth();
+  }
+
+  /**
+   * Returns the increment that is needed to expose exactly one new line
+   * of text. This is implemented here to return the values of
+   * {@link #getRowHeight} and {@link getColumnWidth}, depending on
+   * the value of the argument <code>direction</code>.
+   *
+   * @param visibleRect the view area that is visible in the viewport
+   * @param orientation either {@link SwingConstants.VERTICAL} or
+   *     {@link SwingConstants.HORIZONTAL}
+   * @param direction less than zero for up/left scrolling, greater
+   *     than zero for down/right scrolling
+   *
+   * @return the increment that is needed to expose exactly one new row
+   *     or column of text
+   *
+   * @throws IllegalArgumentException if <code>orientation</code> is invalid
+   */
+  public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation,
+                                        int direction)
+  {
+    if (orientation == SwingConstants.VERTICAL)
+      return getRowHeight();
+    else if (orientation == SwingConstants.HORIZONTAL)
+      return getColumnWidth();
+    else
+      throw new IllegalArgumentException("orientation must be either "
+                                     + "javax.swing.SwingConstants.VERTICAL "
+                                     + "or "
+                                     + "javax.swing.SwingConstants.HORIZONTAL"
+                                     );
+  }
+
+  /**
+   * Returns the preferred size of that text component in the case
+   * it is embedded within a JScrollPane. This uses the column and
+   * row settings if they are explicitly set, or fall back to
+   * the superclass's behaviour.
+   *
+   * @return the preferred size of that text component in the case
+   *     it is embedded within a JScrollPane
+   */
+  public Dimension getPreferredScrollableViewportSize()
+  {
+    if ((rows > 0) && (columns > 0))
+      return new Dimension(columns * getColumnWidth(), rows * getRowHeight());
+    else
+      return super.getPreferredScrollableViewportSize();
   }
 
   /**
Index: kaffe/libraries/javalib/javax/swing/JViewport.java
diff -u kaffe/libraries/javalib/javax/swing/JViewport.java:1.8 kaffe/libraries/javalib/javax/swing/JViewport.java:1.9
--- kaffe/libraries/javalib/javax/swing/JViewport.java:1.8	Mon Feb 14 21:20:19 2005
+++ kaffe/libraries/javalib/javax/swing/JViewport.java	Thu May 26 11:10:44 2005
@@ -42,8 +42,12 @@
 import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Insets;
+import java.awt.LayoutManager;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.io.Serializable;
 
 import javax.swing.border.Border;
 import javax.swing.event.ChangeEvent;
@@ -93,6 +97,59 @@
  */
 public class JViewport extends JComponent
 {
+
+  /**
+   * A {@link java.awt.event.ComponentListener} that listens for
+   * changes of the view's size. This class forbids changes of the view
+   * component's size that would exceed the viewport's size.
+   */
+  protected class ViewListener
+    extends ComponentAdapter
+    implements Serializable
+  {
+    /**
+     * Creates a new instance of ViewListener.
+     */
+    protected ViewListener()
+    {
+    }
+
+    /**
+     * Receives notification when a component (in this case: the view
+     * component) changes it's size.
+     *
+     * @param ev the ComponentEvent describing the change
+     */
+    public void componentResized(ComponentEvent ev)
+    {
+      // According to some tests that I did with Sun's implementation
+      // this class is supposed to make sure that the view component
+      // is not resized to a larger size than the viewport.
+      // This is not documented anywhere. What I did is: I subclassed JViewport
+      // and ViewListener and 'disabled' the componentResized method by
+      // overriding it and not calling super.componentResized().
+      // When this method is disabled I can set the size on the view component
+      // normally, when it is enabled, it gets immediatly resized back,
+      // after a resize attempt that would exceed the Viewport's size.
+      Component comp = ev.getComponent();
+      Dimension newSize = comp.getSize();
+      Dimension viewportSize = getSize();
+      boolean revert = false;
+      if (newSize.width > viewportSize.width)
+        {
+          newSize.width = viewportSize.width;
+          revert = true;
+        }
+      if (newSize.height > viewportSize.height)
+        {
+          newSize.height = viewportSize.height;
+          revert = true;
+        }
+      if (revert == true)
+        comp.setSize(newSize);
+    }
+  }
+
   private static final long serialVersionUID = -6925142919680527970L;
   
   public static final int SIMPLE_SCROLL_MODE = 0;
@@ -125,10 +182,16 @@
 
   Point lastPaintPosition;
 
+  /**
+   * The ViewListener instance.
+   */
+  ViewListener viewListener;
+
   public JViewport()
   {
     setOpaque(true);
     setScrollMode(BLIT_SCROLL_MODE);
+    setLayout(createLayoutManager());
     updateUI();
   }
 
@@ -267,9 +330,17 @@
   public void setView(Component v)
   {
     while (getComponentCount() > 0)
-      remove(0);
+      {
+        if (viewListener != null)
+          getView().removeComponentListener(viewListener);
+        remove(0);
+      }
+
     if (v != null)
       {
+        if (viewListener == null)
+          viewListener = createViewListener();
+        v.addComponentListener(viewListener);
         add(v);
         fireStateChanged();
       }
@@ -391,5 +462,27 @@
   {
     if (border != null)
       throw new IllegalArgumentException();
+  }
+
+  /**
+   * Creates a {@link ViewListener} that is supposed to listen for
+   * size changes on the view component.
+   *
+   * @return a ViewListener instance
+   */
+  protected ViewListener createViewListener()
+  {
+    return new ViewListener();
+  }
+
+  /**
+   * Creates the LayoutManager that is used for this viewport. Override
+   * this method if you want to use a custom LayoutManager.
+   *
+   * @return a LayoutManager to use for this viewport
+   */
+  protected LayoutManager createLayoutManager()
+  {
+    return new ViewportLayout();
   }
 }
Index: kaffe/libraries/javalib/javax/swing/SwingUtilities.java
diff -u kaffe/libraries/javalib/javax/swing/SwingUtilities.java:1.13 kaffe/libraries/javalib/javax/swing/SwingUtilities.java:1.14
--- kaffe/libraries/javalib/javax/swing/SwingUtilities.java:1.13	Sat May 21 15:13:39 2005
+++ kaffe/libraries/javalib/javax/swing/SwingUtilities.java	Thu May 26 11:10:44 2005
@@ -352,6 +352,25 @@
   }
 
   /**
+   * Returns the first ancestor of <code>comp</code> that is a {@link Window}
+   * or <code>null</code> if <code>comp</code> is not contained in a
+   * {@link Window}.
+   *
+   * This is equivalent to calling
+   * <code>getAncestorOfClass(Window, comp)</code> or
+   * <code>windowForComponent(comp)</code>.
+   *
+   * @param comp the component for which we are searching the ancestor Window
+   *
+   * @return the first ancestor Window of <code>comp</code> or
+   *     <code>null</code> if <code>comp</code> is not contained in a Window
+   */
+  public Window getWindowAncestor(Component comp)
+  {
+    return (Window) getAncestorOfClass(Window.class, comp);
+  }
+
+  /**
    * Equivalent to calling <code>getAncestorOfClass(Window, comp)</code>.
    *
    * @param comp The component to search for an ancestor window 
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.12 kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.13
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.12	Sat May 21 15:13:43 2005
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java	Thu May 26 11:10:44 2005
@@ -911,7 +911,7 @@
           },
       "TextPane.margin", new InsetsUIResource(3, 3, 3, 3),
       "TextPane.selectionBackground", new ColorUIResource(Color.black),
-      "TextPane.selectionForeground", new ColorUIResource(Color.white)/*,
+      "TextPane.selectionForeground", new ColorUIResource(Color.white),
       "TitledBorder.border", new BorderUIResource.EtchedBorderUIResource(),
       "TitledBorder.font", new FontUIResource("Dialog", Font.PLAIN, 12),
       "TitledBorder.titleColor", new ColorUIResource(darkShadow),
@@ -1028,7 +1028,7 @@
       "Tree.textForeground", new ColorUIResource(Color.black),
       "Viewport.background", new ColorUIResource(light),
       "Viewport.foreground", new ColorUIResource(Color.black),
-      "Viewport.font", new FontUIResource("Dialog", Font.PLAIN, 12)*/
+      "Viewport.font", new FontUIResource("Dialog", Font.PLAIN, 12)
     };
     defaults.putDefaults(uiDefaults);
   }
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSplitPaneUI.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSplitPaneUI.java:1.4 kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSplitPaneUI.java:1.5
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSplitPaneUI.java:1.4	Sun Oct 24 10:44:37 2004
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSplitPaneUI.java	Thu May 26 11:10:44 2005
@@ -1348,7 +1348,11 @@
    */
   public void paint(Graphics g, JComponent jc)
   {
-    // Do nothing. All the painting is handled by children.
+    // Make sure that the location is valid
+    int divLoc = splitPane.getDividerLocation();
+    int valLoc = validLocation(divLoc);
+    if (divLoc != valLoc)
+      splitPane.setDividerLocation(valLoc);
   }
 
   /**
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java:1.11 kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java:1.12
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java:1.11	Sun May 15 18:03:46 2005
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java	Thu May 26 11:10:44 2005
@@ -466,7 +466,20 @@
 
     return new Dimension((int) w, (int) h);
   }
-  
+
+  /**
+   * Returns the maximum size for text components that use this UI.
+   *
+   * This returns (Integer.MAX_VALUE, Integer.MAX_VALUE).
+   *
+   * @return the maximum size for text components that use this UI
+   */
+  public Dimension getMaximumSize(JComponent c)
+  {
+    // Sun's implementation returns Integer.MAX_VALUE here, so do we.
+    return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
+  }
+
   public final void paint(Graphics g, JComponent c)
   {
     paintSafely(g);
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicViewportUI.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicViewportUI.java:1.5 kaffe/libraries/javalib/javax/swing/plaf/basic/BasicViewportUI.java:1.6
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicViewportUI.java:1.5	Sun Nov 14 20:03:26 2004
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicViewportUI.java	Thu May 26 11:10:44 2005
@@ -103,7 +103,6 @@
   public void installUI(JComponent c) 
   {
     super.installUI(c);
-    c.setLayout(new ViewportLayout());
     installListeners(c);
   }
 
Index: kaffe/libraries/javalib/javax/swing/text/JTextComponent.java
diff -u kaffe/libraries/javalib/javax/swing/text/JTextComponent.java:1.17 kaffe/libraries/javalib/javax/swing/text/JTextComponent.java:1.18
--- kaffe/libraries/javalib/javax/swing/text/JTextComponent.java:1.17	Sat May 21 15:13:45 2005
+++ kaffe/libraries/javalib/javax/swing/text/JTextComponent.java	Thu May 26 11:10:45 2005
@@ -69,6 +69,7 @@
 import javax.swing.JViewport;
 import javax.swing.KeyStroke;
 import javax.swing.Scrollable;
+import javax.swing.SwingConstants;
 import javax.swing.Timer;
 import javax.swing.TransferHandler;
 import javax.swing.UIManager;
@@ -1130,19 +1131,39 @@
 
   public Dimension getPreferredScrollableViewportSize()
   {
-    return null;
+    return getPreferredSize();
   }
 
   public int getScrollableUnitIncrement(Rectangle visible, int orientation,
                                         int direction)
   {
-    return 0;
+    // We return 1/10 of the visible area as documented in Sun's API docs.
+    if (orientation == SwingConstants.HORIZONTAL)
+      return visible.width / 10;
+    else if (orientation == SwingConstants.VERTICAL)
+      return visible.height / 10;
+    else
+      throw new IllegalArgumentException("orientation must be either "
+                                      + "javax.swing.SwingConstants.VERTICAL "
+                                      + "or "
+                                      + "javax.swing.SwingConstants.HORIZONTAL"
+                                         );
   }
 
   public int getScrollableBlockIncrement(Rectangle visible, int orientation,
                                          int direction)
   {
-    return 0;
+    // We return the whole visible area as documented in Sun's API docs.
+    if (orientation == SwingConstants.HORIZONTAL)
+      return visible.width;
+    else if (orientation == SwingConstants.VERTICAL)
+      return visible.height;
+    else
+      throw new IllegalArgumentException("orientation must be either "
+                                      + "javax.swing.SwingConstants.VERTICAL "
+                                      + "or "
+                                      + "javax.swing.SwingConstants.HORIZONTAL"
+                                         );
   }
 
   /**
Index: kaffe/libraries/javalib/javax/swing/tree/TreePath.java
diff -u kaffe/libraries/javalib/javax/swing/tree/TreePath.java:1.1 kaffe/libraries/javalib/javax/swing/tree/TreePath.java:1.2
--- kaffe/libraries/javalib/javax/swing/tree/TreePath.java:1.1	Thu Jul 22 19:37:43 2004
+++ kaffe/libraries/javalib/javax/swing/tree/TreePath.java	Thu May 26 11:10:45 2005
@@ -51,250 +51,247 @@
 {
   static final long serialVersionUID = 4380036194768077479L;
 
-	//-------------------------------------------------------------
-	// Variables --------------------------------------------------
-	//-------------------------------------------------------------
-
-	/**
-	 * path
-	 */
-	private Object[]	path	= null;
-
-
-	//-------------------------------------------------------------
-	// Initialization ---------------------------------------------
-	//-------------------------------------------------------------
-
-	/**
-	 * Constructor TreePath
-	 * @param path TODO
-	 */
-	public TreePath(Object[] path) {
-
-		// Create Path
-		this.path = new Object[path.length];
-		System.arraycopy(path, 0, this.path, 0, path.length);
-
-	} // TreePath()
-
-	/**
-	 * Constructor TreePath
-	 * @param element TODO
-	 */
-	public TreePath(Object element) {
-
-		// Create Path
-		path = new Object[1];
-		path[0] = element;
-
-	} // TreePath()
-
-	/**
-	 * Constructor TreePath
-	 * @param path TODO
-	 * @param element TODO
-	 */
-	protected TreePath(TreePath path, Object element) {
-
-		// Variables
-		Object[]	treepath;
-
-		// Get Tree Path
-		treepath = path.getPath();
-
-		// Create Tree Path
-		this.path = new Object[treepath.length + 1];
-		System.arraycopy(treepath, 0, this.path, 0, treepath.length);
-		this.path[treepath.length] = element;
-
-	} // TreePath()
-
-	/**
-	 * Constructor TreePath
-	 * @param path TODO
-	 * @param length TODO
-	 */
-	protected TreePath(Object[] path, int length) {
-
-		// Create Path
-		this.path = new Object[length];
-		System.arraycopy(path, 0, this.path, 0, length);
-
-	} // TreePath()
-
-	/**
-	 * Constructor TreePath
-	 */
-	protected TreePath() {
-		path = new Object[0];
-	} // TreePath()
-
-
-	//-------------------------------------------------------------
-	// Methods ----------------------------------------------------
-	//-------------------------------------------------------------
-
-	/**
-	 * hashCode
-	 * @returns int
-	 */
-	public int hashCode() {
-		return getLastPathComponent().hashCode();
-	} // hashCode()
-
-	/**
-	 * equals
-	 * @param object TODO
-	 * @returns boolean
-	 */
-	public boolean equals(Object object) {
-
-		// Variables
-		Object[]	treepath;
-		int			index;
-
-		// Check for TreePath
-		if (object instanceof TreePath) {
-
-			// Get Path Elements
-			treepath = ((TreePath) object).getPath();
-
-			// Check length
-			if (treepath.length != path.length) {
-				return false;
-			} // if
-
-			// Check Elements
-			for (index = 0; index < path.length; index++) {
-				if (treepath[index] != path[index]) {
-					return false;
-				} // if
-			} // for
-
-			// Tree Path's are equals
-			return true;
-
-		} // if
-
-		// Unequal
-		return false;
-
-	} // equals()
-
-	/**
-	 * toString
-	 * @returns String
-	 */
-	public String toString() {
-		return null; // TODO
-	} // toString()
-
-	/**
-	 * writeObject
-	 * @param value0 TODO
-	 * @exception IOException TODO
-	 */
-	private void writeObject(ObjectOutputStream value0) throws IOException {
-		// TODO
-	} // writeObject()
-
-	/**
-	 * readObject
-	 * @param value0 TODO
-	 * @exception IOException TODO
-	 * @exception ClassNotFoundException TODO
-	 */
-	private void readObject(ObjectInputStream value0) throws IOException, ClassNotFoundException {
-		// TODO
-	} // readObject()
-
-	/**
-	 * getPath
-	 * @returns Object[]
-	 */
-	public Object[] getPath() {
-		return path;
-	} // getPath()
-
-	/**
-	 * getLastPathComponent
-	 * @returns Object
-	 */
-	public Object getLastPathComponent() {
-		return path[path.length - 1];
-	} // getLastPathComponent()
-
-	/**
-	 * getPathCount
-	 * @returns int
-	 */
-	public int getPathCount() {
-		return path.length;
-	} // getPathCount()

*** Patch too long, truncated ***




More information about the kaffe mailing list