/*
* JFLAP - Formal Languages and Automata Package
*
*
* Susan H. Rodger
* Computer Science Department
* Duke University
* August 27, 2009
* Copyright (c) 2002-2009
* All rights reserved.
* JFLAP is open source software. Please see the LICENSE for terms.
*
*/
package gui.tree;
import java.awt.Color;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.WeakHashMap;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
/**
* This tree drawer allows the selection of nodes.
*
* @author Thomas Finley
*/
public class SelectTreeDrawer extends DefaultTreeDrawer {
/**
* Instantiates a new SelectTreeDrawer
with the default
* colors.
*
* @param tree
* the model to draw
*/
public SelectTreeDrawer(TreeModel tree) {
this(tree, NODE_COLOR, SELECTED_NODE_COLOR);
}
/**
* Instantiates a new SelectTreeDrawer
with some deselected
* and selected colors.
*
* @param tree
* the model to draw
* @param deselected
* the deselected color
* @param selected
* the selected color
*/
public SelectTreeDrawer(TreeModel tree, Color deselected, Color selected) {
super(tree);
deselectedColor = deselected;
selectedColor = selected;
}
/**
* Determines if a node is selected.
*
* @param node
* the node to check for selectedness
* @return true
if the node is selected, false
* otehrwise
*/
public boolean isSelected(TreeNode node) {
return selectedNodes.containsKey(node);
}
/**
* Sets the selectedness of a node.
*
* @param node
* the node to select or deselect
* @param select
* if true, then select the node, otherwise deselect
*/
public void setSelected(TreeNode node, boolean select) {
if (select)
selectedNodes.put(node, null);
else
selectedNodes.remove(node);
}
/**
* Returns an array containing the list of all selected nodes.
*
* @return an array containing the list of all selected nodes
*/
public TreeNode[] getSelected() {
Set s = new HashSet(selectedNodes.keySet());
Iterator it = s.iterator();
while (it.hasNext()) {
TreeNode n = (TreeNode) it.next();
if (n.getParent() == null && n != getModel().getRoot())
selectedNodes.remove(n);
}
return (TreeNode[]) selectedNodes.keySet().toArray(new TreeNode[0]);
}
/**
* Sets all nodes as deselected.
*/
public void clearSelected() {
selectedNodes.clear();
}
/**
* This method returns the color for a particular node.
*
* @param node
* the node to color
* @return the color for this node, which will be either the selected color
* if the node is selected, otherwise the deselected color
*/
protected Color getNodeColor(TreeNode node) {
return isSelected(node) ? selectedColor : deselectedColor;
// Color color = super.getNodeColor(node);
// return isSelected(node) ? color.darker() : color;
}
/** The selected nodes, with keys as nodes. */
protected WeakHashMap selectedNodes = new WeakHashMap();
/** The deselected node color. */
protected Color deselectedColor = NODE_COLOR;
/** The selected node color. */
protected Color selectedColor = SELECTED_NODE_COLOR;
/** The default deselected node color. */
public static final Color NODE_COLOR = Color.yellow;
/** The default selected node color. */
public static final Color SELECTED_NODE_COLOR = NODE_COLOR.darker();
}