--- /dev/null
+/*******************************************************************************\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.scenegraph.g2d.nodes;\r
+\r
+import java.awt.Color;\r
+import java.awt.Composite;\r
+import java.awt.Stroke;\r
+\r
+import org.simantics.scenegraph.INode;\r
+import org.simantics.scenegraph.g2d.IG2DNode;\r
+import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode;\r
+import org.simantics.scenegraph.utils.InitValueSupport;\r
+import org.simantics.scenegraph.utils.NodeUtil;\r
+import org.simantics.scenegraph.utils.NodeUtil.NodeProcedure;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class ConnectionNode extends SingleElementNode implements InitValueSupport {\r
+\r
+ private static final long serialVersionUID = 8657421058765967521L;\r
+\r
+ private static class SetAlphaCompositeProcedure implements NodeProcedure<Object> {\r
+ public Composite composite;\r
+ @Override\r
+ public Object execute(INode node, String id) {\r
+ if (node instanceof EdgeNode)\r
+ ((EdgeNode) node).setAlphaComposite(composite);\r
+// NodeUtil.setPropertyIfSupported("alpha", alphaComposite, edge);\r
+ return null;\r
+ }\r
+ };\r
+\r
+ private static class SetDynamicStrokeProcedure implements NodeProcedure<Object> {\r
+ public Stroke stroke;\r
+ @Override\r
+ public Object execute(INode node, String id) {\r
+ if (node instanceof EdgeNode)\r
+ ((EdgeNode) node).setDynamicStroke(stroke);\r
+ else if (node instanceof RouteGraphNode)\r
+ ((RouteGraphNode) node).setDynamicStroke(stroke);\r
+// NodeUtil.setPropertyIfSupported("width", stroke, edge);\r
+ return null;\r
+ }\r
+ };\r
+\r
+ private static class SetDynamicColorProcedure implements NodeProcedure<Object> {\r
+ public Color color;\r
+ @Override\r
+ public Object execute(INode node, String id) {\r
+ if (node instanceof EdgeNode)\r
+ ((EdgeNode) node).setDynamicColor(color);\r
+ else if (node instanceof RouteGraphNode)\r
+ ((RouteGraphNode) node).setDynamicColor(color);\r
+// NodeUtil.setPropertyIfSupported("color", color, edge);\r
+ return null;\r
+ }\r
+ };\r
+\r
+// private static class SetValueProcedure implements NodeProcedure<Object> {\r
+// public String key;\r
+// public Object value;\r
+// @Override\r
+// public Object execute(INode node, String id) {\r
+// NodeUtil.setPropertyIfSupported(key, value, node);\r
+//// edge.setValue(key, value);\r
+// return null;\r
+// }\r
+// };\r
+\r
+ private static final SetAlphaCompositeProcedure setAlphaCompositeProcedure = new SetAlphaCompositeProcedure();\r
+ private static final SetDynamicStrokeProcedure setDynamicStrokeProcedure = new SetDynamicStrokeProcedure();\r
+ private static final SetDynamicColorProcedure setDynamicColorProcedure = new SetDynamicColorProcedure();\r
+\r
+ private static NodeProcedure<?> initValuesProcedure = new NodeProcedure<Object>() {\r
+ @Override\r
+ public Object execute(INode node, String id) {\r
+ if (node instanceof InitValueSupport)\r
+ ((InitValueSupport) node).initValues();\r
+ return null;\r
+ }\r
+ };\r
+\r
+ @PropertySetter("alpha")\r
+ public void setAlphaComposite(Composite alphaComposite) {\r
+ setAlphaCompositeProcedure.composite = alphaComposite;\r
+ forEdges(this, setAlphaCompositeProcedure);\r
+ }\r
+ \r
+ @PropertySetter("width")\r
+ public void setDynamicStroke(Stroke stroke) {\r
+ setDynamicStrokeProcedure.stroke = stroke;\r
+ forEdges(this, setDynamicStrokeProcedure);\r
+ }\r
+\r
+ @PropertySetter("color")\r
+ public void setDynamicColor(Color color) {\r
+ setDynamicColorProcedure.color = color;\r
+ forEdges(this, setDynamicColorProcedure);\r
+ }\r
+\r
+ @Override\r
+ public void initValues() {\r
+ NodeUtil.forChildren(this, initValuesProcedure, null);\r
+ }\r
+\r
+ private void forEdges(SingleElementNode node, NodeProcedure<?> procedure) {\r
+ for (String childId : node.getSortedNodesById()) {\r
+ IG2DNode child = node.getNode(childId);\r
+ if (child instanceof SingleElementNode) {\r
+ forEdges((SingleElementNode) child, procedure);\r
+ } else if (child instanceof EdgeNode) {\r
+ procedure.execute(child, childId);\r
+ } else if (child instanceof RouteGraphNode) {\r
+ procedure.execute(child, childId);\r
+ }\r
+ }\r
+ }\r
+\r
+}\r