/*
* 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.grammar.parse;
import grammar.Production;
import grammar.parse.ParseNode;
import gui.tree.DefaultNodeDrawer;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Point2D;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.tree.TreeNode;
/**
* This class allows user to select items in the tree Panel.
* This class was intended to be used with UserControlParsePane,
* however we decided to not to use it.
*
* However, this class is still called from UserControlParsePane for drawing.
*
* Could be useful in the future.
*
* @author Kyung Min (Jason) Lee
*
*/
public class SelectableUnrestrictedTreePanel extends UnrestrictedTreePanel{
private boolean myClicked=false;
private Point2D myClickedNodePoint;
private Color myColor;
private static final Color CLICKED_COLOR=new Color(100,120,120);
/**
* Constructor for SelectableUnrestrictedTreePanel
* @param pane pane that is going to contain this tree panel
*/
public SelectableUnrestrictedTreePanel(BruteParsePane pane) {
super(pane);
myColor=super.INNER;
}
/**
* Returns the node at a particular point.
*
* @param point
* the point to check for nodeness
* @return the treenode at a particular point, or null
if
* there is no treenode at that point
*/
public TreeNode nodeAtPoint(Point2D point) {
double x1=point.getX();
double y1=point.getY();
Iterator it = nodeToPoint.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = (Map.Entry) it.next();
Point2D tempPoint=(Point2D) e.getValue();
double x2=tempPoint.getX();
double y2=tempPoint.getY();
if (Math.pow((x2-x1), 2)+Math.pow((y2-y1), 2)<=Math.pow(nodeDrawer.NODE_RADIUS,2))
{
myClicked=true;
myClickedNodePoint=new Point2D.Double(x2,y2);
// repaint();
return (TreeNode)e.getKey();
}
}
return null;
}
public Point2D getPointofSelectedNode()
{
if (myClicked)
return myClickedNodePoint;
return null;
}
/**
* Sets the answer to this tree panel.
*
* @param answer
* the end result of a parse tree derivation, or null
* if no answer should be displayed
*/
public void setAnswer(ParseNode answer) {
if (answer==null)
{
top=null;
return;
}
super.setAnswer(answer);
for (int i=1; i