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

Kaffe CVS cvs-commits at kaffe.org
Tue Jul 5 19:19:27 PDT 2005


PatchSet 6700 
Date: 2005/07/06 02:01:11
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
Resynced with GNU Classpath: swing fixes

Members: 
	ChangeLog:1.4224->1.4225 
	libraries/javalib/javax/swing/JTree.java:1.19->1.20 
	libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.5->1.6 
	libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.5->1.6 
	libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.11->1.12 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.4224 kaffe/ChangeLog:1.4225
--- kaffe/ChangeLog:1.4224	Tue Jul  5 17:35:06 2005
+++ kaffe/ChangeLog	Wed Jul  6 02:01:11 2005
@@ -1,3 +1,26 @@
+2005-07-06  Dalibor Topic  <robilad at kaffe.org>
+
+	Resynced with GNU Classpath.
+
+	2005-07-04  Lillian Angel  <langel at redhat.com>
+
+        * javax/swing/JTree.java
+        (addSelectionPath): if mouse click somewhere other than
+        a row, all selections are removed
+        * javax/swing/plaf/basic/BasicTreeUI.java
+        (mouseClicked): if mouse clicked on a row, all other
+        selections are cleared. DISCONTIGUOUS mode implemented.
+        (getCellBounds): Implemented
+        (paintLeaf): paints with cell bounds
+        (paintNonLeaf): paints with cell bounds
+        * javax/swing/tree/DefaultTreeCellRenderer.java:
+        (DefaultTreeCellRendererComponent): changed color of
+        selected row
+        (getFont): Implemented
+        * javax/swing/tree/DefaultTreeSelectionModel.java:
+        (addSelectionPaths): check if parameter is null
+        (removeSelectionPaths): check if parameter is null
+
 2005-07-05  Guilhem Lavaux  <guilhem at kaffe.org>
 
 	* kaffe/kaffevm/jni/jni_i.h
Index: kaffe/libraries/javalib/javax/swing/JTree.java
diff -u kaffe/libraries/javalib/javax/swing/JTree.java:1.19 kaffe/libraries/javalib/javax/swing/JTree.java:1.20
--- kaffe/libraries/javalib/javax/swing/JTree.java:1.19	Mon Jul  4 00:08:17 2005
+++ kaffe/libraries/javalib/javax/swing/JTree.java	Wed Jul  6 02:01:15 2005
@@ -1079,6 +1079,13 @@
 
 		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)
Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java
diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.5 kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.6
--- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java:1.5	Sun Jul  3 16:28:49 2005
+++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicTreeUI.java	Wed Jul  6 02:01:15 2005
@@ -37,6 +37,8 @@
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
 import java.awt.Graphics;
 import java.awt.Point;
 import java.awt.Rectangle;
@@ -85,6 +87,7 @@
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeCellEditor;
 import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.SwingUtilities;
 import javax.swing.tree.TreeCellEditor;
 import javax.swing.tree.TreeCellRenderer;
 import javax.swing.tree.TreeSelectionModel;
@@ -1723,14 +1726,30 @@
 		{
 			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)
+					.getSelectionMode() == 
+						treeSelectionModel.SINGLE_TREE_SELECTION)
+			{
+				// clear selection, since only able to select one row at a time.
+				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);
-			// FIXME: add in selection for more than 1 row, or an entire
-			// path
+			}
 		}
 
 		/**
@@ -2257,6 +2276,25 @@
 	/* * HELPER METHODS FOR PAINTING * */
 
 	/**
+	 * Returns the cell bounds for painting selected cells
+	 * 
+	 * @param x is the x location of the cell
+	 * @param y is the y location of the cell
+	 * @param cell is the Object to get the bounds for
+	 * 
+	 * @returns Rectangle that represents the cell bounds
+	 */
+	private Rectangle getCellBounds(int x, int y, Object cell)
+	{
+		String s = cell.toString();
+		Font f = tree.getFont();
+		FontMetrics fm = tree.getToolkit().getFontMetrics(tree.getFont());
+
+		return new Rectangle(x, y, SwingUtilities.computeStringWidth(fm, s), fm
+				.getHeight());
+	}
+
+	/**
 	 * Paints a leaf in the tree
 	 * 
 	 * @param g the Graphics context in which to paint
@@ -2270,21 +2308,22 @@
 		TreePath tp = new TreePath(((DefaultMutableTreeNode) leaf).getPath());
 		boolean selected = tree.isPathSelected(tp);
 
-		Component c = tree.getCellRenderer().getTreeCellRendererComponent(tree,
-				leaf, selected, false, true, 0, false);
-
 		if (selected)
 		{
 			Component comp = tree.getCellRenderer()
 					.getTreeCellRendererComponent(tree, leaf, true, false,
 							true, 0, false);
-			rendererPane.paintComponent(g, comp, tree, new Rectangle(x, y, 10,
-					25));
+			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);
 		}
-
-		g.translate(x, y);
-		c.paint(g);
-		g.translate(-x, -y);
 	}
 
 	/**
@@ -2302,20 +2341,22 @@
 		TreePath tp = new TreePath(((DefaultMutableTreeNode) nonLeaf).getPath());
 		boolean selected = tree.isPathSelected(tp);
 
-		Component c = tree.getCellRenderer().getTreeCellRendererComponent(tree,
-				nonLeaf, selected, false, false, 0, false);
-
 		if (selected)
 		{
 			Component comp = tree.getCellRenderer()
 					.getTreeCellRendererComponent(tree, nonLeaf, true, false,
 							true, 0, false);
-			rendererPane.paintComponent(g, comp, tree, new Rectangle(x, y, 10,
-					25));
+			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);
 		}
-		g.translate(x, y);
-		c.paint(g);
-		g.translate(-x, -y);
 	}
 
 	/**
Index: kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java
diff -u kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.5 kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.6
--- kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java:1.5	Mon Jul  4 00:08:48 2005
+++ kaffe/libraries/javalib/javax/swing/tree/DefaultTreeCellRenderer.java	Wed Jul  6 02:01:16 2005
@@ -116,6 +116,7 @@
 	 * borderSelectionColor
 	 */
 	protected Color borderSelectionColor;
+	
 
 	// -------------------------------------------------------------
 	// Initialization ---------------------------------------------
@@ -380,17 +381,42 @@
 		this.hasFocus = hasFocus;
 
 		if (leaf)
-			setIcon(getLeafIcon());
+			setLeafIcon(getLeafIcon());
 		else if (expanded)
-			setIcon(getOpenIcon());
+			setOpenIcon(getOpenIcon());
 		else
-			setIcon(getClosedIcon());
+			setClosedIcon(getClosedIcon());
 
 		setText(val.toString());
 		setHorizontalAlignment(LEFT);
+		setOpaque(true);
 		setVerticalAlignment(TOP);
+		setEnabled(true);
+		setFont(getFont());
 
+		if (selected) 
+		{
+			super.setBackground(getBackgroundSelectionColor());
+			super.setForeground(getTextSelectionColor());
+		}
+		else
+		{
+			super.setBackground((tree.getParent()).getBackground());
+			super.setForeground(getTextNonSelectionColor());
+		}
+		
+		
 		return this;
+	}
+	
+	/**
+	 * getFont
+	 * 
+	 * @return the current Font
+	 */
+	public Font getFont()
+	{
+		return super.getFont();
 	}
 
 	/**
Index: kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java
diff -u kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.11 kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.12
--- kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java:1.11	Mon Jul  4 00:08:48 2005
+++ kaffe/libraries/javalib/javax/swing/tree/DefaultTreeSelectionModel.java	Wed Jul  6 02:01:16 2005
@@ -274,7 +274,7 @@
 				selection = new TreePath[temp.length];
 				System.arraycopy(temp, 0, selection, 0, temp.length);
 			}
-
+			leadPath = value0;
 			fireValueChanged(new TreeSelectionEvent(this, value0, true,
 					leadPath, value0));
 		}
@@ -291,25 +291,29 @@
 	 */
 	public void addSelectionPaths(TreePath[] value0)
 	{
-		TreePath v0 = null;
-		for (int i = 0; i < value0.length; i++)
+		if (value0 != null)
 		{
-			v0 = value0[i];
-			if (!isPathSelected(v0))
+			TreePath v0 = null;
+			for (int i = 0; i < value0.length; i++)
 			{
-				if (isSelectionEmpty())
-					setSelectionPath(v0);
-				else
+				v0 = value0[i];
+				if (!isPathSelected(v0))
 				{
-					TreePath[] temp = new TreePath[selection.length + 1];
-					System.arraycopy(selection, 0, temp, 0, selection.length);
-					temp[temp.length - 1] = v0;
-					selection = new TreePath[temp.length];
-					System.arraycopy(temp, 0, selection, 0, temp.length);
+					if (isSelectionEmpty())
+						setSelectionPath(v0);
+					else
+					{
+						TreePath[] temp = new TreePath[selection.length + 1];
+						System.arraycopy(selection, 0, temp, 0,
+								selection.length);
+						temp[temp.length - 1] = v0;
+						selection = new TreePath[temp.length];
+						System.arraycopy(temp, 0, selection, 0, temp.length);
+					}
+					leadPath = value0[value0.length - 1];
+					fireValueChanged(new TreeSelectionEvent(this, v0, true,
+							leadPath, value0[0]));
 				}
-
-				fireValueChanged(new TreeSelectionEvent(this, v0, true,
-						leadPath, value0[0]));
 			}
 		}
 	}
@@ -357,30 +361,33 @@
 	 */
 	public void removeSelectionPaths(TreePath[] value0)
 	{
-		int index = -1;
-		TreePath v0 = null;
-		for (int i = 0; i < value0.length; i++)
+		if (value0 != null)
 		{
-			v0 = value0[i];
-			if (isPathSelected(v0))
+			int index = -1;
+			TreePath v0 = null;
+			for (int i = 0; i < value0.length; i++)
 			{
-				for (int x = 0; x < selection.length; x++)
+				v0 = value0[i];
+				if (isPathSelected(v0))
 				{
-					if (selection[i].equals(v0))
+					for (int x = 0; x < selection.length; x++)
 					{
-						index = x;
-						break;
+						if (selection[i].equals(v0))
+						{
+							index = x;
+							break;
+						}
 					}
-				}
-				TreePath[] temp = new TreePath[selection.length - 1];
-				System.arraycopy(selection, 0, temp, 0, index);
-				System.arraycopy(selection, index + 1, temp, index,
-						selection.length - index - 1);
-				selection = new TreePath[temp.length];
-				System.arraycopy(temp, 0, selection, 0, temp.length);
+					TreePath[] temp = new TreePath[selection.length - 1];
+					System.arraycopy(selection, 0, temp, 0, index);
+					System.arraycopy(selection, index + 1, temp, index,
+							selection.length - index - 1);
+					selection = new TreePath[temp.length];
+					System.arraycopy(temp, 0, selection, 0, temp.length);
 
-				fireValueChanged(new TreeSelectionEvent(this, v0, false,
-						leadPath, value0[0]));
+					fireValueChanged(new TreeSelectionEvent(this, v0, false,
+							leadPath, value0[0]));
+				}
 			}
 		}
 	}




More information about the kaffe mailing list