X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Felements%2FSVGNode.java;h=0b1ee8b0dd98964833473b3cd93936c8f0806bde;hp=8084c2a41fcef9e6e2c8a235719cf648e381f24b;hb=19fa38f6cd07e0917e5f25e009a90617ce431488;hpb=e030dd5359ab50cf88fc891af61b6cf43c01f86f diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/SVGNode.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/SVGNode.java index 8084c2a41..0b1ee8b0d 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/SVGNode.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/SVGNode.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * Copyright (c) 2007, 2017 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -28,13 +28,19 @@ import org.simantics.scenegraph.g2d.events.command.CommandEvent; import org.simantics.scenegraph.g2d.nodes.SVGNodeAssignment; import org.simantics.scenegraph.g2d.nodes.SingleElementNode; import org.simantics.scenegraph.utils.NodeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGException; +import com.kitfox.svg.Text; +import com.kitfox.svg.Tspan; @RasterOutputWidget public class SVGNode extends org.simantics.scenegraph.g2d.nodes.SVGNode { + private static final Logger LOGGER = LoggerFactory.getLogger(SVGNode.class); + private static final long serialVersionUID = 4735066193941274186L; transient EditorStateManager esm = null; @@ -51,12 +57,14 @@ public class SVGNode extends org.simantics.scenegraph.g2d.nodes.SVGNode { public void render(Graphics2D g2d) { if (!parametersProcessed) { SingleElementNode sne = getSingleElementNode(); - Boolean enableEditing = sne.getParameter("enableEditing"); - if (enableEditing != null && enableEditing) { - esm = new EditorStateManager(this); - addEventHandler(this); + if (sne != null) { + Boolean enableEditing = sne.getParameter("enableEditing"); + if (enableEditing != null && enableEditing) { + esm = new EditorStateManager(this); + addEventHandler(this); + } + parametersProcessed = true; } - parametersProcessed = true; } super.render(g2d); @@ -76,7 +84,9 @@ public class SVGNode extends org.simantics.scenegraph.g2d.nodes.SVGNode { } private boolean isSelected(IG2DNode node) { - ICanvasContext ctx = DiagramNodeUtil.getCanvasContext(this); + ICanvasContext ctx = DiagramNodeUtil.getPossibleCanvasContext(this); + if (ctx == null) + return false; IElement ie = DiagramNodeUtil.getElement(ctx, node); if (ie == null) return false; @@ -119,11 +129,7 @@ public class SVGNode extends org.simantics.scenegraph.g2d.nodes.SVGNode { } SingleElementNode getSingleElementNode() { - ICanvasContext ctx = DiagramNodeUtil.getCanvasContext(this); - // FIXME: needed only because eventdelegator registrations are done before adding node to scene graph. - if (ctx == null) - return null; - return (SingleElementNode)NodeUtil.getNearestParentOfType(this, SingleElementNode.class); + return (SingleElementNode)NodeUtil.getPossibleNearestParentOfType(this, SingleElementNode.class); } @Override @@ -150,4 +156,22 @@ public class SVGNode extends org.simantics.scenegraph.g2d.nodes.SVGNode { return EventTypes.KeyPressedMask | EventTypes.MouseClickMask | EventTypes.CommandMask; } + public void modifyTextElement(String id, String newText) { + Text text = (Text) diagramCache.getElement(id); + + EditorState es = new EditorState(); + es.base = new EditorStateStatic(); + es.base.textElementId = text.getId(); + + Tspan span = (Tspan)text.getContent().get(0); + + try { + span.setText(newText); + text.rebuild(); + diagramCache.updateTime(0); + } catch (SVGException e) { + LOGGER.error("Failed to update text span element " + id + " with text " + newText, e); + } + } + }