]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/elementclass/slider/SliderClass.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / elementclass / slider / SliderClass.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.g2d.elementclass.slider;\r
13 \r
14 import java.awt.geom.Line2D;\r
15 import java.awt.geom.Rectangle2D;\r
16 \r
17 import org.simantics.g2d.diagram.IDiagram;\r
18 import org.simantics.g2d.element.ElementClass;\r
19 import org.simantics.g2d.element.ElementUtils;\r
20 import org.simantics.g2d.element.IElement;\r
21 import org.simantics.g2d.element.SceneGraphNodeKey;\r
22 import org.simantics.g2d.element.handler.LifeCycle;\r
23 import org.simantics.g2d.element.handler.SceneGraph;\r
24 import org.simantics.g2d.element.handler.Stateful;\r
25 import org.simantics.g2d.element.handler.impl.DefaultTransform;\r
26 import org.simantics.g2d.element.handler.impl.Resizeable;\r
27 import org.simantics.scenegraph.Node;\r
28 import org.simantics.scenegraph.g2d.G2DParentNode;\r
29 import org.simantics.scenegraph.g2d.nodes.ShapeNode;\r
30 import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
31 \r
32 /**\r
33  * @author Toni Kalajainen\r
34  */\r
35 public class SliderClass {\r
36 \r
37         static final SliderInit INITIAL_VALUES = new SliderInit();\r
38 \r
39         public static final NarrowTrackPaint NARROW_TRACK = new NarrowTrackPaint(); \r
40         public static final WideTrackPaint WIDE_TRACK = new WideTrackPaint(); \r
41                 \r
42         public static final ElementClass SLIDER = \r
43                 ElementClass.compile(\r
44                                 DefaultTransform.INSTANCE,\r
45                         new Resizeable(new Rectangle2D.Double(0,0,100, 15), new Rectangle2D.Double(0,0,20, 8), null, null),\r
46                                 NARROW_TRACK,\r
47                                 SliderHandle.INSTANCE,\r
48                                 INITIAL_VALUES,\r
49                                 Stateful.ENABLED_BY_DEFAULT\r
50                 );      \r
51         public static final ElementClass SLIDER2 = \r
52                 ElementClass.compile(\r
53                                 DefaultTransform.INSTANCE,\r
54                         new Resizeable(new Rectangle2D.Double(0,0,100, 15), new Rectangle2D.Double(0,0,20, 8), null, null),\r
55                                 WIDE_TRACK,\r
56                                 SliderHandle.INSTANCE,\r
57                                 INITIAL_VALUES,\r
58                                 Stateful.ENABLED_BY_DEFAULT                             \r
59                 );      \r
60 \r
61         static class SliderInit implements LifeCycle {\r
62         private static final long serialVersionUID = -5228742711389712263L;\r
63         @Override\r
64                 public void onElementCreated(IElement e) {\r
65                         e.setHint(SliderHandle.KEY_SLIDER_COLOR_PROFILE, SliderColorProfile.DEFAULT);\r
66                         e.setHint(SliderHandle.KEY_SLIDER_POSITION, 1.0);\r
67                         e.setHint(SliderHandle.KEY_SLIDER_MIN_VALUE, 0.0);\r
68                         e.setHint(SliderHandle.KEY_SLIDER_MAX_VALUE, 3.0);                      \r
69                 }\r
70                 @Override\r
71                 public void onElementActivated(IDiagram d, IElement e) {}\r
72                 @Override\r
73                 public void onElementDestroyed(IElement e) {}\r
74                 @Override\r
75                 public void onElementDeactivated(IDiagram d, IElement e) {}             \r
76         }\r
77         \r
78         static class NarrowTrackPaint implements SceneGraph {\r
79         private static final long serialVersionUID = -598729166071503815L;\r
80         public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
81             \r
82                 @Override\r
83                 public void cleanup(IElement e) {\r
84                Node node = e.removeHint(SG_NODE);\r
85                if (node != null)\r
86                    node.remove();\r
87                 }\r
88 \r
89                 @Override\r
90                 public void init(IElement e, G2DParentNode parent) {\r
91                         G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
92                         if (node == null) {\r
93                                 node = parent.addNode(G2DParentNode.class);\r
94                         e.setHint(SG_NODE, node);\r
95                         }\r
96                         \r
97                         SliderColorProfile colors = e.getHint(SliderHandle.KEY_SLIDER_COLOR_PROFILE);\r
98                         \r
99                         Rectangle2D rect = ElementUtils.getElementBounds(e);\r
100                         double height = rect.getHeight() / 4;\r
101                         double width = rect.getWidth();\r
102                         Rectangle2D r = new Rectangle2D.Double(0, height, width, height*2);\r
103                         \r
104                         ShapeNode track1 = node.getOrCreateNode("track1", ShapeNode.class);\r
105                         ShapeNode track2 = node.getOrCreateNode("track2", ShapeNode.class);\r
106                         ShapeNode track2b = node.getOrCreateNode("track2b", ShapeNode.class);\r
107                         ShapeNode track3 = node.getOrCreateNode("track3", ShapeNode.class);\r
108 \r
109                         track3.setColor(colors.TRACK3);\r
110                         track3.setFill(true);\r
111                         track3.setShape(r);\r
112                         track3.setZIndex(1);\r
113                         \r
114                         track1.setColor(colors.TRACK1);\r
115                         track1.setShape(r);\r
116                         track1.setZIndex(2);\r
117                         \r
118                         track2.setColor(colors.TRACK2);\r
119                         track2.setShape(new Line2D.Double(1, height+1, 1, height*3-1));\r
120                         track2.setZIndex(3);\r
121                         \r
122                         track2b.setColor(colors.TRACK2);\r
123                         track2b.setShape(new Line2D.Double(1, height+1, width-1, height+1));\r
124                         track2b.setZIndex(4);\r
125                 }\r
126         }\r
127         \r
128         static class WideTrackPaint implements SceneGraph {\r
129         private static final long serialVersionUID = -6644140765437819526L;\r
130         public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
131 \r
132                 @Override\r
133                 public void cleanup(IElement e) {\r
134                Node node = e.removeHint(SG_NODE);\r
135                if (node != null)\r
136                    node.remove();\r
137                 }\r
138 \r
139                 @Override\r
140                 public void init(IElement e, G2DParentNode parent) {\r
141                         G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
142                         if (node == null) {\r
143                                 node = parent.addNode(G2DParentNode.class);\r
144                         e.setHint(SG_NODE, node);\r
145                         }\r
146                         \r
147                         SliderColorProfile colors = e.getHint(SliderHandle.KEY_SLIDER_COLOR_PROFILE);\r
148                         Rectangle2D rect = ElementUtils.getElementBounds(e);\r
149                         \r
150                         double height = rect.getHeight();\r
151                         double width = rect.getWidth();\r
152                         Rectangle2D r = new Rectangle2D.Double(0, 0, width, height);\r
153                         \r
154                         ShapeNode track1 = node.getOrCreateNode("track1", ShapeNode.class);\r
155                         ShapeNode track2 = node.getOrCreateNode("track2", ShapeNode.class);\r
156                         ShapeNode track2b = node.getOrCreateNode("track2b", ShapeNode.class);\r
157                         ShapeNode track3 = node.getOrCreateNode("track3", ShapeNode.class);\r
158 \r
159                         track3.setColor(colors.TRACK3);\r
160                         track3.setFill(true);\r
161                         track3.setShape(r);\r
162                         track3.setZIndex(1);\r
163                         \r
164                         track1.setColor(colors.TRACK1);\r
165                         track1.setShape(r);\r
166                         track1.setZIndex(2);\r
167                         \r
168                         track2.setColor(colors.TRACK2);\r
169                         track2.setShape(new Line2D.Double(1, 1, 1, height-1));\r
170                         track2.setZIndex(3);\r
171                         \r
172                         track2b.setColor(colors.TRACK2);\r
173                         track2b.setShape(new Line2D.Double(1, height-1, width-1, height-1));\r
174                         track2b.setZIndex(4);\r
175                 }\r
176         }       \r
177         \r
178 }\r