package shipmaker.partplacer;
import java.awt.event.KeyEvent;
public abstract class HexTextControl implements TextInputControl {
boolean editing;
String content;
private int len;
public HexTextControl(int len) {
this.len = len;
}
public String content() {
if (editing) {
return "0x"+(String.format("%s\u258c", content).toUpperCase());
} else {
return "0x"+(String.format("%0" + len + "x", get()).toUpperCase());
}
}
protected abstract int get();
protected abstract void set(int x);
public void startEdit() {
content = "";
editing = true;
}
public void typed(KeyEvent e) {
if (editing) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
endEdit(false);
} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
endEdit(true);
} else if (e.getKeyCode() >= KeyEvent.VK_0
&& e.getKeyCode() <= KeyEvent.VK_9) {
if (content.length() < len)
content += (e.getKeyChar());
} else if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
if (content.length() > 0)
content = content.substring(0, content.length() - 1);
} else if (e.getKeyCode() >= KeyEvent.VK_A
&& e.getKeyCode() <= KeyEvent.VK_F) {
if (content.length() < len)
content += (char) ('A' + e.getKeyCode() - KeyEvent.VK_A);
}
}
}
public void endEdit(boolean escaped) {
editing = false;
if (escaped)
return;
if (content.length() > 0) {
set(Integer.parseInt(content, 16));
}
}
public boolean editing() {
return editing;
}
public void lostFocus() {
endEdit(false);
}
}