package helpmaker.model;
import javafx.event.EventHandler;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeCell;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
public class TextFieldTreeCellImpl extends TreeCell<XMLNodeItemExtended> {
private TextField textField;
public TextFieldTreeCellImpl() { }
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setText(getItem().getCaption());
setGraphic(textField);
textField.selectAll();
}
@Override
public void cancelEdit() {
super.cancelEdit();
setText(getItem().getCaption());
setGraphic(getTreeItem().getGraphic());
}
@Override
public void updateItem(XMLNodeItemExtended item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(getString());
}
setText(null);
setGraphic(textField);
} else {
setText(getString());
setGraphic(getTreeItem().getGraphic());
}
}
}
private void createTextField() {
textField = new TextField(getString());
textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
if (t.getCode() == KeyCode.ENTER) {
getItem().setCaption(textField.getText());
commitEdit(getItem());
} else if (t.getCode() == KeyCode.ESCAPE) {
cancelEdit();
}
}
});
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
}