package jaist.css.covis.fm;
import java.awt.Font;
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import org.piccolo2d.event.PInputEvent;
import org.piccolo2d.nodes.PPath;
import org.piccolo2d.nodes.PText;
/**
* 一般的な「状態」
*
* @author miuramo
*
*/
@SuppressWarnings("serial")
public class DefaultState extends State {
public DefaultState(AbstractFlowMenu f, String n) {
super(f, n);
}
public void drag(PInputEvent e) {
super.drag(e);
Point2D cp = e.getPositionRelativeTo(owner.camera);
index = getPlace((int) cp.getX(), (int) cp.getY());
updateMenu(index);
// System.out.println("x: "+cp.getX()+" y: "+cp.getY() +" st "+index);
}
public void paint() {
removeAllChildren();
Ellipse2D.Double ed2 = new Ellipse2D.Double(-SIZE / 2.0 - SIZE / 16.0,
-SIZE / 2.0 - SIZE / 16.0, SIZE + SIZE / 8.0, SIZE + SIZE / 8.0);
// Arc2D.Double ac = new
// Arc2D.Double(-SIZE,-SIZE,SIZE*2.0,SIZE*2.0,0,-44, Arc2D.PIE);
Arc2D.Double ac = new Arc2D.Double(-SIZE / 4.0 * 5.0,
-SIZE / 4.0 * 5.0, SIZE / 2.0 * 5.0, SIZE / 2.0 * 5.0, 0,
-43.5, Arc2D.PIE);
@SuppressWarnings("unused")
Rectangle2D.Double rd = new Rectangle2D.Double(0, 0, SIZE, SIZE);
Area a = new Area();
a.add(new Area(ac));
a.subtract(new Area(ed2));
AffineTransform at = new AffineTransform();
int mx = owner.getX();
int my = owner.getY();
int sx = 0, sy = 0;
Font f = (new PText()).getFont();
Font nf = new Font(f.getFontName(), Font.BOLD, (int) (14 * SIZE / 80.0));
// g2.setFont(nf);
for (int i = 0; i < 8; i++) {
at.setToTranslation(mx, my);
at.rotate(Math.toRadians(-112 - i * 45));
Area b = a.createTransformedArea(at);
itempath[i + 2] = new PPath(b);
itempath[i + 2].setStroke(null);
if (nextstates[i + 2] == null) {
itempath[i + 2].setPaint(no);
} else {
if (nextstates[i + 2].isEnabled()) {
itempath[i + 2].setPaint(fill);
} else {
itempath[i + 2].setPaint(no);
}
}
// p.setStroke(new
// BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.CAP_ROUND));
// p.setStrokePaint(Color.gray);
// if(!isEnable(i+2)){
// p.setPaint(no);//continue;
// // p.setStrokePaint(no);
// }
// if(state == i+2){
// p.setPaint(choose);
// // p.setStrokePaint(choose);
// }
// else{
// p.setPaint(fill);
// // p.setStrokePaint(fill);
// }
addChild(itempath[i + 2]);
}
for (int i = 0; i < 8; i++) {
switch (i) {
case 0:
sx = (int) (Math.cos(105.0 * RD) * (double) SIZE + mx);
sy = (int) (-1.3 * Math.sin(135.0 * RD) * (double) SIZE + my);
break;
case 1:
sx = (int) (Math.cos(150.0 * RD) * (double) SIZE + mx);
sy = (int) (-1.2 * Math.sin(150.0 * RD) * (double) SIZE + my);
break;
// case 2: sx = (int)(Math.cos(180.0*RD)*(double)SIZE+mx);
case 2:
sx = (int) (1.1 * Math.cos(180.0 * RD) * (double) SIZE + mx);
sy = (int) (-Math.sin(180.0 * RD) * (double) SIZE + my);
break;
case 3:
sx = (int) (Math.cos(210.0 * RD) * (double) SIZE + mx);
sy = (int) (-Math.sin(220.0 * RD) * (double) SIZE + my);
break;
case 4:
sx = (int) (Math.cos(255.0 * RD) * (double) SIZE + mx);
sy = (int) (-Math.sin(235.0 * RD) * (double) SIZE + my);
break;
case 5:
sx = (int) (1.4 * Math.cos(290.0 * RD) * (double) SIZE + mx);
sy = (int) (-Math.sin(320.0 * RD) * (double) SIZE + my);
break;
case 6:
sx = (int) (1.1 * Math.cos(55.0 * RD) * (double) SIZE + mx);
sy = (int) (-Math.sin(0.0 * RD) * (double) SIZE + my);
break;
case 7:
sx = (int) (1.5 * Math.cos(75 * RD) * (double) SIZE + mx);
sy = (int) (-1.3 * Math.sin(30.0 * RD) * (double) SIZE + my);
break;
}
// g2.setColor(strColor);
String sst = getString(i + 2);
if (sst != null) {
PText pt = new PText(sst);
pt.offset(sx, sy);
pt.setFont(nf);
// System.out.println(i + " "+getString(i+2)+" "+sx+" "+sy);
addChild(pt);
}
}
PText pt2 = new PText(getName());
pt2.offset((mx - SIZE / 2.0 + 20), my);
pt2.setFont(nf);
addChild(pt2);
}
}