package org.chartsy.chatsy.chat.component;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Enumeration;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
public class CheckTree extends JPanel
{
private JTree tree;
public CheckTree(CheckNode rootNode)
{
tree = new JTree(rootNode);
tree.setCellRenderer(new CheckRenderer());
tree.setRowHeight(18);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setToggleClickCount(1000);
tree.putClientProperty("JTree.lineStyle", "Angled");
tree.addMouseListener(new NodeSelectionListener(tree));
setLayout(new BorderLayout());
add(tree, BorderLayout.CENTER);
}
class NodeSelectionListener extends MouseAdapter
{
JTree tree;
NodeSelectionListener(JTree tree)
{
this.tree = tree;
}
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
int row = tree.getRowForLocation(x, y);
TreePath path = tree.getPathForRow(row);
if (path != null)
{
CheckNode node = (CheckNode)path.getLastPathComponent();
boolean isSelected = !node.isSelected();
node.setSelected(isSelected);
if (node.getSelectionMode() == CheckNode.DIG_IN_SELECTION)
{
if (isSelected)
tree.expandPath(path);
else
tree.collapsePath(path);
}
((DefaultTreeModel)tree.getModel()).nodeChanged(node);
tree.revalidate();
tree.repaint();
}
}
}
public void close()
{
}
class ButtonActionListener implements ActionListener
{
CheckNode root;
JTextArea textArea;
ButtonActionListener(CheckNode root, JTextArea textArea)
{
this.root = root;
this.textArea = textArea;
}
public void actionPerformed(ActionEvent e)
{
Enumeration nodeEnum = root.breadthFirstEnumeration();
while (nodeEnum.hasMoreElements())
{
CheckNode node = (CheckNode)nodeEnum.nextElement();
if (node.isSelected())
{
TreeNode[] nodes = node.getPath();
textArea.append("\n" + nodes[0].toString());
for (int i = 1; i < nodes.length; i++)
textArea.append("/" + nodes[i].toString());
}
}
}
}
public JTree getTree()
{
return tree;
}
public void expandTree()
{
for (int i = 0; i <= tree.getRowCount(); i++)
tree.expandPath(tree.getPathForRow(i));
}
}