Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Faltermeier2016-09-06 08:39:55 +0000
committerJohannes Faltermeier2016-09-06 11:03:18 +0000
commitbf9252cf31eaabf668145b6ad184e6d0d6138e54 (patch)
treed5d57ecdc0789edf245033797de6330cba08199e
parent9e34917b469ed1c076925ceeb464f265d89e63ef (diff)
downloadorg.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>
-rw-r--r--bundles/org.eclipse.emfforms.editor.ecore/src/org/eclipse/emfforms/internal/editor/ecore/actions/CreateNewInstanceAction.java26
-rw-r--r--bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters43
-rw-r--r--bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/TreeMasterDetailMenuListener.java11
-rw-r--r--bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/MasterDetailAction.java20
-rw-r--r--bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/actions/delegating/DelegatingMasterDetailAction.java11
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&lt;Object&gt;)"/>
+ </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&lt;Object&gt;)"/>
+ </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();
}

Back to the top