X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.ui%2Fsrc%2Forg%2Fsimantics%2Fui%2Fcontribution%2FOpenWithMenuContribution.java;h=f09dd23ce286ec0a4ae1eb6d97f8aefb9b843099;hb=fc46fdacc6f9da6f026d92e8db0d59cb1192a251;hp=2f46ddb5fe3125bbf3005e3e137b2d31b5c70d1d;hpb=1ca7c5aad9e845ca9969ea37c7d4bef54e94b9e2;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/contribution/OpenWithMenuContribution.java b/bundles/org.simantics.ui/src/org/simantics/ui/contribution/OpenWithMenuContribution.java index 2f46ddb5f..f09dd23ce 100644 --- a/bundles/org.simantics.ui/src/org/simantics/ui/contribution/OpenWithMenuContribution.java +++ b/bundles/org.simantics.ui/src/org/simantics/ui/contribution/OpenWithMenuContribution.java @@ -11,9 +11,15 @@ *******************************************************************************/ package org.simantics.ui.contribution; +import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; +import java.util.Hashtable; +import java.util.List; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.resource.ImageDescriptor; @@ -33,21 +39,44 @@ import org.simantics.ui.workbench.action.ResourceEditorAdapterAction; import org.simantics.ui.workbench.editor.EditorAdapter; import org.simantics.ui.workbench.editor.EditorRegistry; import org.simantics.utils.strings.AlphanumComparator; +import org.simantics.utils.ui.workbench.WorkbenchUtils; /** * @author Tuukka Lehtonen */ -public class OpenWithMenuContribution extends DynamicMenuContribution { +public class OpenWithMenuContribution extends DynamicMenuContribution implements IExecutableExtension{ private static final boolean DEBUG_ADAPTERS = false; private ResourceManager resourceManager; + private String editorId = null; public OpenWithMenuContribution() { resourceManager = new LocalResourceManager(JFaceResources.getResources()); } - + + @Override + public void setInitializationData(IConfigurationElement config, String propertyName, Object data) + throws CoreException { + if ("class".equals(propertyName)) { + if (data instanceof String) { + setEditorId((String)data); + } else if (data instanceof Hashtable) { + @SuppressWarnings("unchecked") + Hashtable params = (Hashtable)data; + setEditorId(params.get("editorId")); + } + if ("activeEditorId".equals(this.editorId)) { + setEditorId(WorkbenchUtils.getActiveWorkbenchPart().getSite().getId()); + } + } + } + + public void setEditorId(String editorId) { + this.editorId = editorId; + } + @Override public void dispose() { if (resourceManager != null) { @@ -76,10 +105,12 @@ public class OpenWithMenuContribution extends DynamicMenuContribution { final Object r = extractResource(graph, selection[0]); if (r == null) return NONE; - final EditorAdapter[] editorAdapters = EditorRegistry.getInstance().getAdaptersFor(graph, r); + EditorAdapter[] _editorAdapters = EditorRegistry.getInstance().getAdaptersFor(graph, r); + final EditorAdapter[] editorAdapters = filter(_editorAdapters, editorId); if (editorAdapters.length == 0) return NONE; + return new IContributionItem[] { new ContributionItem() { @Override @@ -112,6 +143,18 @@ public class OpenWithMenuContribution extends DynamicMenuContribution { } }; } + + protected EditorAdapter[] filter(EditorAdapter[] adapters, String id) { + if (id == null) + return adapters; + List editorAdapters = new ArrayList(); + for (EditorAdapter a : adapters) { + if (id.equals(a.getEditorId())) + continue; + editorAdapters.add(a); + } + return editorAdapters.toArray(new EditorAdapter[editorAdapters.size()]); + } private void addMenuItem(Menu subMenu, Adapter adapter, Object r) { MenuItem item = new MenuItem(subMenu, SWT.PUSH);