package shipmaker.render;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D;
import render.MouseEventType;
import render.OverlayManager;
import render.RenderPreferences;
import render.XYTRenderNode;
import shipmaker.partplacer.TextInputControl;
public class IconEditField extends XYTRenderNode {
private TextInputControl control;
private int hitboxWidth;
private int hitboxLeft;
private OverlayManager om;
public IconEditField(double x, double y, double theta, OverlayManager o,
TextInputControl pcontrol) {
super(x, y, theta);
this.om = o;
this.control = pcontrol;
om.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
if (control.editing()) {
control.typed(e);
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
});
}
public void draw(Graphics2D g, RenderPreferences prefs) {
if (control.editing()) {
g.setColor(Color.orange);
} else {
g.setColor(Color.white);
}
g.setFont(new Font("SansSerif", Font.BOLD, 14));
if (control.drawIcon(g, prefs)) {
hitboxLeft = -10;
hitboxWidth = 25;
} else {
hitboxLeft = 0;
hitboxWidth = 0;
}
g.drawString(control.content(), hitboxLeft + hitboxWidth, 5);
hitboxWidth += g.getFontMetrics().stringWidth(control.content());
}
public boolean interacted(AffineTransform root, MouseEvent e,
MouseEventType t) {
if (t != MouseEventType.MOUSE_PRESS)
return false;
if (!control.editing()) {
Point2D.Float src = new Point2D.Float();
src.setLocation(e.getX(), e.getY());
try {
root.invert();
} catch (NoninvertibleTransformException e1) {
e1.printStackTrace();
}
Point2D dest = new Point2D.Float();
root.transform(src, dest);
if (dest.getX() > hitboxLeft && dest.getX() < hitboxWidth
&& Math.abs(dest.getY()) < 9) {
control.startEdit();
om.setFocused(control);
return true;
}
} else {
control.endEdit(false);
}
return false;
}
}