diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings index ba76e0957bf3baa408d9d5140935eadd41d0d8c7..659c42a958b304ba7d02bd554a04260abc303045 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings @@ -1,3 +1,3 @@ AnnotationFxViewPart.java 6b65210913c150420f4fe67d055a0051d1d37a4e YELLOW -AnnotationViewFXController.java 55041ac106d68f27fcbcb26cf0a15cc3842f9bb1 YELLOW +AnnotationViewFXController.java c83d79c19d8be7de81c648a413e8527d48294005 YELLOW FXAnnotationFilterContentProvider.java 80fa6e9cc2f5ba3a255cab7061edca5fa368451a YELLOW diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java index 55041ac106d68f27fcbcb26cf0a15cc3842f9bb1..c83d79c19d8be7de81c648a413e8527d48294005 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java @@ -17,6 +17,9 @@ package org.fortiss.tooling.base.ui.annotation.view.fx; import static java.util.Collections.emptyList; import static java.util.stream.Collectors.toList; +import static javafx.scene.paint.Color.ALICEBLUE; +import static javafx.scene.paint.Color.LIGHTGREY; +import static javafx.scene.paint.Color.WHITE; import static org.fortiss.tooling.base.ui.annotation.view.fx.FXAnnotationFilterContentProvider.HIERARCHY_LEVELS_ALL; import static org.fortiss.tooling.base.ui.annotation.view.fx.FXAnnotationFilterContentProvider.HIERARCHY_LEVELS_CURRENT; import static org.fortiss.tooling.base.ui.annotation.view.fx.FXAnnotationFilterContentProvider.HIERARCHY_LEVELS_SELECTED_SUBMODEL; @@ -50,7 +53,6 @@ import org.fortiss.tooling.base.annotation.valueprovider.ValueProviderBase; import org.fortiss.tooling.base.model.element.IAnnotatedSpecification; import org.fortiss.tooling.base.model.element.IModelElement; import org.fortiss.tooling.base.ui.annotation.view.generic.ColumnHandle; -import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTextFieldTreeTableCell; import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase; import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableViewer; import org.fortiss.tooling.common.ui.javafx.layout.CompositeFXControllerBase; @@ -69,9 +71,9 @@ import javafx.scene.control.ComboBox; import javafx.scene.control.RadioButton; import javafx.scene.control.SplitPane; import javafx.scene.control.TextField; -import javafx.scene.control.TreeItem; import javafx.scene.control.TreeTableColumn; import javafx.scene.control.TreeTableView; +import javafx.scene.paint.Color; /** * Controller for the Annotations view. @@ -276,7 +278,7 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP columnHandles.clear(); columnHandleToColumn.clear(); annotationTreeTableView.getColumns().clear(); - annotationTreeTableView.setRoot(null); + // annotationTreeTableView.setRoot(null); } /** Configures the filter widgets for the annotation table. */ @@ -402,7 +404,7 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP colIdxAnnotationMap.put(columnIdx, handle); - TreeTableColumn<AnnotationEntry, String> column = null; + TreeTableColumn<AnnotationEntry, ?> column = null; // Case distinction for the cell factory depending on the type to be edited. if(valueType == null) { @@ -410,7 +412,9 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP column.setEditable(false); return column; - } else if(valueType instanceof EEnum) { + } + + if(valueType instanceof EEnum) { // Add a combo column for enumerations. column = annotationViewer.addComboColumn(columnName, 150, rowEntry -> { ValueProviderBase<IAnnotatedSpecification> annotationValueProvider = @@ -431,43 +435,14 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP }); } else if(valueType.getInstanceClass().equals(Boolean.class)) { // Use a checkbox column for booleans - annotationViewer.addCheckboxColumn(columnName, 100); + column = annotationViewer.addCheckboxColumn(columnName, 100); } else { // For all other types, there is text editing. - column = annotationViewer.addColumn(columnName, 150); - column.setCellFactory(ttColumn -> new DynamicTextFieldTreeTableCell<AnnotationEntry>() { - /** {@inheritDoc} */ - @Override - protected boolean canEdit(AnnotationEntry element) { - // We start editing only, if this cell is supposed to be editable. - IAnnotationValueProvider<IAnnotatedSpecification> annotationValueProvider = - element.getAnnotationValueProvider(annotationClass); - IAnnotatedSpecification currentSpecification = - element.getSpecification(annotationClass); - return annotationValueProvider != null && - annotationValueProvider.canEdit(currentSpecification); - } - - /** {@inheritDoc} */ - @Override - protected void setValueOnLeavingCell(AnnotationEntry element, String currentValue) { - IAnnotatedSpecification specification = - element.getSpecification(annotationClass); - setAnnotationEntryValue(specification, element, currentValue); - } - }); + column = annotationViewer.addTextColumn(columnName, 150); } if(column != null) { column.setEditable(true); - - column.setOnEditCommit(event -> { - TreeItem<AnnotationEntry> treeItem = event.getRowValue(); - AnnotationEntry rowEntry = treeItem.getValue(); - String newValue = event.getNewValue(); - - setAnnotationEntryValue(specification, rowEntry, newValue); - }); } return column; @@ -531,6 +506,51 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP return ""; } } + + /** {@inheritDoc} */ + @Override + public Color getBackgroundColor(AnnotationEntry element, int column) { + if(column > 1 && colIdxAnnotationMap.containsKey(column)) { + IAnnotatedSpecification spec = + colIdxAnnotationMap.get(column).getAnnotatedSpecification(); + IAnnotationValueProvider<IAnnotatedSpecification> valueProvider = + element.getAnnotationValueProvider(spec.getClass()); + if(valueProvider != null && valueProvider.getAnnotationValue(spec) != null && + !isElementEditable(column, element)) { + return ALICEBLUE; + } + + if(!isElementEditable(column, element)) { + return LIGHTGREY; + } + } + + return WHITE; + } + + /** {@inheritDoc} */ + @Override + public void updateValue(AnnotationEntry element, int column, Object value) { + IAnnotatedSpecification specification = + colIdxAnnotationMap.get(column).getAnnotatedSpecification(); + setAnnotationEntryValue(specification, element, (String)value); + + super.updateValue(element, column, value); + } + + /** {@inheritDoc} */ + @Override + public boolean isElementEditable(int column, AnnotationEntry element) { + if(column > 1 && colIdxAnnotationMap.containsKey(column)) { + IAnnotatedSpecification spec = + colIdxAnnotationMap.get(column).getAnnotatedSpecification(); + IAnnotationValueProvider<IAnnotatedSpecification> valueProvider = + element.getAnnotationValueProvider(spec.getClass()); + return valueProvider != null && valueProvider.canEdit(spec); + } + + return false; + } } /**