]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/ConnectionNode.java
128b0df90f931d871846dc71faf42d32cb57de2f
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / nodes / ConnectionNode.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.scenegraph.g2d.nodes;\r
13 \r
14 import java.awt.Color;\r
15 import java.awt.Composite;\r
16 import java.awt.Stroke;\r
17 \r
18 import org.simantics.scenegraph.INode;\r
19 import org.simantics.scenegraph.g2d.IG2DNode;\r
20 import org.simantics.scenegraph.g2d.nodes.connection.RouteGraphNode;\r
21 import org.simantics.scenegraph.utils.InitValueSupport;\r
22 import org.simantics.scenegraph.utils.NodeUtil;\r
23 import org.simantics.scenegraph.utils.NodeUtil.NodeProcedure;\r
24 \r
25 /**\r
26  * @author Tuukka Lehtonen\r
27  */\r
28 public class ConnectionNode extends SingleElementNode implements InitValueSupport {\r
29 \r
30     private static final long serialVersionUID = 8657421058765967521L;\r
31 \r
32     private static class SetAlphaCompositeProcedure implements NodeProcedure<Object> {\r
33         public Composite composite;\r
34         @Override\r
35         public Object execute(INode node, String id) {\r
36             if (node instanceof EdgeNode)\r
37                 ((EdgeNode) node).setAlphaComposite(composite);\r
38 //          NodeUtil.setPropertyIfSupported("alpha", alphaComposite, edge);\r
39             return null;\r
40         }\r
41     };\r
42 \r
43     private static class SetDynamicStrokeProcedure implements NodeProcedure<Object> {\r
44         public Stroke stroke;\r
45         @Override\r
46         public Object execute(INode node, String id) {\r
47             if (node instanceof EdgeNode)\r
48                 ((EdgeNode) node).setDynamicStroke(stroke);\r
49             else if (node instanceof RouteGraphNode)\r
50                 ((RouteGraphNode) node).setDynamicStroke(stroke);\r
51 //          NodeUtil.setPropertyIfSupported("width", stroke, edge);\r
52             return null;\r
53         }\r
54     };\r
55 \r
56     private static class SetDynamicColorProcedure implements NodeProcedure<Object> {\r
57         public Color color;\r
58         @Override\r
59         public Object execute(INode node, String id) {\r
60             if (node instanceof EdgeNode)\r
61                 ((EdgeNode) node).setDynamicColor(color);\r
62             else if (node instanceof RouteGraphNode)\r
63                 ((RouteGraphNode) node).setDynamicColor(color);\r
64 //          NodeUtil.setPropertyIfSupported("color", color, edge);\r
65             return null;\r
66         }\r
67     };\r
68 \r
69 //    private static class SetValueProcedure implements NodeProcedure<Object> {\r
70 //        public String key;\r
71 //        public Object value;\r
72 //        @Override\r
73 //        public Object execute(INode node, String id) {\r
74 //            NodeUtil.setPropertyIfSupported(key, value, node);\r
75 ////            edge.setValue(key, value);\r
76 //            return null;\r
77 //        }\r
78 //    };\r
79 \r
80     private static final SetAlphaCompositeProcedure setAlphaCompositeProcedure = new SetAlphaCompositeProcedure();\r
81     private static final SetDynamicStrokeProcedure  setDynamicStrokeProcedure  = new SetDynamicStrokeProcedure();\r
82     private static final SetDynamicColorProcedure   setDynamicColorProcedure   = new SetDynamicColorProcedure();\r
83 \r
84     private static NodeProcedure<?> initValuesProcedure = new NodeProcedure<Object>() {\r
85         @Override\r
86         public Object execute(INode node, String id) {\r
87             if (node instanceof InitValueSupport)\r
88                 ((InitValueSupport) node).initValues();\r
89             return null;\r
90         }\r
91     };\r
92 \r
93     @PropertySetter("alpha")\r
94     public void setAlphaComposite(Composite alphaComposite) {\r
95         setAlphaCompositeProcedure.composite = alphaComposite;\r
96         forEdges(this, setAlphaCompositeProcedure);\r
97     }\r
98     \r
99     @PropertySetter("width")\r
100     public void setDynamicStroke(Stroke stroke) {\r
101         setDynamicStrokeProcedure.stroke = stroke;\r
102         forEdges(this, setDynamicStrokeProcedure);\r
103     }\r
104 \r
105     @PropertySetter("color")\r
106     public void setDynamicColor(Color color) {\r
107         setDynamicColorProcedure.color = color;\r
108         forEdges(this, setDynamicColorProcedure);\r
109     }\r
110 \r
111     @Override\r
112     public void initValues() {\r
113         NodeUtil.forChildren(this, initValuesProcedure, null);\r
114     }\r
115 \r
116     private void forEdges(SingleElementNode node, NodeProcedure<?> procedure) {\r
117         for (String childId : node.getSortedNodesById()) {\r
118             IG2DNode child = node.getNode(childId);\r
119             if (child instanceof SingleElementNode) {\r
120                 forEdges((SingleElementNode) child, procedure);\r
121             } else if (child instanceof EdgeNode) {\r
122                 procedure.execute(child, childId);\r
123             } else if (child instanceof RouteGraphNode) {\r
124                 procedure.execute(child, childId);\r
125             }\r
126         }\r
127     }\r
128 \r
129 }\r