]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/elements/EditorStateManager.java
Supply SVG text editor with element measurement context
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / elements / EditorStateManager.java
index 5c59177cccf4f1c3a8088ff08690adf79c5c7ac7..1223d8eaffe74fe606d0461d7b122676622736c2 100644 (file)
@@ -1,3 +1,14 @@
+/*******************************************************************************
+ * Copyright (c) 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
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Semantum Oy - initial API and implementation
+ *******************************************************************************/
 package org.simantics.diagram.elements;
 
 import java.awt.geom.Point2D;
@@ -13,7 +24,8 @@ import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent;
 import org.simantics.scenegraph.g2d.nodes.SingleElementNode;
 import org.simantics.scl.runtime.function.Function1;
-import org.simantics.scl.runtime.function.Function2;
+import org.simantics.scl.runtime.function.Function3;
+import org.simantics.scl.runtime.tuple.Tuple4;
 
 import com.kitfox.svg.SVGDiagram;
 import com.kitfox.svg.SVGElement;
@@ -36,6 +48,23 @@ class EditorStateManager {
        private LinkedList<EditorState> editorState = null;
        private int editorStateIndex = 0;
 
+       static class SVGMeasurementContextImpl implements SVGMeasurementContext {
+               private SVGNode node;
+               public SVGMeasurementContextImpl(SVGNode node) {
+                       this.node = node;
+               }
+               @Override
+               public Tuple4 getBoundingBox(String id) {
+                       try {
+                               Rectangle2D rect = node.getElementBounds(id);
+                               if(rect == null) return null;
+                               return new Tuple4(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
+                       } catch (SVGException e) {
+                               return null;
+                       }
+               }
+       }
+
        EditorStateManager(SVGNode node) {
                this.node = node;
        }
@@ -119,9 +148,9 @@ class EditorStateManager {
                SingleElementNode sne = node.getSingleElementNode();
                if (sne != null) {
                        EditorState es = currentState();
-                       Function2<String,String,Object> editor = sne.getParameter("textEditor");
+                       Function3<SVGMeasurementContext,String,String,Object> editor = sne.getParameter("textEditor");
                        if(editor != null) {
-                               editor.apply(es.base.textElementId, es.currentText);
+                               editor.apply(new SVGMeasurementContextImpl(node), es.base.textElementId, es.currentText);
                        }
                }
        }