diff options
author | Johannes Faltermeier | 2016-09-06 08:39:55 +0000 |
---|---|---|
committer | Johannes Faltermeier | 2016-09-06 11:03:18 +0000 |
commit | bf9252cf31eaabf668145b6ad184e6d0d6138e54 (patch) | |
tree | d5d57ecdc0789edf245033797de6330cba08199e | |
parent | 9e34917b469ed1c076925ceeb464f265d89e63ef (diff) | |
download | org.eclipse.emf.ecp.core-bf9252cf31eaabf668145b6ad184e6d0d6138e54.tar.gz org.eclipse.emf.ecp.core-bf9252cf31eaabf668145b6ad184e6d0d6138e54.tar.xz org.eclipse.emf.ecp.core-bf9252cf31eaabf668145b6ad184e6d0d6138e54.zip |
Bug 500895 - MasterDetailAction should be useable for multi-selection
* change Master Detail Action methods to work with a list of objects
instead of EObjects
* adapted existing code accordingly
Change-Id: I128f4a9e2269e8ec72cc09e0c089493bc4f81e8c
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
5 files changed, 79 insertions, 32 deletions
diff --git a/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/actions/CreateNewInstanceAction.java b/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/actions/CreateNewInstanceAction.java index f6f98d7212..a8be86919f 100644 --- a/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/actions/CreateNewInstanceAction.java +++ b/bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/actions/CreateNewInstanceAction.java @@ -11,6 +11,8 @@ ******************************************************************************/ package org.eclipse.emfforms.internal.editor.ecore.actions; +import java.util.List; + import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IStatus; @@ -42,33 +44,23 @@ public class CreateNewInstanceAction extends MasterDetailAction { setImagePath(ICON_PATH); } - /** - * {@inheritDoc} - * - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { return null; } - /** - * {@inheritDoc} - * - * @see org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction#shouldShow(org.eclipse.emf.ecore.EObject) - */ @Override - public boolean shouldShow(EObject eObject) { + public boolean shouldShow(List<Object> objects) { + if (objects.size() != 1 && !EObject.class.isInstance(objects.get(0))) { + return false; + } + final EObject eObject = EObject.class.cast(objects.get(0)); return EClass.class.isInstance(eObject); } - /** - * {@inheritDoc} - * - * @see org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction#execute(org.eclipse.emf.ecore.EObject) - */ @Override - public void execute(EObject object) { + public void execute(List<Object> objects) { + final EObject object = EObject.class.cast(objects.get(0)); final EClass eClass = EClass.class.cast(object); final Diagnostic validate = Diagnostician.INSTANCE.validate(eClass); if (validate.getSeverity() == Diagnostic.OK) { diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters b/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters index e03463c8eb..ddcd56921a 100644 --- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters +++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters @@ -79,6 +79,49 @@ </message_arguments> </filter> </resource> + <resource path="src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java"> + <filter id="0"/> + </resource> + <resource path="src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java" type="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction"> + <filter comment="SPI Change 1.10.0" id="336695337"> + <message_arguments> + <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction"/> + <message_argument value="execute(List<Object>)"/> + </message_arguments> + </filter> + <filter comment="SPI Change 1.10.0" id="336695337"> + <message_arguments> + <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction"/> + <message_argument value="shouldShow(List<Object>)"/> + </message_arguments> + </filter> + <filter comment="SPI Change 1.10.0" id="338792546"> + <message_arguments> + <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction"/> + <message_argument value="execute(EObject)"/> + </message_arguments> + </filter> + <filter comment="SPI Change 1.10.0" id="338792546"> + <message_arguments> + <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction"/> + <message_argument value="shouldShow(EObject)"/> + </message_arguments> + </filter> + </resource> + <resource path="src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/delegating/DelegatingMasterDetailAction.java" type="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.delegating.DelegatingMasterDetailAction"> + <filter comment="SPI Change 1.10.0" id="338792546"> + <message_arguments> + <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.delegating.DelegatingMasterDetailAction"/> + <message_argument value="execute(EObject)"/> + </message_arguments> + </filter> + <filter comment="SPI Change 1.10.0" id="338792546"> + <message_arguments> + <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.actions.delegating.DelegatingMasterDetailAction"/> + <message_argument value="shouldShow(EObject)"/> + </message_arguments> + </filter> + </resource> <resource path="src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateChildAction.java" type="org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateChildAction"> <filter comment="This is SPI" id="576720909"> <message_arguments> diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/TreeMasterDetailMenuListener.java b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/TreeMasterDetailMenuListener.java index ff90560459..1a35365004 100644 --- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/TreeMasterDetailMenuListener.java +++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/TreeMasterDetailMenuListener.java @@ -12,6 +12,7 @@ ******************************************************************************/ package org.eclipse.emfforms.spi.swt.treemasterdetail; +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -113,17 +114,19 @@ public class TreeMasterDetailMenuListener implements IMenuListener { manager.add(new Separator()); addDeleteActionToContextMenu(editingDomain, menuMgr, selection); - if (selection.getFirstElement() instanceof EObject && rightClickActions != null) { - final EObject eSelectedObject = (EObject) selection.getFirstElement(); + if (rightClickActions != null) { + // JFACE API + @SuppressWarnings("unchecked") + final List<Object> list = new ArrayList<Object>(selection.toList()); for (final MasterDetailAction menuAction : rightClickActions) { - if (menuAction.shouldShow(eSelectedObject)) { + if (menuAction.shouldShow(list)) { menuAction.setTreeViewer(treeViewer); final Action newAction = new Action() { @Override public void run() { super.run(); - menuAction.execute(eSelectedObject); + menuAction.execute(list); } }; diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java index 627876e9e9..9ddca7867b 100644 --- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java +++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java @@ -8,15 +8,21 @@ * * Contributors: * Alexandra Buzila - initial API and implementation + * Johannes Faltermeier - Bug 500895 ******************************************************************************/ package org.eclipse.emfforms.spi.swt.treemasterdetail.actions; +import java.util.List; + import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.TreeViewer; /** + * A MasterDetailAction may be added to the context menu of a + * {@link org.eclipse.emfforms.spi.swt.treemasterdetail.TreeMasterDetailComposite TreeMasterDetailComposite}. + * * @author Alexandra Buzila + * @author Johannes Faltermeier * @since 1.8 * */ @@ -25,15 +31,17 @@ public abstract class MasterDetailAction extends AbstractHandler { private TreeViewer treeviewer; /** - * @param eObject the {@link EObject} on which to test if the action can be executed - * @return <b>true</b> if the action can be executed on the parameter {@code eObject} + * @param objects the list of objects on which to test if the action can be executed + * @return <b>true</b> if the action can be executed on the parameter + * @since 1.10 */ - public abstract boolean shouldShow(EObject eObject); + public abstract boolean shouldShow(List<Object> objects); /** - * @param object The {@link EObject} on which the action is executed + * @param objects The list of objects on which the action is executed + * @since 1.10 **/ - public abstract void execute(EObject object); + public abstract void execute(List<Object> objects); /** * @return the label of the action diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/delegating/DelegatingMasterDetailAction.java b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/delegating/DelegatingMasterDetailAction.java index c2e6509f47..40f111137e 100644 --- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/delegating/DelegatingMasterDetailAction.java +++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/delegating/DelegatingMasterDetailAction.java @@ -11,9 +11,10 @@ ******************************************************************************/ package org.eclipse.emfforms.spi.swt.treemasterdetail.actions.delegating; +import java.util.List; + import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emfforms.spi.swt.treemasterdetail.actions.KeybindedMasterDetailAction; import org.eclipse.jface.viewers.ISelection; @@ -85,8 +86,8 @@ public abstract class DelegatingMasterDetailAction extends KeybindedMasterDetail } @Override - public void execute(EObject object) { - final IStructuredSelection selection = new StructuredSelection(object); + public void execute(List<Object> objects) { + final IStructuredSelection selection = new StructuredSelection(objects); delegatedAction.selectionChanged(selection); if (delegatedAction.isEnabled()) { delegatedAction.run(); @@ -94,8 +95,8 @@ public abstract class DelegatingMasterDetailAction extends KeybindedMasterDetail } @Override - public boolean shouldShow(EObject eObject) { - final IStructuredSelection selection = new StructuredSelection(eObject); + public boolean shouldShow(List<Object> objects) { + final IStructuredSelection selection = new StructuredSelection(objects); delegatedAction.selectionChanged(selection); return delegatedAction.isEnabled(); } |