1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.g2d.element.handler.impl;
14 import java.awt.BasicStroke;
15 import java.awt.Stroke;
17 import org.simantics.g2d.diagram.IDiagram;
18 import org.simantics.g2d.element.ElementHints;
19 import org.simantics.g2d.element.IElement;
20 import org.simantics.g2d.element.handler.EdgeVisuals;
21 import org.simantics.g2d.element.handler.LifeCycle;
24 * This implementation is for edges whose visual properties can be modified.
26 * @author Toni Kalajainen
28 public class ConfigurableEdgeVisuals implements EdgeVisuals, LifeCycle {
30 private static final long serialVersionUID = -8662807810086649742L;
32 public static final Stroke DEFAULT_STROKE =
33 new BasicStroke(0.15f,
35 BasicStroke.JOIN_ROUND,
38 public static final ConfigurableEdgeVisuals DEFAULT =
39 new ConfigurableEdgeVisuals(ArrowType.None, ArrowType.Fill, DEFAULT_STROKE, 1.0, 1.0);
41 ArrowType beginArrow, endArrow;
43 public StrokeType strokeType;
44 double beginArrowSize, endArrowSize;
46 public ConfigurableEdgeVisuals()
48 this.beginArrow = ArrowType.Stroke;
49 this.endArrow = ArrowType.Stroke;
50 this.stroke = DEFAULT_STROKE;
51 this.strokeType = StrokeType.Relative;
56 public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, double beginArrowSize, double endArrowSize)
58 this.beginArrow = initialBeginArrow;
59 this.endArrow = initialEndArrow;
60 this.stroke = initialStroke;
61 this.strokeType = StrokeType.Relative;
62 this.beginArrowSize = beginArrowSize;
63 this.endArrowSize = endArrowSize;
66 public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, StrokeType initialStrokeType, double beginArrowSize, double endArrowSize)
68 this.beginArrow = initialBeginArrow;
69 this.endArrow = initialEndArrow;
70 this.stroke = initialStroke;
71 this.strokeType = initialStrokeType;
72 this.beginArrowSize = beginArrowSize;
73 this.endArrowSize = endArrowSize;
77 public ArrowType getArrowType(IElement e, EdgeEnd end) {
78 if (end == EdgeEnd.Begin)
79 return e.getHint(ElementHints.KEY_BEGIN_ARROW);
80 if (end == EdgeEnd.End)
81 return e.getHint(ElementHints.KEY_END_ARROW);
86 public StrokeType getStrokeType(IElement e) {
87 return e.getHint(ElementHints.KEY_EDGE_STROKE_TYPE);
91 public Stroke getStroke(IElement e) {
92 return e.getHint(ElementHints.KEY_EDGE_STROKE);
96 public void setArrowType(IElement e, EdgeEnd end, ArrowType arrowType) {
97 if (end == EdgeEnd.Begin)
98 e.setHint(ElementHints.KEY_BEGIN_ARROW, arrowType);
99 if (end == EdgeEnd.End)
100 e.setHint(ElementHints.KEY_END_ARROW, arrowType);
104 public void setStrokeType(IElement e, StrokeType strokeType) {
105 e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);
109 public void setStroke(IElement e, Stroke s) {
110 e.setHint(ElementHints.KEY_EDGE_STROKE, s);
114 public void onElementActivated(IDiagram d, IElement e) {
118 public void onElementCreated(IElement e) {
119 e.setHint(ElementHints.KEY_BEGIN_ARROW, beginArrow);
120 e.setHint(ElementHints.KEY_END_ARROW, endArrow);
121 e.setHint(ElementHints.KEY_EDGE_STROKE, stroke);
122 e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);
123 e.setHint(ElementHints.KEY_BEGIN_ARROW_SIZE, beginArrowSize);
124 e.setHint(ElementHints.KEY_END_ARROW_SIZE, endArrowSize);
128 public void onElementDeactivated(IDiagram d, IElement e) {
132 public void onElementDestroyed(IElement e) {
136 public double getArrowSize(IElement e, EdgeEnd end) {
137 if (end==EdgeEnd.Begin)
138 return e.getHint(ElementHints.KEY_BEGIN_ARROW_SIZE);
140 if (end==EdgeEnd.End)
141 return e.getHint(ElementHints.KEY_END_ARROW_SIZE);
146 public void setArrowSize(IElement e, EdgeEnd end, double size) {
147 if (end==EdgeEnd.Begin)
148 e.setHint(ElementHints.KEY_BEGIN_ARROW_SIZE, size);
150 if (end==EdgeEnd.End)
151 e.setHint(ElementHints.KEY_END_ARROW_SIZE, size);