diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings index fd881613034423711100bce0e8744aefee6a9f4b..627433cf40483ad17c071580e736891abe1261ce 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings @@ -1,7 +1,7 @@ DynamicTreeContentProviderBase.java dff437afeaf7486af05460fa54eca4fa61d7eae6 GREEN DynamicTreeItem.java afc105cf5acf3d2506d89e0892555100c234ce5b GREEN DynamicTreeTableUIProviderBase.java fd9fce19a65eb1006ceacb0d869bbe90a8c578b3 GREEN -DynamicTreeTableViewer.java b06182c30665f54942703a5e9986822a4d8dd59a RED +DynamicTreeTableViewer.java 4f278387dd90542adc07bf0da12e92d4eaad79c4 YELLOW DynamicTreeUIProviderBase.java 56fe4df4577b35f1e5e6e4c4be189b706c852d52 GREEN DynamicTreeViewer.java da5e24ae57777a482d8e12c8262513d8143bfa93 GREEN DynamicTreeViewerBase.java 47124c847de322a0ae26eb7a114f85ce4bd02d7e GREEN diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java index b06182c30665f54942703a5e9986822a4d8dd59a..4f278387dd90542adc07bf0da12e92d4eaad79c4 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java @@ -15,17 +15,17 @@ *******************************************************************************/ package org.fortiss.tooling.common.ui.javafx.control.treetableview; +import static javafx.scene.control.cell.TextFieldTreeTableCell.forTreeTableColumn; + import javafx.beans.property.SimpleObjectProperty; -import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.control.ContextMenu; import javafx.scene.control.SelectionMode; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeTableCell; import javafx.scene.control.TreeTableColumn; -import javafx.scene.control.TreeTableColumn.CellEditEvent; import javafx.scene.control.TreeTableView; -import javafx.scene.control.cell.TextFieldTreeTableCell; +import javafx.util.Callback; /** * A JavaFX {@link TreeTableView} based on an {@link DynamicTreeContentProviderBase} and @@ -89,10 +89,11 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { } /** - * Creates non-editable column displaying the labels as defined by the - * {@link DynamicTreeTableUIProviderBase} used as a basis for specific column types. + * Adds a column to the table part of the view. The labels, context menus and icons are shown as + * defined in the {@link DynamicTreeTableUIProviderBase}. */ - private TreeTableColumn<T, String> createColumn(String headerLabel, int prefWidth) { + public TreeTableColumn<T, String> addColumn(String headerLabel, int prefWidth, + boolean readOnly) { int num = view.getColumns().size(); TreeTableColumn<T, String> column = new TreeTableColumn<>(headerLabel); @@ -102,55 +103,38 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { return new SimpleObjectProperty<String>(uiProvider.getLabel(data, num)); }); - view.getColumns().add(column); - - return column; - } - - /** - * Adds a non-editable column to the table part of the view. The labels, context menus and icons - * are shown as defined in the {@link DynamicTreeTableUIProviderBase}. - */ - // TODO(AD): Please add a flag to make the column read-only or read-writable. - public void addColumn(String headerLabel, int prefWidth) { - TreeTableColumn<T, String> column = createColumn(headerLabel, prefWidth); - - column.setCellFactory(param -> { - TreeTableCell<T, String> cell = new TreeTableCell<T, String>() { - @Override - protected void updateItem(String item, boolean empty) { - super.updateItem(item, empty); - ContextMenu menu = null; - Node icon = null; - int index = view.getColumns().size() - 1; - if(!empty && item != null) { - T data = this.getTreeTableRow().getItem(); - menu = uiProvider.createContextMenu(data, index); - icon = uiProvider.getIconNode(data, index); + Callback<TreeTableColumn<T, String>, TreeTableCell<T, String>> cellFactory; + if(readOnly) { + // Read only cell with the icon and context menu as specified in the UI provider + cellFactory = param -> { + TreeTableCell<T, String> cell = new TreeTableCell<T, String>() { + @Override + protected void updateItem(String item, boolean empty) { + super.updateItem(item, empty); + ContextMenu menu = null; + Node icon = null; + int index = view.getColumns().size() - 1; + if(!empty && item != null) { + T data = this.getTreeTableRow().getItem(); + menu = uiProvider.createContextMenu(data, index); + icon = uiProvider.getIconNode(data, index); + } + this.setContextMenu(menu); + this.setGraphic(icon); } - this.setContextMenu(menu); - this.setGraphic(icon); - } + }; + cell.textProperty().bind(cell.itemProperty()); + return cell; }; - cell.textProperty().bind(cell.itemProperty()); - return cell; - }); - } + } else { + // Editable text field + cellFactory = forTreeTableColumn(); + } + column.setCellFactory(cellFactory); - /** - * Adds an editable column to the table part of the view. The labels defined in the - * {@link DynamicTreeTableUIProviderBase} are used as predefined values. The - * {@link EventHandler} is executed after a cell has been successfully edited. - */ - // TODO(AD): This method is redundant and oversimplified (due to the limitation to a text field - // editor). It would be better to change the method "addColumn(...)" to return the created - // column. The client code would be pretty much the same with that change. - public void addColumn(String headerLabel, int prefWidth, - EventHandler<CellEditEvent<T, String>> eventHandler) { - TreeTableColumn<T, String> column = createColumn(headerLabel, prefWidth); + view.getColumns().add(column); - column.setCellFactory(TextFieldTreeTableCell.<T>forTreeTableColumn()); - column.setOnEditCommit(eventHandler); + return column; } /** Returns the underlying {@link TreeTableView}. */