[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