package cit.PureATN.Inspector;
import java.awt.Color;
import java.awt.Paint;
import java.util.Hashtable;
import javax.swing.JFrame;
import org.piccolo2d.PCanvas;
import org.piccolo2d.PNode;
import org.piccolo2d.event.PBasicInputEventHandler;
import org.piccolo2d.event.PInputEvent;
import org.piccolo2d.nodes.PPath;
import org.piccolo2d.nodes.PText;
import org.piccolo2d.util.PBounds;
/**
* ATNWindowで右ドラッグしながら青色のズーム範囲矩形を表示し,ズームする機能を実現するクラス
* @author miuramo
*
*/
public class InspectorHandler extends PBasicInputEventHandler {
PNode pressN;
PInputEvent pressEv = null;
PCanvas canvas;
JFrame frame;
Paint preserveColor = null;
Hashtable<PNode, Paint> preserve;
// public boolean canceled_by_SimpleATN_EnterKey;
JFrame inspectorFrame = null;
InspectorPanel inspectorPanel;
public InspectorHandler(PCanvas _canvas, JFrame _frame) {
canvas = _canvas;
frame = _frame;
preserve = new Hashtable<PNode, Paint>();
inspectorFrame = createNewFrame_NextTo(frame);
inspectorPanel = new InspectorPanel(inspectorFrame, this);
inspectorFrame.getContentPane().add(inspectorPanel);
inspectorFrame.setTitle("Inspector");
System.out.println("new Inspector");
}
public static PBounds getGapPBounds(int x, int y, PBounds pb){
PBounds newpb = new PBounds(pb.x-x, pb.y-y, pb.width+2*x, pb.height+2*y);
return newpb;
}
public static JFrame createNewFrame_NextTo(JFrame p){
JFrame jf = new JFrame();
int w = p.getWidth();
jf.setLocation(p.getX()+w, p.getY());
return jf;
}
public void mouseMoved(PInputEvent ev){
pressEv = ev;
if (pressN == null) setHilit(pressN);
if (pressN != ev.getPickedNode()){
resetHilit(pressN);
pressN = ev.getPickedNode();
setHilit(pressN);
showClassName(pressN, 1);
}
}
public void showClassName(PNode p, int level){
if (level == 1) inspectorPanel.pnlist.clear();
inspectorPanel.pnlist.add(p);
// String nm = p.getClass().getSimpleName();
String nm = p.getClass().getName();
if (level>1) System.out.print(" < ");
System.out.print(nm);
PNode parent = p.getParent();
if (parent != null) showClassName(parent, level+1);
if (level == 1) System.out.println("");
inspectorPanel.repaint();
}
public void setHilit(PNode n){
if (n==null) return;
if (preserve.get(n)==null){
Paint p = pickColor(n);
if (p==null) {
// System.out.println("NULL");
return;
}
preserve.put(n, p);
for(Object o: n.getAllNodes().toArray()){
if (o instanceof PNode){
((PNode)o).setPickable(true);
}
}
}
hilitColor(n);
}
public void resetHilit(PNode n){
if (n==null) return;
Paint p = preserve.get(n);
if (p!=null){
setColor(n,p);
}
}
public void setColor(PNode n, Paint p){
if (n instanceof PPath){
((PPath)n).setPaint(p);
} else if (n instanceof PText){
((PText)n).setTextPaint(p);
}
}
public void hilitColor(PNode n){
if (n instanceof PPath){
((PPath)n).setPaint(Color.yellow);
} else if (n instanceof PText){
((PText)n).setTextPaint(Color.yellow);
}
}
public Paint pickColor(PNode n){
if (n instanceof PPath){
return ((PPath)n).getPaint();
} else if (n instanceof PText){
return ((PText)n).getTextPaint();
}
return null;
}
}