Supply SVG text editor with element measurement context 67/1067/3
authorAntti Villberg <antti.villberg@semantum.fi>
Mon, 2 Oct 2017 13:38:46 +0000 (16:38 +0300)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Mon, 2 Oct 2017 18:54:10 +0000 (21:54 +0300)
refs #7520

Change-Id: Iea98f28077efb628fee588df4d8cab64906add30

bundles/org.simantics.diagram/scl/Simantics/Diagram/SVGNode.scl
bundles/org.simantics.diagram/src/org/simantics/diagram/elements/EditorStateManager.java
bundles/org.simantics.diagram/src/org/simantics/diagram/elements/SVGMeasurementContext.java
bundles/org.simantics.diagram/src/org/simantics/diagram/elements/SVGNode.java

index 9c5d43c4f37028b1cc7e160915eb5a76b3ce4d4b..25aa798b1bac82d1b126879245cd84f43f5a824d 100644 (file)
@@ -4,6 +4,7 @@ type BoundingBox = (Double,Double,Double,Double)
 importJava "org.simantics.diagram.elements.SVGMeasurementContext" where
   data SVGMeasurementContext
   getBoundingBox :: SVGMeasurementContext -> String -> <Proc> Maybe BoundingBox
+  modifyText :: SVGMeasurementContext -> String -> String -> <Proc> ()
 
 getBoundingBoxX :: BoundingBox -> Double
 getBoundingBoxX (x,_,_,_) = x
index 1223d8eaffe74fe606d0461d7b122676622736c2..bc01793cd29c1634bb51678aec11b73d8d857d07 100644 (file)
@@ -53,6 +53,7 @@ class EditorStateManager {
                public SVGMeasurementContextImpl(SVGNode node) {
                        this.node = node;
                }
+
                @Override
                public Tuple4 getBoundingBox(String id) {
                        try {
@@ -63,6 +64,11 @@ class EditorStateManager {
                                return null;
                        }
                }
+
+               @Override
+               public void modifyText(String id, String newText) {
+                       node.modifyTextElement(id, newText);
+               }
        }
 
        EditorStateManager(SVGNode node) {
index 19175a83314ca8e34d98f5b186418053ae61398f..70030a561ded7e0d73cc061200850f51159a10f8 100644 (file)
@@ -19,4 +19,5 @@ import org.simantics.scl.runtime.tuple.Tuple4;
  */
 public interface SVGMeasurementContext {
     Tuple4 getBoundingBox(String id);
+    void modifyText(String id, String newText);
 }
index bccba4aa769ad96ebcc47080187846e4e3f2db22..4d654791925080230f51a9b525cc777a1f7760d7 100644 (file)
@@ -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;
@@ -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);
+        }
+    }
+
 }