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 a2b4546eb88861e261355b44a2c0d34762bb5378..d804a3a107c8bdad68ee6a956c85f85bbcddd07d 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 5f0c418cfc157738be079e21933429ff892b00eb YELLOW -DynamicTreeTableViewer.java 4eb55f9b0b0bb3c9198fe192d43f3bcb29643f12 YELLOW +DynamicTreeTableUIProviderBase.java 7bfc1395283d3dc10026aff5e2e65df88d25f3a7 YELLOW +DynamicTreeTableViewer.java 41bfddb704b5fd7ba546d574103ad01192072d2a 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/DynamicTreeTableUIProviderBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableUIProviderBase.java index 5f0c418cfc157738be079e21933429ff892b00eb..7bfc1395283d3dc10026aff5e2e65df88d25f3a7 100644 --- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableUIProviderBase.java +++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableUIProviderBase.java @@ -84,6 +84,19 @@ public abstract class DynamicTreeTableUIProviderBase<T> { // ignored, since not editable } + /** + * Notifies the provider about the selection of the given new value (and the deselection of the + * given old value. + * + * @param oldValue + * unselected value + * @param newValue + * the selected value + */ + public void select(T oldValue, T newValue) { + // ignored + } + /** Applies the editing support to the given column. */ /* package */ final void applyToColumn(int i, TreeTableColumn<T, String> column) { if(!isEditable(i)) { 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 4eb55f9b0b0bb3c9198fe192d43f3bcb29643f12..41bfddb704b5fd7ba546d574103ad01192072d2a 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 @@ -20,6 +20,7 @@ import javafx.scene.control.SelectionMode; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeTableColumn; import javafx.scene.control.TreeTableView; +import javafx.scene.control.TreeTableView.TreeTableViewSelectionModel; /** * A JavaFX {@link TreeTableView} based on an {@link DynamicTreeContentProviderBase}, @@ -51,7 +52,14 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> { view.setRoot(rootItem); view.setShowRoot(showRoot); view.setEditable(true); - view.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); + TreeTableViewSelectionModel<T> selectionModel = view.getSelectionModel(); + selectionModel.setSelectionMode(SelectionMode.MULTIPLE); + selectionModel.selectedItemProperty().addListener((obs, oVal, nVal) -> { + T ov = (oVal != null) ? oVal.getValue() : null; + T nv = (nVal != null) ? nVal.getValue() : null; + uiProvider.select(ov, nv); + }); + rootItem.update(); // expand to reveal (+1 if root node is not shown expandItem(rootItem, showRoot ? revealLevel : revealLevel + 1); diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings index 317b3d9754be195f71802784f3a9c211bc8e8479..7c74914a3ad8f3296c0f3b51b2d10ee78c818bb5 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings @@ -4,9 +4,9 @@ EObjectActionBase.java 4ef9f8be59e64d4838acc9e268d418ba5d94fa1a GREEN EReferenceListPropertySectionBase.java 7390dd7bfdc979e8ff0c5c30c67ab7b6c9d70c92 GREEN EReferencePropertySectionBase.java 0548da6778516003257f59d0b4c2b60d458be3b6 GREEN EditorBase.java 9c09fff92945256bb8680992ae7bb2c78f47b150 GREEN -FXEditorBase.java 2e520be0bbae7d0aebdff70218a124dbe0896ce2 GREEN +FXEditorBase.java 545085c3270f09d69b609f328792e904ebda23ff YELLOW IListPropertySection.java 8bb00fe7959583e794ff9437b7a77404c9a9e70f GREEN -LWFXEFEditorBase.java 2bd06235f20c18dc2e7d433700b2ad74a16664e2 GREEN +LWFXEFEditorBase.java 3a6df817142f5edf2bf45b58df9a9626be6c0c4d YELLOW ModelEditorBindingBase.java c258cb0ea28d74440856cd2abf367408fbbc1279 GREEN ModelElementHandlerBase.java d08583ffdf78938a14caeb46124eda4ce5cac3e4 YELLOW MultiEObjectActionBase.java 9e237d8ea640c4194e4877af4a9cfce88698e543 GREEN diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/FXEditorBase.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/FXEditorBase.java index 2e520be0bbae7d0aebdff70218a124dbe0896ce2..545085c3270f09d69b609f328792e904ebda23ff 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/FXEditorBase.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/FXEditorBase.java @@ -15,7 +15,15 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.extension.base; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.emf.ecore.EObject; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -28,15 +36,50 @@ import javafx.scene.Scene; * * @author hoelzlf */ -public abstract class FXEditorBase<T extends EObject> extends EditorBase<T> { +public abstract class FXEditorBase<T extends EObject> extends EditorBase<T> + implements ISelectionProvider { + /** The list of {@link ISelectionChangedListener}s. */ + private final List<ISelectionChangedListener> selectionListeners = new ArrayList<>(); + /** {@inheritDoc} */ @Override public final void createPartControl(Composite parent) { FXCanvas canvas = new FXCanvas(parent, SWT.NONE); Scene scene = new Scene(createSceneRoot()); canvas.setScene(scene); + + getSite().setSelectionProvider(this); } /** Creates the root node of the scene. */ protected abstract Parent createSceneRoot(); + + /** {@inheritDoc} */ + @Override + public final void addSelectionChangedListener(ISelectionChangedListener listener) { + if(!selectionListeners.contains(listener)) { + selectionListeners.add(listener); + } + } + + /** {@inheritDoc} */ + @Override + public final void removeSelectionChangedListener(ISelectionChangedListener listener) { + selectionListeners.remove(listener); + } + + /** {@inheritDoc} */ + @Override + public final void setSelection(ISelection selection) { + SelectionChangedEvent evt = new SelectionChangedEvent(this, selection); + for(ISelectionChangedListener scl : selectionListeners) { + scl.selectionChanged(evt); + } + } + + /** {@inheritDoc} */ + @Override + public ISelection getSelection() { + return StructuredSelection.EMPTY; + } } diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/LWFXEFEditorBase.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/LWFXEFEditorBase.java index 2bd06235f20c18dc2e7d433700b2ad74a16664e2..3a6df817142f5edf2bf45b58df9a9626be6c0c4d 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/LWFXEFEditorBase.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/LWFXEFEditorBase.java @@ -23,10 +23,7 @@ import java.util.Objects; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.DiagramViewer; import org.eclipse.systemfocus.kernel.common.ui.javafx.lwfxef.DiagramViewerSelection; @@ -51,12 +48,9 @@ import javafx.scene.Parent; * @author hoelzl * @author diewald */ -public abstract class LWFXEFEditorBase<T extends EObject> extends FXEditorBase<T> - implements ISelectionProvider { +public abstract class LWFXEFEditorBase<T extends EObject> extends FXEditorBase<T> { /** The diagram viewer. */ protected DiagramViewer viewer; - /** The list of {@link ISelectionChangedListener}s. */ - private final List<ISelectionChangedListener> selectionListeners = new ArrayList<>(); /** References the delegating {@link IModelFactory} of this JavaFX {@link IEditorPart}. */ private IModelFactory delegatingModelFactory; @@ -75,7 +69,6 @@ public abstract class LWFXEFEditorBase<T extends EObject> extends FXEditorBase<T viewer = new DiagramViewer(delegatingModelFactory, delegatingVisualFactory, delegatingControllerFactory, cb -> modelSelected(), chg -> applyModelChange(chg)); customizeViewer(); - getSite().setSelectionProvider(this); return viewer.getVisualNode(); } @@ -117,29 +110,6 @@ public abstract class LWFXEFEditorBase<T extends EObject> extends FXEditorBase<T ICommandStackService.getInstance().runAsCommand(editedObject, () -> chg.applyChange()); } - /** {@inheritDoc} */ - @Override - public void addSelectionChangedListener(ISelectionChangedListener listener) { - if(!selectionListeners.contains(listener)) { - selectionListeners.add(listener); - } - } - - /** {@inheritDoc} */ - @Override - public void removeSelectionChangedListener(ISelectionChangedListener listener) { - selectionListeners.remove(listener); - } - - /** {@inheritDoc} */ - @Override - public void setSelection(ISelection selection) { - SelectionChangedEvent evt = new SelectionChangedEvent(this, selection); - for(ISelectionChangedListener scl : selectionListeners) { - scl.selectionChanged(evt); - } - } - /** {@inheritDoc} */ @Override public ISelection getSelection() {