]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/element/handler/impl/ConfigurableEdgeVisuals.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / element / handler / impl / ConfigurableEdgeVisuals.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.element.handler.impl;\r
13 \r
14 import java.awt.BasicStroke;\r
15 import java.awt.Stroke;\r
16 \r
17 import org.simantics.g2d.diagram.IDiagram;\r
18 import org.simantics.g2d.element.ElementHints;\r
19 import org.simantics.g2d.element.IElement;\r
20 import org.simantics.g2d.element.handler.EdgeVisuals;\r
21 import org.simantics.g2d.element.handler.LifeCycle;\r
22 \r
23 /**\r
24  * This implementation is for edges whose visual properties can be modified.\r
25  * \r
26  * @author Toni Kalajainen\r
27  */\r
28 public class ConfigurableEdgeVisuals implements EdgeVisuals, LifeCycle {\r
29 \r
30     private static final long serialVersionUID = -8662807810086649742L;\r
31 \r
32     public static final Stroke DEFAULT_STROKE =\r
33         new BasicStroke(0.15f,\r
34                 BasicStroke.CAP_BUTT,\r
35                 BasicStroke.JOIN_ROUND,\r
36                 10.0f, null, 0.0f);\r
37 \r
38     public static final ConfigurableEdgeVisuals DEFAULT =\r
39         new ConfigurableEdgeVisuals(ArrowType.None, ArrowType.Fill, DEFAULT_STROKE, 1.0, 1.0);\r
40 \r
41     ArrowType beginArrow, endArrow;\r
42     public Stroke stroke;\r
43     public StrokeType strokeType;\r
44     double beginArrowSize, endArrowSize;\r
45 \r
46     public ConfigurableEdgeVisuals()\r
47     {\r
48         this.beginArrow = ArrowType.Stroke;\r
49         this.endArrow = ArrowType.Stroke;\r
50         this.stroke = DEFAULT_STROKE;\r
51         this.strokeType = StrokeType.Relative;\r
52         beginArrowSize = 1;\r
53         endArrowSize = 1;\r
54     }\r
55 \r
56     public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, double beginArrowSize, double endArrowSize)\r
57     {\r
58         this.beginArrow = initialBeginArrow;\r
59         this.endArrow = initialEndArrow;\r
60         this.stroke = initialStroke;\r
61         this.strokeType = StrokeType.Relative;\r
62         this.beginArrowSize = beginArrowSize;\r
63         this.endArrowSize = endArrowSize;\r
64     }\r
65 \r
66     public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, StrokeType initialStrokeType, double beginArrowSize, double endArrowSize)\r
67     {\r
68         this.beginArrow = initialBeginArrow;\r
69         this.endArrow = initialEndArrow;\r
70         this.stroke = initialStroke;\r
71         this.strokeType = initialStrokeType;\r
72         this.beginArrowSize = beginArrowSize;\r
73         this.endArrowSize = endArrowSize;\r
74     }\r
75 \r
76     @Override\r
77     public ArrowType getArrowType(IElement e, EdgeEnd end) {\r
78         if (end == EdgeEnd.Begin)\r
79             return e.getHint(ElementHints.KEY_BEGIN_ARROW);\r
80         if (end == EdgeEnd.End)\r
81             return e.getHint(ElementHints.KEY_END_ARROW);\r
82         return null;\r
83     }\r
84 \r
85     @Override\r
86     public StrokeType getStrokeType(IElement e) {\r
87         return e.getHint(ElementHints.KEY_EDGE_STROKE_TYPE);\r
88     }\r
89 \r
90     @Override\r
91     public Stroke getStroke(IElement e) {\r
92         return e.getHint(ElementHints.KEY_EDGE_STROKE);\r
93     }\r
94 \r
95     @Override\r
96     public void setArrowType(IElement e, EdgeEnd end, ArrowType arrowType) {\r
97         if (end == EdgeEnd.Begin)\r
98             e.setHint(ElementHints.KEY_BEGIN_ARROW, arrowType);\r
99         if (end == EdgeEnd.End)\r
100             e.setHint(ElementHints.KEY_END_ARROW, arrowType);\r
101     }\r
102 \r
103     @Override\r
104     public void setStrokeType(IElement e, StrokeType strokeType) {\r
105         e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);\r
106     }\r
107 \r
108     @Override\r
109     public void setStroke(IElement e, Stroke s) {\r
110         e.setHint(ElementHints.KEY_EDGE_STROKE, s);\r
111     }\r
112 \r
113     @Override\r
114     public void onElementActivated(IDiagram d, IElement e) {\r
115     }\r
116 \r
117     @Override\r
118     public void onElementCreated(IElement e) {\r
119         e.setHint(ElementHints.KEY_BEGIN_ARROW, beginArrow);\r
120         e.setHint(ElementHints.KEY_END_ARROW, endArrow);\r
121         e.setHint(ElementHints.KEY_EDGE_STROKE, stroke);\r
122         e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);\r
123         e.setHint(ElementHints.KEY_BEGIN_ARROW_SIZE, beginArrowSize);\r
124         e.setHint(ElementHints.KEY_END_ARROW_SIZE, endArrowSize);\r
125     }\r
126 \r
127     @Override\r
128     public void onElementDeactivated(IDiagram d, IElement e) {\r
129     }\r
130 \r
131     @Override\r
132     public void onElementDestroyed(IElement e) {\r
133     }\r
134 \r
135     @Override\r
136     public double getArrowSize(IElement e, EdgeEnd end) {\r
137         if (end==EdgeEnd.Begin)\r
138             return e.getHint(ElementHints.KEY_BEGIN_ARROW_SIZE);\r
139         else\r
140             if (end==EdgeEnd.End)\r
141                 return e.getHint(ElementHints.KEY_END_ARROW_SIZE);\r
142         return 0;\r
143     }\r
144 \r
145     @Override\r
146     public void setArrowSize(IElement e, EdgeEnd end, double size) {\r
147         if (end==EdgeEnd.Begin)\r
148             e.setHint(ElementHints.KEY_BEGIN_ARROW_SIZE, size);\r
149         else\r
150             if (end==EdgeEnd.End)\r
151                 e.setHint(ElementHints.KEY_END_ARROW_SIZE, size);\r
152     }\r
153 \r
154 }\r