From c7db12faeeb355d617bf6a3ce05915365ea03939 Mon Sep 17 00:00:00 2001 From: Alexander Diewald <diewald@fortiss.org> Date: Wed, 6 Mar 2019 14:49:31 +0100 Subject: [PATCH] CR: YELLOW Issue-Ref: 3482 Issue-Url: https://af3-developer.fortiss.org/issues/3482 Signed-off-by: Alexander Diewald <diewald@fortiss.org> --- .../ui/javafx/control/treetableview/.ratings | 2 +- .../treetableview/ModelElementTreeViewer.java | 41 +++++++++++++------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings index fa2968f9f..294b7631f 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/.ratings @@ -1 +1 @@ -ModelElementTreeViewer.java 44744e6b11264547bd6b05a84a427948bf919969 RED +ModelElementTreeViewer.java 6eb558c8d5a0eaf3df55aa1091586cd1faefecb1 YELLOW diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java index 44744e6b1..6eb558c8d 100644 --- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java +++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/javafx/control/treetableview/ModelElementTreeViewer.java @@ -17,6 +17,9 @@ package org.fortiss.tooling.base.ui.javafx.control.treetableview; import static javafx.embed.swt.SWTFXUtils.toFXImage; +import java.util.ArrayList; +import java.util.List; + import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IModelElement; import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeContentProviderBase; @@ -27,6 +30,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService; import javafx.scene.Node; import javafx.scene.control.ContextMenu; +import javafx.scene.control.MenuItem; import javafx.scene.control.TreeView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -45,6 +49,12 @@ public class ModelElementTreeViewer<T extends IModelElement & INamedCommentedEle /** References the constructed {@link DynamicTreeViewer} "controller". */ protected DynamicTreeViewer<T> dynTreeViewer; + /** + * List of context menu entries that supplied by clients (see + * {@link #addContextMenuEntry(MenuItem)}). + */ + protected List<MenuItem> contextMenuEntries = new ArrayList<>(); + /** Constructor. */ public ModelElementTreeViewer(TreeView<T> treeView, T modelRoot, DynamicTreeContentProviderBase<T> contentProvider) { @@ -57,9 +67,6 @@ public class ModelElementTreeViewer<T extends IModelElement & INamedCommentedEle * Creates a default UI provider for {@link DynamicTreeViewer}s that present * {@link IHierarchicElement}s. It also uses the {@link IModelElementHandlerService} for a nicer * visual appearance. - * <p> - * TODO(SB, unclear) - * Externalizing this method into a class when subclassing seems appropriate. * * @return The constructed UI Provider. */ @@ -88,18 +95,26 @@ public class ModelElementTreeViewer<T extends IModelElement & INamedCommentedEle @Override public ContextMenu createContextMenu(T element) { ContextMenu menu = new ContextMenu(); - // TODO (3209): Add sensible default operations for AF3 elements, if they are - // needed. Otherwise, use a list provided by subclasses that defines the menu items - // and their order. The code below is taken from SystemFOCUS and shall serve as a - // reference. - // MenuItem item = new MenuItem("Delete '" + getLabel(element) + "'."); - // item.setOnAction(event -> { - // new DeleteOperation(element).delete(); - // viewer.update(); - // }); - // menu.getItems().add(item); + contextMenuEntries.forEach(entry -> menu.getItems().add(entry)); return menu; } }; } + + /** + * Method to define context {@link MenuItem}s for items of the underlying content. The given + * function may use the selected element (given as a parameter to the function) to define + * dynamic behavior. + * + * @param menuItem + * {@link MenuItem} and its logic to be added to the context menu. + */ + public void addContextMenuEntry(MenuItem menuItem) { + contextMenuEntries.add(menuItem); + } + + /** Update the internal viewer. */ + public void update() { + dynTreeViewer.update(); + } } -- GitLab