X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2Factions%2Fe4%2FImportSVGPNG.java;h=e21e67455639fd2ff3b0e23f2d602edae7f23074;hp=931bfdf3d60d073c0b63c271dbda2c163f060c41;hb=47269fe0acb894f346810417d950a1ab59cdc0ea;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07 diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/e4/ImportSVGPNG.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/e4/ImportSVGPNG.java index 931bfdf3d..e21e67455 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/e4/ImportSVGPNG.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/e4/ImportSVGPNG.java @@ -28,6 +28,7 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor; import org.eclipse.ui.part.MultiPageEditorPart; +import org.simantics.Simantics; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -36,13 +37,17 @@ import org.simantics.db.common.request.IndexRoot; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.request.Read; +import org.simantics.diagram.synchronization.IModifiableSynchronizationContext; +import org.simantics.diagram.synchronization.SynchronizationHints; +import org.simantics.diagram.synchronization.graph.GraphSynchronizationHints; +import org.simantics.diagram.synchronization.graph.layer.GraphLayerManager; import org.simantics.g2d.canvas.ICanvasContext; +import org.simantics.g2d.diagram.IDiagram; import org.simantics.g2d.participant.MouseUtil; import org.simantics.g2d.participant.MouseUtil.MouseInfo; import org.simantics.modeling.ModelingResources; import org.simantics.scl.commands.Commands; import org.simantics.structural.stubs.StructuralResource2; -import org.simantics.ui.SimanticsUI; import org.simantics.ui.workbench.IResourceEditorInput; import org.simantics.ui.workbench.ResourceEditorInput; import org.simantics.utils.FileUtils; @@ -73,7 +78,7 @@ public class ImportSVGPNG { final ResourceArray ra = in.getResourceArray(); ResourceArray symbolEditorInput; try { - symbolEditorInput = SimanticsUI.getSession().syncRequest(new Read() { + symbolEditorInput = Simantics.getSession().syncRequest(new Read() { @Override public ResourceArray perform(ReadGraph graph) throws DatabaseException { StructuralResource2 sr = StructuralResource2.getInstance(graph); @@ -85,9 +90,9 @@ public class ImportSVGPNG { } }); - IEditorPart[] eps = rfe.findEditors(new ResourceEditorInput("org.simantics.modeling.ui.symbolEditor", symbolEditorInput)); + IEditorPart[] eps = rfe.findEditors(new ResourceEditorInput("org.simantics.modeling.ui.symbolEditor", symbolEditorInput)); //$NON-NLS-1$ if (eps.length == 0) { - System.out.println("symbol editor part not found from multi page editor part: " + ap); + System.out.println("symbol editor part not found from multi page editor part: " + ap); //$NON-NLS-1$ return; } viewer = eps[0]; @@ -100,28 +105,30 @@ public class ImportSVGPNG { } ICanvasContext ctx = (ICanvasContext) viewer.getAdapter(ICanvasContext.class); if (ctx == null) { - System.out.println("No canvas context"); + System.out.println("No canvas context"); //$NON-NLS-1$ return; } MouseInfo minfo = ctx.getSingleItem(MouseUtil.class).getMousePressedInfo(0); if(minfo == null) { - System.out.println("No mouse info"); + System.out.println("No mouse info"); //$NON-NLS-1$ return; } final Point2D mpos = minfo.canvasPosition; IResourceEditorInput input = (IResourceEditorInput)viewer.getEditorInput(); Resource composite = input.getResource(); - addSVG(mpos.getX(), mpos.getY(), composite); + IDiagram idiagram = viewer.getAdapter(IDiagram.class); + + addSVG(mpos.getX(), mpos.getY(), composite, idiagram); } - public static void addSVG(final double mposX, final double mposY, final Resource composite) { + public static void addSVG(final double mposX, final double mposY, final Resource composite, IDiagram idiagram) { Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); FileDialog dialog = new FileDialog(shell); - dialog.setText("Choose an image to be imported"); - dialog.setFilterExtensions(new String[] {"*.svg", "*.png"}); + dialog.setText(Messages.ImportSVGPNG_ChooseImportImage); + dialog.setFilterExtensions(new String[] {"*.svg", "*.png"}); //$NON-NLS-1$ //$NON-NLS-2$ final String filename = dialog.open(); if(filename == null) @@ -131,13 +138,24 @@ public class ImportSVGPNG { try { final byte[] data = FileUtils.readFile(file); - SimanticsUI.getSession().asyncRequest(new WriteRequest() { + Simantics.getSession().asyncRequest(new WriteRequest() { @Override public void perform(WriteGraph g) throws DatabaseException { - Commands.get(g, "Simantics/Diagram/createSVGElement") + Object svg = Commands.get(g, "Simantics/Diagram/createSVGElementR") //$NON-NLS-1$ .execute(g, g.syncRequest(new IndexRoot(composite)), composite, suffix(filename), data, mposX, mposY); + + if (svg != null && svg instanceof Resource) { + Resource resource = (Resource) svg; + // 7. Put the element on all the currently active layers if possible. + IModifiableSynchronizationContext context = idiagram.getHint(SynchronizationHints.CONTEXT); + GraphLayerManager glm = context.get(GraphSynchronizationHints.GRAPH_LAYER_MANAGER); + if (glm != null) { + glm.removeFromAllLayers(g, resource); + glm.putElementOnVisibleLayers(idiagram, g, resource); + } + } } });