X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2FdiagramEditor%2FOpenDiagramFromConfigurationAdapter.java;h=c446d1c3c057f15409192b182d3dba45d6c6c668;hb=b45e9e5c1696a2e729dcecac0f58d16c15391770;hp=8c052561e2340ed051d5989836742d0684083e0f;hpb=236aa4e765e0acd6e31cbc42dd9df9c2c23677e2;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/OpenDiagramFromConfigurationAdapter.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/OpenDiagramFromConfigurationAdapter.java index 8c052561e..c446d1c3c 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/OpenDiagramFromConfigurationAdapter.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/OpenDiagramFromConfigurationAdapter.java @@ -13,6 +13,8 @@ package org.simantics.modeling.ui.diagramEditor; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import org.eclipse.ui.PlatformUI; import org.simantics.Simantics; @@ -30,6 +32,7 @@ import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.diagram.DiagramHints; import org.simantics.layer0.Layer0; import org.simantics.modeling.ComponentUtils; +import org.simantics.modeling.ModelingResources; import org.simantics.modeling.actions.NavigateToTarget; import org.simantics.modeling.ui.Activator; import org.simantics.structural.stubs.StructuralResource2; @@ -48,8 +51,13 @@ public class OpenDiagramFromConfigurationAdapter extends AbstractResourceEditorA super(Messages.OpenDiagramFromConfigurationAdapter_DiagramEditor, Activator.COMPOSITE_ICON); } - protected String getEditorId() { - return EDITOR_ID; + protected String getEditorId(ReadGraph g, Resource composite) throws DatabaseException { + ModelingResources MOD = ModelingResources.getInstance(g); + String preferredEditorId = g.getPossibleRelatedValue(composite, MOD.PreferredDiagramEditorID); + if(preferredEditorId != null) + return preferredEditorId; + else + return EDITOR_ID; } @Override @@ -78,7 +86,7 @@ public class OpenDiagramFromConfigurationAdapter extends AbstractResourceEditorA Simantics.getSession().asyncRequest(new ReadRequest() { @Override public void run(ReadGraph g) throws DatabaseException { - openEditor(g, r, getEditorId()); + openEditor(g, r, getEditorId(g, r)); } }); } @@ -103,16 +111,21 @@ public class OpenDiagramFromConfigurationAdapter extends AbstractResourceEditorA Resource diagram = ComponentUtils.getPossibleCompositeDiagram(graph, r); if(diagram != null) return diagram; - if(selectedObjects.size() == 1) { - Object o = selectedObjects.iterator().next(); - if(o instanceof Resource) { - Resource res = (Resource)o; - if(graph.isInstanceOf(res, DIA.Element)) { - return graph.getPossibleObject(res, L0.PartOf); - } - } + // TODO: what if the selected objects are from different diagrams? + if (selectedObjects.size() > 0) { + Set diagrams = new HashSet<>(); + for (Object o : selectedObjects) { + if (o instanceof Resource) { + Resource res = (Resource)o; + if (graph.isInstanceOf(res, DIA.Element)) { + diagrams.add(graph.getPossibleObject(res, L0.PartOf)); + } + } + } + if (diagrams.size() == 1) { + return diagrams.iterator().next(); + } } - return null; }