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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.g2d.element.handler.impl;
\r
14 import java.awt.BasicStroke;
\r
15 import java.awt.Stroke;
\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
24 * This implementation is for edges whose visual properties can be modified.
\r
26 * @author Toni Kalajainen
\r
28 public class ConfigurableEdgeVisuals implements EdgeVisuals, LifeCycle {
\r
30 private static final long serialVersionUID = -8662807810086649742L;
\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
38 public static final ConfigurableEdgeVisuals DEFAULT =
\r
39 new ConfigurableEdgeVisuals(ArrowType.None, ArrowType.Fill, DEFAULT_STROKE, 1.0, 1.0);
\r
41 ArrowType beginArrow, endArrow;
\r
42 public Stroke stroke;
\r
43 public StrokeType strokeType;
\r
44 double beginArrowSize, endArrowSize;
\r
46 public ConfigurableEdgeVisuals()
\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
56 public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, double beginArrowSize, double endArrowSize)
\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
66 public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, StrokeType initialStrokeType, double beginArrowSize, double endArrowSize)
\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
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
86 public StrokeType getStrokeType(IElement e) {
\r
87 return e.getHint(ElementHints.KEY_EDGE_STROKE_TYPE);
\r
91 public Stroke getStroke(IElement e) {
\r
92 return e.getHint(ElementHints.KEY_EDGE_STROKE);
\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
104 public void setStrokeType(IElement e, StrokeType strokeType) {
\r
105 e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);
\r
109 public void setStroke(IElement e, Stroke s) {
\r
110 e.setHint(ElementHints.KEY_EDGE_STROKE, s);
\r
114 public void onElementActivated(IDiagram d, IElement e) {
\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
128 public void onElementDeactivated(IDiagram d, IElement e) {
\r
132 public void onElementDestroyed(IElement e) {
\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
140 if (end==EdgeEnd.End)
\r
141 return e.getHint(ElementHints.KEY_END_ARROW_SIZE);
\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
150 if (end==EdgeEnd.End)
\r
151 e.setHint(ElementHints.KEY_END_ARROW_SIZE, size);
\r