PatchSet 6712 
Date: 2005/07/07 02:18:56
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
Resynced with gnu classpath: swing, awt and xslt fixes

Members: 
        ChangeLog:1.4236->1.4237 
        libraries/javalib/gnu/xml/transform/StreamSerializer.java:1.7->1.8 
        libraries/javalib/gnu/xml/xpath/EqualityExpr.java:1.5->1.6 
        libraries/javalib/javax/swing/AbstractButton.java:1.17->1.18 
        libraries/javalib/javax/swing/JTree.java:1.20->1.21 
        libraries/javalib/javax/swing/plaf/basic/BasicBorders.java:1.3->1.4 
        libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.6->1.7 
        
libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.6->1.7 
        
libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.12->1.13 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4236 kaffe/ChangeLog:1.4237
--- kaffe/ChangeLog:1.4236      Thu Jul  7 00:40:11 2005
+++ kaffe/ChangeLog     Thu Jul  7 02:18:56 2005
@@ -1,5 +1,63 @@
 2005-07-07  Dalibor Topic  <[EMAIL PROTECTED]>
 
+       Resynced with GNU classpath.
+
+       2005-07-06  David Gilbert  <[EMAIL PROTECTED]>
+
+        * javax/swing/plaf/basic/BasicBorders.java: fixed API docs all over.
+
+       2005-07-06  Chris Burdess  <[EMAIL PROTECTED]>
+
+        * gnu/xml/transform/StreamSerializer.java,
+        gnu/xml/xpath/EqualityExpr.java: XSLT conformance fixes.
+
+       2005-07-06  Lillian Angel  <[EMAIL PROTECTED]>
+
+        * javax/swing/plaf/basic/BasicTreeUI.java
+        (getPathForRow): took out redundant code.
+
+       2005-07-06  Lillian Angel  <[EMAIL PROTECTED]>
+
+        * javax/swing/plaf/basic/BasicTreeUI.java
+        (getNextVisibleNode): Implemented
+        (getPathForRow): Fixed so the next node retrieved is visible.
+
+       2005-07-06  Lillian Angel  <[EMAIL PROTECTED]>
+
+        * javax/swing/JTree.java
+        Initialized the Hashtable.
+        (addSelectionPath): removed redundant code.
+        (doExpandParents): added in line so that state is
+        changed for current path. Changed while loop to if
+        statement, an infinite loop was occurring.
+        * javax/swing/plaf/basic/BasicTreeUI.java
+        (getPathForRow): Implemented to work with visibility.
+        (isLeaf): Implemented
+        (mouseClicked): add in check for expand/collapse.
+        Selection for DISCONTIGUOUS tree selection is
+        implemented.
+        (treeExpanded): called repaint, so the tree updates
+        visually when something is expanded.
+        (treeCollapse): Similar to treeExpanded.
+        (paintLeaf): changed to paint leaf only when visible.
+        (paintNonLeaf): paints only when visible.
+        (paintRecursive): lines for tree are only painted when
+        needed. checked for visibility of current object and
+        parent.
+        * javax/swing/tree/DefaultTreeCellRenderer.java
+        (getTreeCellRendererComponent): setting icons when
+        expanded.
+        * javax/swing/tree/DefaultTreeSelectionModel.java
+        (clearSelection): set leadPath to null because selection
+        should be completely reset.
+
+       2005-07-06  Roman Kennke  <[EMAIL PROTECTED]>
+
+        * javax/swing/AbstractButton.java
+        (setContentAreaFilled): Set the opaque property here.
+
+2005-07-07  Dalibor Topic  <[EMAIL PROTECTED]>
+
        * FAQ/FAQ.classlibrary-compile: Updated URL for jikes.
 
        Reported by:  Ito Kazumitsu  <[EMAIL PROTECTED]>
Index: kaffe/libraries/javalib/gnu/xml/transform/StreamSerializer.java
diff -u kaffe/libraries/javalib/gnu/xml/transform/StreamSerializer.java:1.7 
kaffe/libraries/javalib/gnu/xml/transform/StreamSerializer.java:1.8
--- kaffe/libraries/javalib/gnu/xml/transform/StreamSerializer.java:1.7 Mon Jul 
 4 00:05:57 2005
+++ kaffe/libraries/javalib/gnu/xml/transform/StreamSerializer.java     Thu Jul 
 7 02:19:01 2005
@@ -627,15 +627,30 @@
         text = buf.toString();
       }
     ByteBuffer encoded = encoder.encode(CharBuffer.wrap(text));
+    int len = encoded.limit() - encoded.position();
     if (encoded.hasArray())
       {
-        return encoded.array();
+        byte[] ret = encoded.array();
+        if (ret.length > len)
+          {
+            // Why?
+            byte[] ret2 = new byte[len];
+            System.arraycopy(ret, 0, ret2, 0, len);
+            ret = ret2;
+          }
+        return ret;
       }
     encoded.flip();
-    int len = encoded.limit() - encoded.position();
     byte[] ret = new byte[len];
     encoded.get(ret, 0, len);
     return ret;
+  }
+
+  String hex(byte[] b) {
+    StringBuffer buf = new StringBuffer();
+    for (int i = 0; i < b.length; i++)
+      buf.append(Integer.toHexString(b[i])).append(' ');
+    return buf.toString();
   }
 
   String encode(String text, boolean encodeCtl, boolean inAttr)
Index: kaffe/libraries/javalib/gnu/xml/xpath/EqualityExpr.java
diff -u kaffe/libraries/javalib/gnu/xml/xpath/EqualityExpr.java:1.5 
kaffe/libraries/javalib/gnu/xml/xpath/EqualityExpr.java:1.6
--- kaffe/libraries/javalib/gnu/xml/xpath/EqualityExpr.java:1.5 Mon Jul  4 
00:05:59 2005
+++ kaffe/libraries/javalib/gnu/xml/xpath/EqualityExpr.java     Thu Jul  7 
02:19:01 2005
@@ -91,6 +91,10 @@
       {
         Collection lns = (Collection) left;
         Collection rns = (Collection) right;
+        if (lns.isEmpty())
+          {
+            return false;
+          }
         boolean all = true;
         for (Iterator i = lns.iterator(); i.hasNext(); )
           {
@@ -119,7 +123,7 @@
                   }
               }
           }
-        return false;
+        return all;
       }
     /* 
      * If one object to be compared is a node-set and the other is a number,
Index: kaffe/libraries/javalib/javax/swing/AbstractButton.java
diff -u kaffe/libraries/javalib/javax/swing/AbstractButton.java:1.17 
kaffe/libraries/javalib/javax/swing/AbstractButton.java:1.18
--- kaffe/libraries/javalib/javax/swing/AbstractButton.java:1.17        Mon Jul 
 4 00:08:07 2005
+++ kaffe/libraries/javalib/javax/swing/AbstractButton.java     Thu Jul  7 
02:19:02 2005
@@ -1881,8 +1881,9 @@
     boolean old = contentAreaFilled;
     contentAreaFilled = b;
     firePropertyChange(CONTENT_AREA_FILLED_CHANGED_PROPERTY, old, b);
-    revalidate();
-    repaint();
+    // The JDK sets the opaque property to the value of the contentAreaFilled
+    // property, so should we do.
+    setOpaque(b);
    }
 
   /**
Index: kaffe/libraries/javalib/javax/swing/JTree.java
diff -u kaffe/libraries/javalib/javax/swing/JTree.java:1.20 
kaffe/libraries/javalib/javax/swing/JTree.java:1.21
--- kaffe/libraries/javalib/javax/swing/JTree.java:1.20 Wed Jul  6 02:01:15 2005
+++ kaffe/libraries/javalib/javax/swing/JTree.java      Thu Jul  7 02:19:02 2005
@@ -273,7 +273,7 @@
         * TreePath of a note to to its state. Valid states are EXPANDED and
         * COLLAPSED. Nodes not in this Hashtable are assumed state COLLAPSED.
         */
-       private Hashtable nodeStates;
+       private Hashtable nodeStates = new Hashtable();
        protected transient TreeCellEditor cellEditor;
        protected transient TreeCellRenderer cellRenderer;
        protected boolean editable;
@@ -1079,13 +1079,6 @@
 
                if (path != null)
                        selectionModel.addSelectionPath(path);
-               else
-               {
-                       selectionModel.clearSelection();
-                       // need to repaint because cant fire an event with 
-                       // null selection.
-                       repaint();
-               }
        }
 
        public void addSelectionRows(int[] rows)
@@ -1299,7 +1292,7 @@
                // Don't expand if last path component is a leaf node.
                if ((path == null) || 
(treeModel.isLeaf(path.getLastPathComponent())))
                        return;
-
+               
                setExpandedState(path, true);
        }
 
@@ -1519,9 +1512,12 @@
        private void doExpandParents(TreePath path, boolean state)
        {
                TreePath parent = path.getParentPath();
-
+               
                if (isExpanded(parent))
+               {
+                       nodeStates.put(path, state ? EXPANDED : COLLAPSED);
                        return;
+               }
 
                if (parent != null)
                        doExpandParents(parent, false);
@@ -1538,9 +1534,10 @@
 
                try
                {
-                       while (parent != null)
+                       if (parent != null)
                                checkExpandParents(parent);
-               } catch (ExpandVetoException e)
+               } 
+               catch (ExpandVetoException e)
                {
                        // Expansion vetoed.
                        return;
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicBorders.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicBorders.java:1.3 
kaffe/libraries/javalib/javax/swing/plaf/basic/BasicBorders.java:1.4
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicBorders.java:1.3        
Mon Jul  4 00:08:33 2005
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicBorders.java    Thu Jul 
 7 02:19:02 2005
@@ -1,5 +1,5 @@
 /* BasicBorders.java --
-   Copyright (C) 2003, 2004  Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -89,9 +89,9 @@
    * height="170" alt="[A screen shot of the returned border]" />
    *
    * @return a [EMAIL PROTECTED]
-   *         javax.swing.plaf.BorderUIResource#CompoundBorderUIResource}
-   *         whose outer border is a [EMAIL PROTECTED] #ButtonBorder} and whose
-   *         inner border is a [EMAIL PROTECTED] #MarginBorder}.
+   *         javax.swing.plaf.BorderUIResource.CompoundBorderUIResource}
+   *         whose outer border is a [EMAIL PROTECTED] ButtonBorder} and whose
+   *         inner border is a [EMAIL PROTECTED] MarginBorder}.
    */
   public static Border getButtonBorder()
   {
@@ -139,9 +139,9 @@
    * height="135" alt="[A screen shot of the returned border]" />
    *
    * @return a [EMAIL PROTECTED]
-   *         javax.swing.plaf.BorderUIResource#CompoundBorderUIResource}
-   *         whose outer border is a [EMAIL PROTECTED] #RadioButtonBorder} and 
whose
-   *         inner border is a [EMAIL PROTECTED] #MarginBorder}.
+   *         javax.swing.plaf.BorderUIResource.CompoundBorderUIResource}
+   *         whose outer border is a [EMAIL PROTECTED] RadioButtonBorder} and 
whose
+   *         inner border is a [EMAIL PROTECTED] MarginBorder}.
    */
   public static Border getRadioButtonBorder()
   {
@@ -191,9 +191,9 @@
    * height="135" alt="[A screen shot of the returned border]" />
    *
    * @return a [EMAIL PROTECTED]
-   *         javax.swing.plaf.BorderUIResource#CompoundBorderUIResource}
-   *         whose outer border is a [EMAIL PROTECTED] #ToggleButtonBorder} 
and whose
-   *         inner border is a [EMAIL PROTECTED] #MarginBorder}.
+   *         javax.swing.plaf.BorderUIResource.CompoundBorderUIResource}
+   *         whose outer border is a [EMAIL PROTECTED] ToggleButtonBorder} and 
whose
+   *         inner border is a [EMAIL PROTECTED] MarginBorder}.
    */
   public static Border getToggleButtonBorder()
   {
@@ -241,7 +241,7 @@
    * <p><img src="doc-files/BasicBorders.MenuBarBorder-1.png" width="500"
    * height="140" alt="[A screen shot of a JMenuBar with this border]" />
    *
-   * @return a [EMAIL PROTECTED] #MenuBarBorder}.
+   * @return a [EMAIL PROTECTED] MenuBarBorder}.
    *
    * @see javax.swing.JMenuBar
    */
@@ -272,7 +272,7 @@
    * <p><img src="doc-files/BasicBorders.SplitPaneBorder-2.png" width="520"
    * height="200" alt="[A screen shot for JSplitPane.VERTICAL_SPLIT]" />
    *
-   * @return a [EMAIL PROTECTED] #SplitPaneBorder}.
+   * @return a [EMAIL PROTECTED] SplitPaneBorder}.
    *
    * @see javax.swing.JSplitPane
    * @see #getSplitPaneDividerBorder()
@@ -339,8 +339,7 @@
    * height="200" alt="[A screen shot of a border returned by
    * this method]" />
    *
-   * @return an instance of
-   * [EMAIL PROTECTED] javax.swing.plaf.basic.BasicBorders$FieldBorder}.
+   * @return an instance of [EMAIL PROTECTED] FieldBorder}.
    *
    * @see javax.swing.JTextField
    * @see javax.swing.text.JTextComponent
@@ -592,7 +591,7 @@
      *
      * @return the same object that was passed for <code>insets</code>.
      *
-     * @see #getBorderInsets()
+     * @see #getBorderInsets(Component)
      */
     public Insets getBorderInsets(Component c, Insets insets)
     {
@@ -756,7 +755,7 @@
      *
      * @return the same object that was passed for <code>insets</code>.
      *
-     * @see #getBorderInsets()
+     * @see #getBorderInsets(Component)
      */
     public Insets getBorderInsets(Component c, Insets insets)
     {
@@ -1020,7 +1019,7 @@
      *
      * @return the same object that was passed for <code>insets</code>.
      *
-     * @see #getBorderInsets()
+     * @see #getBorderInsets(Component)
      */
     public Insets getBorderInsets(Component c, Insets insets)
     {
@@ -1176,7 +1175,7 @@
      *
      * @return the same object that was passed for <code>insets</code>.
      *
-     * @see #getBorderInsets()
+     * @see #getBorderInsets(Component)
      */
     public Insets getBorderInsets(Component c, Insets insets)
     {
@@ -1230,7 +1229,7 @@
      * Paints the border around a rollover button.  If <code>c</code>
      * is not an [EMAIL PROTECTED] javax.swing.AbstractButton} whose model
      * returns <code>true</code> for [EMAIL PROTECTED]
-     * javax.swing.ButtonModel#isRollver}, nothing gets painted at
+     * javax.swing.ButtonModel#isRollover}, nothing gets painted at
      * all.
      *
      * @param c the button whose border is to be painted.
@@ -1309,8 +1308,8 @@
    * appearance of the Sun reference implementation. A bug report has
    * been filed with Sun (review ID 188774).
    *
-   * @see [EMAIL PROTECTED] #getSplitPaneBorder()}
-   * @see [EMAIL PROTECTED] #getSplitPaneDividerBorder()}
+   * @see #getSplitPaneBorder()
+   * @see #getSplitPaneDividerBorder()
    *
    * @author Sascha Brawer ([EMAIL PROTECTED])
    */
@@ -1797,7 +1796,7 @@
      *
      * @return the same object that was passed for <code>insets</code>.
      *
-     * @see #getBorderInsets()
+     * @see #getBorderInsets(Component)
      */
     public Insets getBorderInsets(Component c, Insets insets)
     {
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.6 
kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.7
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.6 Wed Jul 
 6 02:01:15 2005
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java     Thu Jul 
 7 02:19:02 2005
@@ -597,19 +597,53 @@
         */
        public TreePath getPathForRow(JTree tree, int row)
        {
-               // FIXME: check visibility when expand/collapse is implemented
-               DefaultMutableTreeNode pathForRow = ((DefaultMutableTreeNode) 
(tree
+               DefaultMutableTreeNode node = ((DefaultMutableTreeNode) (tree
                                .getModel()).getRoot());
+               
                for (int i = 0; i < row; i++)
-               {
-                       if (pathForRow != null)
-                               pathForRow = pathForRow.getNextNode();
-               }
-               if (pathForRow == null)
+                       node = getNextVisibleNode(node);
+               
+               // in case nothing was found
+               if (node == null)
                        return null;
-               return new TreePath(pathForRow.getPath());
+               
+               // something was found
+               return new TreePath(node.getPath());
+                       
        }
 
+       /** 
+        * Get next visible node in the tree.
+        * 
+        * @param the current node
+        * @return the next visible node in the JTree. Return null if there
+        * are no more.
+        */
+       private DefaultMutableTreeNode 
getNextVisibleNode(DefaultMutableTreeNode node)
+       {
+               DefaultMutableTreeNode next = null;
+               TreePath current = null;
+               
+               if (node != null)
+                       next = node.getNextNode();
+               
+               if (next != null)
+               {
+                       current = new TreePath(next.getPath());
+                       if (tree.isVisible(current))
+                               return next;
+       
+                       while (next != null && !tree.isVisible(current))
+                       {
+                               next = next.getNextNode();
+                               
+                               if (next != null)
+                                       current = new TreePath(next.getPath());
+                       }
+               }
+               return next;
+       }
+       
        /**
         * Returns the row that the last item identified in path is visible at. 
Will
         * return -1 if any of the elments in the path are not currently 
visible.
@@ -636,6 +670,7 @@
         */
        public int getRowCount(JTree tree)
        {
+               // FIXME: check visibility
                return treeState.getRowCount();
        }
 
@@ -1446,8 +1481,16 @@
         */
        protected boolean isLeaf(int row)
        {
-               return false;
-               // FIXME: not implemented
+               TreePath pathForRow = getPathForRow(tree, row);
+               if (pathForRow == null)
+                       return true;
+               
+               Object node = pathForRow.getLastPathComponent();
+               
+               if (node instanceof TreeNode)
+                       return ((TreeNode) node).isLeaf();
+               else
+                       return true;
        }
 
        /* * INTERNAL CLASSES * */
@@ -1726,30 +1769,50 @@
                {
                        Point click = e.getPoint();
                        int row = ((int) click.getY() / getRowHeight()) - 1;
-                       
-                       if (BasicTreeUI.this.tree.isRowSelected(row))
-                               BasicTreeUI.this.tree.removeSelectionRow(row);
-                       else if (BasicTreeUI.this.tree.getSelectionModel()
-                                       .getSelectionMode() == 
-                                               
treeSelectionModel.SINGLE_TREE_SELECTION)
+                       TreePath path = 
BasicTreeUI.this.tree.getPathForRow(row);
+
+                       if (path == null)
                        {
-                               // clear selection, since only able to select 
one row at a time.
+                               // nothing should be selected if user clicks 
outside of tree
                                
BasicTreeUI.this.tree.getSelectionModel().clearSelection();
-                               BasicTreeUI.this.tree.addSelectionRow(row);
-                       }
-                       else if (BasicTreeUI.this.tree.getSelectionModel()
-                                       .getSelectionMode() == 
-                                               
treeSelectionModel.CONTIGUOUS_TREE_SELECTION)
-                       {
-                               //TODO
+                               BasicTreeUI.this.tree.repaint();
                        }
-                       else
+                       
+                       if (BasicTreeUI.this.tree.isVisible(path))
                        {
-                               BasicTreeUI.this.tree.getSelectionModel()
-                               .setSelectionMode(
-                                               
treeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
-                               BasicTreeUI.this.tree.addSelectionRow(row);
-                       }
+                               if (BasicTreeUI.this.tree.isExpanded(path))
+                               {
+                                       
BasicTreeUI.this.tree.collapsePath(path);
+                                       
BasicTreeUI.this.tree.fireTreeCollapsed(path);
+                               }
+                               else
+                               {
+                                       BasicTreeUI.this.tree.expandPath(path);
+                                       
BasicTreeUI.this.tree.fireTreeExpanded(path);
+                               }
+                               
+                               if (BasicTreeUI.this.tree.isRowSelected(row))
+                                       
BasicTreeUI.this.tree.removeSelectionRow(row);
+                               else if 
(BasicTreeUI.this.tree.getSelectionModel()
+                                               .getSelectionMode() == 
treeSelectionModel
+                                               .SINGLE_TREE_SELECTION)
+                               {
+                                       
BasicTreeUI.this.tree.getSelectionModel().clearSelection();
+                                       
BasicTreeUI.this.tree.addSelectionRow(row);
+                               } 
+                               else if 
(BasicTreeUI.this.tree.getSelectionModel()
+                                               .getSelectionMode() == 
treeSelectionModel
+                                               .CONTIGUOUS_TREE_SELECTION)
+                               {
+                                       // TODO
+                               } 
+                               else
+                               {
+                                       
BasicTreeUI.this.tree.getSelectionModel().setSelectionMode(
+                                                       
treeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
+                                       
BasicTreeUI.this.tree.addSelectionRow(row);
+                               }
+                       }               
                }
 
                /**
@@ -1969,6 +2032,7 @@
                 */
                public void treeExpanded(TreeExpansionEvent event)
                {
+                       BasicTreeUI.this.tree.repaint();
                }
 
                /**
@@ -1978,6 +2042,7 @@
                 */
                public void treeCollapsed(TreeExpansionEvent event)
                {
+                       BasicTreeUI.this.tree.repaint();
                }
        }// TreeExpansionHandler
 
@@ -2274,7 +2339,7 @@
        } // TreeTraverseAction
 
        /* * HELPER METHODS FOR PAINTING * */
-
+       
        /**
         * Returns the cell bounds for painting selected cells
         * 
@@ -2293,7 +2358,7 @@
                return new Rectangle(x, y, 
SwingUtilities.computeStringWidth(fm, s), fm
                                .getHeight());
        }
-
+       
        /**
         * Paints a leaf in the tree
         * 
@@ -2305,25 +2370,29 @@
         */
        private void paintLeaf(Graphics g, int x, int y, JTree tree, Object 
leaf)
        {
-               TreePath tp = new TreePath(((DefaultMutableTreeNode) 
leaf).getPath());
-               boolean selected = tree.isPathSelected(tp);
+               TreePath curr = new TreePath(((DefaultMutableTreeNode) leaf)
+                               .getPath());
+               boolean selected = tree.isPathSelected(curr);
 
-               if (selected)
-               {
-                       Component comp = tree.getCellRenderer()
-                                       .getTreeCellRendererComponent(tree, 
leaf, true, false,
-                                                       true, 0, false);
-                       rendererPane.paintComponent(g, comp, tree, 
getCellBounds(x, y, leaf));
-               }
-               else
-               {
-                       Component c = 
tree.getCellRenderer().getTreeCellRendererComponent(tree,
-                                       leaf, false, false, true, 0, false);
-                       
-                       g.translate(x, y);
-                       c.paint(g);
-                       g.translate(-x, -y);
-               }
+               if (tree.isVisible(curr))
+                       if (selected)
+                       {
+                               Component comp = tree.getCellRenderer()
+                                               
.getTreeCellRendererComponent(tree, leaf, true, false,
+                                                               true, 0, false);
+                               rendererPane.paintComponent(g, comp, tree, 
+                                               getCellBounds(x, y, leaf));
+                       }
+                       else
+                       {
+                               Component c = tree.getCellRenderer()
+                               .getTreeCellRendererComponent(tree,
+                                               leaf, false, false, true, 0, 
false);
+                               
+                               g.translate(x, y);
+                               c.paint(g);
+                               g.translate(-x, -y);
+                       }
        }
 
        /**
@@ -2337,26 +2406,31 @@
         */
        private void paintNonLeaf(Graphics g, int x, int y, JTree tree,
                        Object nonLeaf)
-       {
-               TreePath tp = new TreePath(((DefaultMutableTreeNode) 
nonLeaf).getPath());
-               boolean selected = tree.isPathSelected(tp);
-
-               if (selected)
-               {
-                       Component comp = tree.getCellRenderer()
-                                       .getTreeCellRendererComponent(tree, 
nonLeaf, true, false,
-                                                       true, 0, false);
-                       rendererPane.paintComponent(g, comp, tree, 
getCellBounds(x, y, nonLeaf));
-               }
-               else
-               {
-                       Component c = 
tree.getCellRenderer().getTreeCellRendererComponent(tree,
-                                       nonLeaf, false, false, false, 0, false);
-                       
-                       g.translate(x, y);
-                       c.paint(g);
-                       g.translate(-x, -y);
-               }
+       {       
+               TreePath curr = new TreePath(((DefaultMutableTreeNode) nonLeaf)
+                                                               .getPath());
+               boolean selected = tree.isPathSelected(curr);
+               boolean expanded = tree.isExpanded(curr);
+               
+               if (tree.isVisible(curr))
+                       if (selected)
+                       {
+                               Component comp = tree.getCellRenderer()
+                                               
.getTreeCellRendererComponent(tree, nonLeaf, true, 
+                                                               expanded, 
false, 0, false);
+                               rendererPane.paintComponent(g, comp, tree, 
+                                               getCellBounds(x, y, nonLeaf));
+                       }
+                       else
+                       {
+                               Component c = tree.getCellRenderer()
+                                               
.getTreeCellRendererComponent(tree,
+                                                               nonLeaf, false, 
expanded, false, 0, false);
+                               
+                               g.translate(x, y);
+                               c.paint(g);
+                               g.translate(-x, -y);
+                       }
        }
 
        /**
@@ -2389,7 +2463,8 @@
                {
                        paintLeaf(g, indentation, descent, tree, curr);
                        descent += getRowHeight();
-               } else
+               } 
+               else
                {
                        if (depth > 0 || tree.isRootVisible())
                        {
@@ -2398,25 +2473,30 @@
                                y0 += halfHeight;
                        }
                        int max = mod.getChildCount(curr);
-                       for (int i = 0; i < max; ++i)
-                       {
-                               g.setColor(getHashColor());
-                               g.drawLine(indentation + halfWidth, descent + 
halfHeight,
-                                               indentation + rightChildIndent, 
descent + halfHeight);
-                               descent = paintRecursive(g, indentation + 
rightChildIndent,
-                                               descent, i, depth + 1, tree, 
mod, mod.getChild(curr, i));
-                       }
+                       if (tree.isExpanded(new 
TreePath(((DefaultMutableTreeNode) curr)
+                                                                               
                                .getPath())))
+                               for (int i = 0; i < max; ++i)
+                               {
+                                       g.setColor(getHashColor());
+                                       g.drawLine(indentation + halfWidth, 
descent + halfHeight,
+                                                       indentation + 
rightChildIndent, 
+                                                       descent + halfHeight);
+                                       descent = paintRecursive(g, indentation 
+ rightChildIndent,
+                                                       descent, i, depth + 1, 
tree, mod, 
+                                                       mod.getChild(curr, i));
+                               }
                }
 
                int y1 = descent - halfHeight;
-               if (y0 != y1)
-               {
-                       g.setColor(getHashColor());
-                       g
-                                       .drawLine(indentation + halfWidth, y0, 
indentation
-                                                       + halfWidth, y1);
-               }
-
+               
+               if (tree.isExpanded(new TreePath(((DefaultMutableTreeNode) curr)
+                                                                               
                                                .getPath())))
+                       if (y0 != y1)
+                       {
+                               g.setColor(getHashColor());
+                               g.drawLine(indentation + halfWidth, y0, 
indentation
+                                                               + halfWidth, 
y1);
+                       }
                return descent;
        }
 
Index: kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java
diff -u 
kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.6 
kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.7
--- kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.6   
Wed Jul  6 02:01:16 2005
+++ kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java       
Thu Jul  7 02:19:02 2005
@@ -380,13 +380,6 @@
                this.selected = selected;
                this.hasFocus = hasFocus;
 
-               if (leaf)
-                       setLeafIcon(getLeafIcon());
-               else if (expanded)
-                       setOpenIcon(getOpenIcon());
-               else
-                       setClosedIcon(getClosedIcon());
-
                setText(val.toString());
                setHorizontalAlignment(LEFT);
                setOpaque(true);
@@ -394,17 +387,23 @@
                setEnabled(true);
                setFont(getFont());
 
+               if (leaf)
+                       setIcon(getLeafIcon());
+               else if (expanded)
+                       setIcon(getOpenIcon());
+               else
+                       setIcon(getClosedIcon());
+
                if (selected) 
                {
                        super.setBackground(getBackgroundSelectionColor());
-                       super.setForeground(getTextSelectionColor());
+                       setForeground(getTextSelectionColor());
                }
                else
                {
                        super.setBackground((tree.getParent()).getBackground());
-                       super.setForeground(getTextNonSelectionColor());
-               }
-               
+                       setForeground(getTextNonSelectionColor());
+               }               
                
                return this;
        }
Index: kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java
diff -u 
kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.12 
kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.13
--- 
kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.12    
    Wed Jul  6 02:01:16 2005
+++ kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java     
Thu Jul  7 02:19:02 2005
@@ -466,6 +466,7 @@
         */
        public void clearSelection()
        {
+               leadPath = null;
                selection = null;
        }
 

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to