Skip to content
Snippets Groups Projects
Commit 1ee8032a authored by Florian Hölzl's avatar Florian Hölzl
Browse files

Kernel: added callback method for key event of table cell editing.

parent a589edc7
No related branches found
No related tags found
1 merge request!1023961
DynamicTreeContentProviderBase.java 6760a6dc5721175b1dada8f30fd9da05f7bcc4b3 GREEN
DynamicTreeItem.java 75dc5534b119ffdb3c10a65810c2a0f330b7955e GREEN
DynamicTreeTableUIProviderBase.java 75ddf3e91c08fd6a5853ab261593040d1039d774 GREEN
DynamicTreeTableUIProviderBase.java 4fbc6171f3e95900678d7c2baea680e91fcc5be1 YELLOW
DynamicTreeTableViewer.java 431ac62cbd6ad7df25852fce1b5a62a05ba510e3 GREEN
DynamicTreeUIProviderBase.java e9b68607683de279d0cb8712a28dc131c5c33ece GREEN
DynamicTreeViewer.java e9f19d16a2a7e5a1b03b8a8b543453ac7eb6a051 GREEN
......
......@@ -13,14 +13,17 @@
*******************************************************************************/
package org.fortiss.tooling.common.ui.javafx.control.treetableview;
import static javafx.scene.control.cell.TextFieldTreeTableCell.forTreeTableColumn;
import javafx.scene.Node;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeTableCell;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.cell.TextFieldTreeTableCell;
import javafx.scene.input.Dragboard;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.util.Callback;
import javafx.util.converter.DefaultStringConverter;
/**
* This UI provider is responsible to return the label, the icon, and the context menu for each cell
......@@ -128,8 +131,11 @@ public abstract class DynamicTreeTableUIProviderBase<T> {
column.setOnEditCommit(null);
return;
}
column.setCellFactory(createEditableCellFactory());
column.setCellFactory(createEditableCellFactory(i));
column.setEditable(true);
column.setOnEditStart(event -> {
event.getEventType();
});
column.setOnEditCommit(event -> {
T element = event.getRowValue().getValue();
int colIndex = event.getTreeTablePosition().getColumn();
......@@ -141,8 +147,58 @@ public abstract class DynamicTreeTableUIProviderBase<T> {
/** Creates a cell factory for editable cells. */
private Callback<TreeTableColumn<T, String>, TreeTableCell<T, String>>
createEditableCellFactory() {
return forTreeTableColumn();
createEditableCellFactory(int colIndex) {
return param -> {
return new MyTextFieldTreeTableCell(colIndex);
};
}
/** Custom table cell implementation to allow on key released validation. */
private class MyTextFieldTreeTableCell extends TextFieldTreeTableCell<T, String> {
/** The column index of this cell. */
private final int columnIndex;
/** Constructor. */
public MyTextFieldTreeTableCell(int colIndex) {
this.columnIndex = colIndex;
setConverter(new DefaultStringConverter());
}
/** {@inheritDoc} */
@Override
public void startEdit() {
super.startEdit();
// the following code uses implementation details of
// CellUtils.startEdit(...) and CellUtils.createTextfield(...)
TextField tf = (TextField)getGraphic(); // CellUtil:228
tf.setOnKeyReleased(t -> {
DynamicTreeTableUIProviderBase<T>.MyTextFieldTreeTableCell mythis =
MyTextFieldTreeTableCell.this;
if(t.getCode() == KeyCode.ESCAPE) {
mythis.cancelEdit();
t.consume();
} else {
T item = mythis.getTreeTableRow().getItem();
validateOnKeyReleased(t, columnIndex, item, tf.getText());
}
});
}
}
/**
* Called when a key was released during editing. Implementors should consume the event.
*
* @param event
* the key released event
* @param colIndex
* the index of the column
* @param item
* the row item
* @param text
* the current textfield content
*/
public void validateOnKeyReleased(KeyEvent event, int colIndex, T item, String text) {
// nothing to do
}
/** Creates a cell factory for read-only cells. */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment