first commit
[jalview-fx.git] / src / application / TextFieldTreeCellImpl.java
1 package application;
2
3 import javafx.event.EventHandler;
4 import javafx.scene.control.TextField;
5 import javafx.scene.control.TreeCell;
6 import javafx.scene.input.KeyCode;
7 import javafx.scene.input.KeyEvent;
8
9
10
11 public class TextFieldTreeCellImpl extends TreeCell<String> {
12
13         private TextField textField;
14
15         public TextFieldTreeCellImpl() {
16         }
17
18         @Override
19         public void startEdit() {
20                 super.startEdit();
21
22                 if (textField == null) {
23                         createTextField();
24                 }
25                 setText(null);
26                 setGraphic(textField);
27                 textField.selectAll();
28         }
29
30         @Override
31         public void cancelEdit() {
32                 super.cancelEdit();
33                 setText((String) getItem());
34                 setGraphic(getTreeItem().getGraphic());
35         }
36
37         @Override
38         public void updateItem(String item, boolean empty) {
39                 super.updateItem(item, empty);
40
41                 if (empty) {
42                         setText(null);
43                         setGraphic(null);
44                 } else {
45                         if (isEditing()) {
46                                 if (textField != null) {
47                                         textField.setText(getString());
48                                 }
49                                 setText(null);
50                                 setGraphic(textField);
51                         } else {
52                                 setText(getString());
53                                 setGraphic(getTreeItem().getGraphic());
54                         }
55                 }
56         }
57
58         private void createTextField() {
59                 textField = new TextField(getString());
60                 textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
61
62                         @Override
63                         public void handle(KeyEvent t) {
64                                 if (t.getCode() == KeyCode.ENTER) {
65                                         commitEdit(textField.getText());
66                                 } else if (t.getCode() == KeyCode.ESCAPE) {
67                                         cancelEdit();
68                                 }
69                         }
70                 });
71         }
72
73         private String getString() {
74                 return getItem() == null ? "" : getItem().toString();
75         }
76 }