]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/participant/DiagramParticipant.java
G2DParentNode handles "undefined" child bounds separately
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / diagram / participant / DiagramParticipant.java
index c1064da8847868186028d0aeed444736fd6a4504..e94be41da7b7a6661a44d2863d254d49ec354c77 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.g2d.diagram.participant;\r
-\r
-import java.util.Map;\r
-\r
-import org.simantics.g2d.diagram.IDiagram;\r
-import org.simantics.g2d.diagram.IDiagram.CompositionListener;\r
-import org.simantics.g2d.diagram.handler.CanvasListener;\r
-import org.simantics.g2d.element.IElement;\r
-import org.simantics.utils.datastructures.hints.HintContext;\r
-import org.simantics.utils.datastructures.hints.IHintContext;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-\r
-/**\r
- * DiagramParticipant sends events to CanvasMonitors (=diagram handler)\r
- * \r
- * DiagramParticipant must be added to canvas context before diagram is set.\r
- * \r
- * @author Toni Kalajainen\r
- */\r
-public class DiagramParticipant extends AbstractDiagramParticipant {\r
-\r
-    IHintContext ctx = new HintContext();\r
-\r
-    /**\r
-     * Diagram composition listener\r
-     */\r
-    CompositionListener listener = new CompositionListener() {\r
-        @Override\r
-        public void onElementAdded(IDiagram d, IElement e) {\r
-\r
-        }\r
-        @Override\r
-        public void onElementRemoved(IDiagram d, IElement e) {\r
-            // TODO Remove element variables...  somehow efficiently\r
-        }\r
-    };\r
-\r
-    @Override\r
-    protected void onDiagramSet(IDiagram newDiagram, IDiagram oldDiagram) {\r
-        if (clazz==null) return;\r
-        for (CanvasListener cm : clazz.getItemsByClass(CanvasListener.class))\r
-            cm.onAddedToCanvas(newDiagram, getContext());\r
-\r
-        if (newDiagram==null)\r
-            for (Key key : ctx.getHints().keySet())\r
-                ctx.removeHint(key);\r
-\r
-        if (oldDiagram!=null) oldDiagram.removeCompositionListener(listener);\r
-        if (newDiagram!=null) newDiagram.addCompositionListener(listener);\r
-    }\r
-\r
-    public void setElementHint(IElement e, Key key, Object value)\r
-    {\r
-        Key elementCtxKey = new ElementCtxKey(e);\r
-        IHintContext elementCtx = ctx.getHint(elementCtxKey);\r
-        if (elementCtx==null) {\r
-            elementCtx = new HintContext();\r
-            ctx.setHint(elementCtxKey, elementCtx);\r
-        }\r
-        elementCtx.setHint(key, value);\r
-    }\r
-\r
-    public <E> E getElementHint(IElement e, Key key)\r
-    {\r
-        Key elementCtxKey = new ElementCtxKey(e);\r
-        IHintContext elementCtx = ctx.getHint(elementCtxKey);\r
-        if (elementCtx==null) return null;\r
-        return elementCtx.getHint(key);\r
-    }\r
-\r
-    public Map<Key, Object> getElementHints(IElement e)\r
-    {\r
-        Key elementCtxKey = new ElementCtxKey(e);\r
-        IHintContext elementCtx = ctx.getHint(elementCtxKey);\r
-        if (elementCtx==null) return null;\r
-        return elementCtx.getHints();\r
-    }\r
-\r
-    public <E> E removeElementHint(IElement e, Key key)\r
-    {\r
-        Key elementCtxKey = new ElementCtxKey(e);\r
-        IHintContext elementCtx = ctx.getHint(elementCtxKey);\r
-        if (elementCtx==null) return null;\r
-        return elementCtx.removeHint(key);\r
-    }\r
-\r
-    public void setDiagramHint(IDiagram d, Key key, Object value)\r
-    {\r
-        ctx.setHint(key, value);\r
-    }\r
-\r
-    public <E> E removeDiagramHint(IDiagram d, Key key)\r
-    {\r
-        return ctx.removeHint(key);\r
-    }\r
-\r
-    @SuppressWarnings("unused")\r
-    private class DiagramKey extends Key {\r
-        public final IDiagram d;\r
-        private final int hash;\r
-        public final Key key;\r
-\r
-        public DiagramKey(IDiagram d, Key key)\r
-        {\r
-            super();\r
-            assert(key!=null);\r
-            this.key = key;\r
-            this.d = d;\r
-            this.hash = key.hashCode() ^ d.hashCode();\r
-        }\r
-        @Override\r
-        public int hashCode() {\r
-            return hash;\r
-        }\r
-        @Override\r
-        public boolean equals(Object obj) {\r
-            if (!(obj instanceof DiagramKey)) return false;\r
-            DiagramKey other = (DiagramKey) obj;\r
-            if (other.key.equals(key)) return false;\r
-            if (other.d != d) return false;\r
-            return true;\r
-        }\r
-        @Override\r
-        public boolean isValueAccepted(Object value) {\r
-            return key.isValueAccepted(value);\r
-        }\r
-\r
-    }\r
-\r
-    private class ElementKey extends Key {\r
-        public final IElement e;\r
-        private final int hash;\r
-        public final Key key;\r
-\r
-        public ElementKey(IElement e, Key key)\r
-        {\r
-            super();\r
-            assert(key!=null);\r
-            this.key = key;\r
-            this.e = e;\r
-            this.hash = key.hashCode() ^ e.hashCode();\r
-        }\r
-        @Override\r
-        public int hashCode() {\r
-            return hash;\r
-        }\r
-        @Override\r
-        public boolean equals(Object obj) {\r
-            if (!(obj instanceof ElementKey)) return false;\r
-            ElementKey other = (ElementKey) obj;\r
-            if (other.e != e) return false;\r
-            if (!other.key.equals(key)) return false;\r
-            return true;\r
-        }\r
-        @Override\r
-        public boolean isValueAccepted(Object value) {\r
-            return key.isValueAccepted(value);\r
-        }\r
-    }\r
-\r
-    private class ElementCtxKey extends Key {\r
-        public final IElement e;\r
-\r
-        public ElementCtxKey(IElement e)\r
-        {\r
-            super();\r
-            this.e = e;\r
-        }\r
-        @Override\r
-        public int hashCode() {\r
-            return e.hashCode();\r
-        }\r
-        @Override\r
-        public boolean equals(Object obj) {\r
-            if (!(obj instanceof ElementCtxKey)) return false;\r
-            ElementCtxKey other = (ElementCtxKey) obj;\r
-            return other.e == e;\r
-        }\r
-        @Override\r
-        public boolean isValueAccepted(Object value) {\r
-            return value instanceof IHintContext;\r
-        }\r
-    }\r
-\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 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:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g2d.diagram.participant;
+
+import java.util.Map;
+
+import org.simantics.g2d.diagram.IDiagram;
+import org.simantics.g2d.diagram.IDiagram.CompositionListener;
+import org.simantics.g2d.diagram.handler.CanvasListener;
+import org.simantics.g2d.element.IElement;
+import org.simantics.utils.datastructures.hints.HintContext;
+import org.simantics.utils.datastructures.hints.IHintContext;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+
+/**
+ * DiagramParticipant sends events to CanvasMonitors (=diagram handler)
+ * 
+ * DiagramParticipant must be added to canvas context before diagram is set.
+ * 
+ * @author Toni Kalajainen
+ */
+public class DiagramParticipant extends AbstractDiagramParticipant {
+
+    IHintContext ctx = new HintContext();
+
+    /**
+     * Diagram composition listener
+     */
+    CompositionListener listener = new CompositionListener() {
+        @Override
+        public void onElementAdded(IDiagram d, IElement e) {
+
+        }
+        @Override
+        public void onElementRemoved(IDiagram d, IElement e) {
+            // TODO Remove element variables...  somehow efficiently
+        }
+    };
+
+    @Override
+    protected void onDiagramSet(IDiagram newDiagram, IDiagram oldDiagram) {
+        if (clazz==null) return;
+        for (CanvasListener cm : clazz.getItemsByClass(CanvasListener.class))
+            cm.onAddedToCanvas(newDiagram, getContext());
+
+        if (newDiagram==null)
+            for (Key key : ctx.getHints().keySet())
+                ctx.removeHint(key);
+
+        if (oldDiagram!=null) oldDiagram.removeCompositionListener(listener);
+        if (newDiagram!=null) newDiagram.addCompositionListener(listener);
+    }
+
+    public void setElementHint(IElement e, Key key, Object value)
+    {
+        Key elementCtxKey = new ElementCtxKey(e);
+        IHintContext elementCtx = ctx.getHint(elementCtxKey);
+        if (elementCtx==null) {
+            elementCtx = new HintContext();
+            ctx.setHint(elementCtxKey, elementCtx);
+        }
+        elementCtx.setHint(key, value);
+    }
+
+    public <E> E getElementHint(IElement e, Key key)
+    {
+        Key elementCtxKey = new ElementCtxKey(e);
+        IHintContext elementCtx = ctx.getHint(elementCtxKey);
+        if (elementCtx==null) return null;
+        return elementCtx.getHint(key);
+    }
+
+    public Map<Key, Object> getElementHints(IElement e)
+    {
+        Key elementCtxKey = new ElementCtxKey(e);
+        IHintContext elementCtx = ctx.getHint(elementCtxKey);
+        if (elementCtx==null) return null;
+        return elementCtx.getHints();
+    }
+
+    public <E> E removeElementHint(IElement e, Key key)
+    {
+        Key elementCtxKey = new ElementCtxKey(e);
+        IHintContext elementCtx = ctx.getHint(elementCtxKey);
+        if (elementCtx==null) return null;
+        return elementCtx.removeHint(key);
+    }
+
+    public void setDiagramHint(IDiagram d, Key key, Object value)
+    {
+        ctx.setHint(key, value);
+    }
+
+    public <E> E removeDiagramHint(IDiagram d, Key key)
+    {
+        return ctx.removeHint(key);
+    }
+
+    @SuppressWarnings("unused")
+    private class DiagramKey extends Key {
+        public final IDiagram d;
+        private final int hash;
+        public final Key key;
+
+        public DiagramKey(IDiagram d, Key key)
+        {
+            super();
+            assert(key!=null);
+            this.key = key;
+            this.d = d;
+            this.hash = key.hashCode() ^ d.hashCode();
+        }
+        @Override
+        public int hashCode() {
+            return hash;
+        }
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof DiagramKey)) return false;
+            DiagramKey other = (DiagramKey) obj;
+            if (other.key.equals(key)) return false;
+            if (other.d != d) return false;
+            return true;
+        }
+        @Override
+        public boolean isValueAccepted(Object value) {
+            return key.isValueAccepted(value);
+        }
+
+    }
+
+    private class ElementKey extends Key {
+        public final IElement e;
+        private final int hash;
+        public final Key key;
+
+        public ElementKey(IElement e, Key key)
+        {
+            super();
+            assert(key!=null);
+            this.key = key;
+            this.e = e;
+            this.hash = key.hashCode() ^ e.hashCode();
+        }
+        @Override
+        public int hashCode() {
+            return hash;
+        }
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof ElementKey)) return false;
+            ElementKey other = (ElementKey) obj;
+            if (other.e != e) return false;
+            if (!other.key.equals(key)) return false;
+            return true;
+        }
+        @Override
+        public boolean isValueAccepted(Object value) {
+            return key.isValueAccepted(value);
+        }
+    }
+
+    private class ElementCtxKey extends Key {
+        public final IElement e;
+
+        public ElementCtxKey(IElement e)
+        {
+            super();
+            this.e = e;
+        }
+        @Override
+        public int hashCode() {
+            return e.hashCode();
+        }
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof ElementCtxKey)) return false;
+            ElementCtxKey other = (ElementCtxKey) obj;
+            return other.e == e;
+        }
+        @Override
+        public boolean isValueAccepted(Object value) {
+            return value instanceof IHintContext;
+        }
+    }
+
+
+}