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=c8a88f27dff64315f7d67ae52a6f34daba3fbf91;hb=refs%2Fchanges%2F48%2F4548%2F1;hp=4112d905134e5b9319a86e8db55a1f14a7112f6c;hpb=c26409b1caf2f1e560d37c5befd11b442399c3fe;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 4112d9051..c8a88f27d 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,48 @@ 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; + protected 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 String getEditorId() { + return editorId; + } + + public void setEditorId(String editorId) { + this.editorId = editorId; + } + @Override public void dispose() { if (resourceManager != null) { @@ -58,48 +91,43 @@ public class OpenWithMenuContribution extends DynamicMenuContribution { } protected Object extractResource(ReadGraph graph, Object object) throws DatabaseException { - Resource resource = WorkbenchSelectionUtils.getPossibleResource(object); - //Resource resource = ResourceAdaptionUtils.adaptToResource(graph, object); - if(resource != null) return resource; - else return object; + Resource resource = WorkbenchSelectionUtils.getPossibleResourceFromSelection(graph, object); + return resource != null ? resource : object; } - + @Override protected boolean preAcceptSelection(Object[] selection) { return selection.length == 1; } + protected String getText() { + return "Open With"; + } + @Override protected IContributionItem[] getContributionItems(ReadGraph graph, Object[] selection) throws DatabaseException { final Object r = extractResource(graph, selection[0]); - final EditorAdapter[] editorAdapters = EditorRegistry.getInstance().getAdaptersFor(graph, r); + if (r == null) + return NONE; + 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 public void fill(Menu menu, int index) { MenuItem openWith = new MenuItem(menu, SWT.CASCADE, index); - openWith.setText("Open With"); + openWith.setText(getText()); openWith.setEnabled(editorAdapters.length > 0); Menu subMenu = new Menu(menu); openWith.setMenu(subMenu); if (editorAdapters.length > 0) { // Sort the open with actions in descending priority order. - Adapter[] adapters = new Adapter[editorAdapters.length]; - for (int i = 0; i < editorAdapters.length; i++) - adapters[i] = new Adapter(editorAdapters[i], r, true); - Arrays.sort(adapters, new Comparator() { - @Override - public int compare(Adapter o1, Adapter o2) { - int delta = o2.getPriority() - o1.getPriority(); - if (delta != 0) - return delta; - return AlphanumComparator.CASE_INSENSITIVE_COMPARATOR.compare(o1.getText(), o2.getText()); - } - }); + Adapter[] adapters = toAdapters(editorAdapters, r); for (Adapter a : adapters) addMenuItem(subMenu, a, r); @@ -108,6 +136,34 @@ public class OpenWithMenuContribution extends DynamicMenuContribution { } }; } + + protected Adapter[] toAdapters(EditorAdapter[] editorAdapters, Object r) { + Adapter[] adapters = new Adapter[editorAdapters.length]; + for (int i = 0; i < editorAdapters.length; i++) + adapters[i] = new Adapter(editorAdapters[i], r, true); + Arrays.sort(adapters, new Comparator() { + @Override + public int compare(Adapter o1, Adapter o2) { + int delta = o2.getPriority() - o1.getPriority(); + if (delta != 0) + return delta; + return AlphanumComparator.CASE_INSENSITIVE_COMPARATOR.compare(o1.getText(), o2.getText()); + } + }); + return adapters; + } + + 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); @@ -123,7 +179,7 @@ public class OpenWithMenuContribution extends DynamicMenuContribution { item.addSelectionListener(adapter); } - static class Adapter extends ResourceEditorAdapterAction implements SelectionListener { + protected static class Adapter extends ResourceEditorAdapterAction implements SelectionListener { boolean remember; public Adapter(EditorAdapter adapter, Object r, boolean remember) {