--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.g2d.element.handler.impl;\r
+\r
+import java.awt.BasicStroke;\r
+import java.awt.Stroke;\r
+\r
+import org.simantics.g2d.diagram.IDiagram;\r
+import org.simantics.g2d.element.ElementHints;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.handler.EdgeVisuals;\r
+import org.simantics.g2d.element.handler.LifeCycle;\r
+\r
+/**\r
+ * This implementation is for edges whose visual properties can be modified.\r
+ * \r
+ * @author Toni Kalajainen\r
+ */\r
+public class ConfigurableEdgeVisuals implements EdgeVisuals, LifeCycle {\r
+\r
+ private static final long serialVersionUID = -8662807810086649742L;\r
+\r
+ public static final Stroke DEFAULT_STROKE =\r
+ new BasicStroke(0.15f,\r
+ BasicStroke.CAP_BUTT,\r
+ BasicStroke.JOIN_ROUND,\r
+ 10.0f, null, 0.0f);\r
+\r
+ public static final ConfigurableEdgeVisuals DEFAULT =\r
+ new ConfigurableEdgeVisuals(ArrowType.None, ArrowType.Fill, DEFAULT_STROKE, 1.0, 1.0);\r
+\r
+ ArrowType beginArrow, endArrow;\r
+ public Stroke stroke;\r
+ public StrokeType strokeType;\r
+ double beginArrowSize, endArrowSize;\r
+\r
+ public ConfigurableEdgeVisuals()\r
+ {\r
+ this.beginArrow = ArrowType.Stroke;\r
+ this.endArrow = ArrowType.Stroke;\r
+ this.stroke = DEFAULT_STROKE;\r
+ this.strokeType = StrokeType.Relative;\r
+ beginArrowSize = 1;\r
+ endArrowSize = 1;\r
+ }\r
+\r
+ public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, double beginArrowSize, double endArrowSize)\r
+ {\r
+ this.beginArrow = initialBeginArrow;\r
+ this.endArrow = initialEndArrow;\r
+ this.stroke = initialStroke;\r
+ this.strokeType = StrokeType.Relative;\r
+ this.beginArrowSize = beginArrowSize;\r
+ this.endArrowSize = endArrowSize;\r
+ }\r
+\r
+ public ConfigurableEdgeVisuals(ArrowType initialBeginArrow, ArrowType initialEndArrow, Stroke initialStroke, StrokeType initialStrokeType, double beginArrowSize, double endArrowSize)\r
+ {\r
+ this.beginArrow = initialBeginArrow;\r
+ this.endArrow = initialEndArrow;\r
+ this.stroke = initialStroke;\r
+ this.strokeType = initialStrokeType;\r
+ this.beginArrowSize = beginArrowSize;\r
+ this.endArrowSize = endArrowSize;\r
+ }\r
+\r
+ @Override\r
+ public ArrowType getArrowType(IElement e, EdgeEnd end) {\r
+ if (end == EdgeEnd.Begin)\r
+ return e.getHint(ElementHints.KEY_BEGIN_ARROW);\r
+ if (end == EdgeEnd.End)\r
+ return e.getHint(ElementHints.KEY_END_ARROW);\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public StrokeType getStrokeType(IElement e) {\r
+ return e.getHint(ElementHints.KEY_EDGE_STROKE_TYPE);\r
+ }\r
+\r
+ @Override\r
+ public Stroke getStroke(IElement e) {\r
+ return e.getHint(ElementHints.KEY_EDGE_STROKE);\r
+ }\r
+\r
+ @Override\r
+ public void setArrowType(IElement e, EdgeEnd end, ArrowType arrowType) {\r
+ if (end == EdgeEnd.Begin)\r
+ e.setHint(ElementHints.KEY_BEGIN_ARROW, arrowType);\r
+ if (end == EdgeEnd.End)\r
+ e.setHint(ElementHints.KEY_END_ARROW, arrowType);\r
+ }\r
+\r
+ @Override\r
+ public void setStrokeType(IElement e, StrokeType strokeType) {\r
+ e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);\r
+ }\r
+\r
+ @Override\r
+ public void setStroke(IElement e, Stroke s) {\r
+ e.setHint(ElementHints.KEY_EDGE_STROKE, s);\r
+ }\r
+\r
+ @Override\r
+ public void onElementActivated(IDiagram d, IElement e) {\r
+ }\r
+\r
+ @Override\r
+ public void onElementCreated(IElement e) {\r
+ e.setHint(ElementHints.KEY_BEGIN_ARROW, beginArrow);\r
+ e.setHint(ElementHints.KEY_END_ARROW, endArrow);\r
+ e.setHint(ElementHints.KEY_EDGE_STROKE, stroke);\r
+ e.setHint(ElementHints.KEY_EDGE_STROKE_TYPE, strokeType);\r
+ e.setHint(ElementHints.KEY_BEGIN_ARROW_SIZE, beginArrowSize);\r
+ e.setHint(ElementHints.KEY_END_ARROW_SIZE, endArrowSize);\r
+ }\r
+\r
+ @Override\r
+ public void onElementDeactivated(IDiagram d, IElement e) {\r
+ }\r
+\r
+ @Override\r
+ public void onElementDestroyed(IElement e) {\r
+ }\r
+\r
+ @Override\r
+ public double getArrowSize(IElement e, EdgeEnd end) {\r
+ if (end==EdgeEnd.Begin)\r
+ return e.getHint(ElementHints.KEY_BEGIN_ARROW_SIZE);\r
+ else\r
+ if (end==EdgeEnd.End)\r
+ return e.getHint(ElementHints.KEY_END_ARROW_SIZE);\r
+ return 0;\r
+ }\r
+\r
+ @Override\r
+ public void setArrowSize(IElement e, EdgeEnd end, double size) {\r
+ if (end==EdgeEnd.Begin)\r
+ e.setHint(ElementHints.KEY_BEGIN_ARROW_SIZE, size);\r
+ else\r
+ if (end==EdgeEnd.End)\r
+ e.setHint(ElementHints.KEY_END_ARROW_SIZE, size);\r
+ }\r
+\r
+}\r