1 26 27 package org.nightlabs.editor2d.impl; 28 29 import java.awt.Rectangle ; 30 import java.awt.geom.AffineTransform ; 31 import java.awt.geom.Arc2D ; 32 import java.util.Iterator ; 33 34 import org.nightlabs.editor2d.DrawComponent; 35 import org.nightlabs.editor2d.DrawComponentContainer; 36 import org.nightlabs.editor2d.EllipseDrawComponent; 37 import org.nightlabs.editor2d.j2d.GeneralShape; 38 39 public class EllipseDrawComponentImpl 40 extends ShapeDrawComponentImpl 41 implements EllipseDrawComponent 42 { 43 protected static final int START_ANGLE_EDEFAULT = 0; 44 protected int startAngle = START_ANGLE_EDEFAULT; 45 46 protected static final int END_ANGLE_EDEFAULT = 360; 47 protected int endAngle = END_ANGLE_EDEFAULT; 48 49 protected static final boolean CONNECT_EDEFAULT = false; 50 protected boolean connect = CONNECT_EDEFAULT; 51 52 public EllipseDrawComponentImpl() { 53 super(); 54 } 55 56 public boolean isConnect() { 57 return connect; 58 } 59 public void setConnect(boolean newConnect) 60 { 61 boolean oldConnect = connect; 62 connect = newConnect; 63 generalShape = createEllipse(); 64 generalShape.transform(affineTransform); 65 bounds = null; 66 firePropertyChange(PROP_CONNECT, oldConnect, connect); 67 } 68 69 public int getStartAngle() { 70 return startAngle; 71 } 72 public void setStartAngle(int newStartAngle) 73 { 74 int oldStartAngle = startAngle; 75 startAngle = newStartAngle; 76 generalShape = createEllipse(); 77 generalShape.transform(affineTransform); 78 bounds = null; 79 firePropertyChange(PROP_START_ANGLE, oldStartAngle, startAngle); 80 } 81 82 public int getEndAngle() { 83 return endAngle; 84 } 85 public void setEndAngle(int newEndAngle) { 86 int oldEndAngle = endAngle; 87 endAngle = newEndAngle; 88 generalShape = createEllipse(); 89 generalShape.transform(affineTransform); 90 bounds = null; 91 firePropertyChange(PROP_END_ANGLE, oldEndAngle, endAngle); 92 } 93 94 public String toString() 95 { 96 StringBuffer result = new StringBuffer (super.toString()); 97 result.append(" (startAngle: "); 98 result.append(startAngle); 99 result.append(", endAngle: "); 100 result.append(endAngle); 101 result.append(", connect: "); 102 result.append(connect); 103 result.append(')'); 104 return result.toString(); 105 } 106 107 public String getTypeName() { 111 return "Ellipse"; 112 } 113 114 protected GeneralShape createEllipse() 115 { 116 Rectangle originalBounds = originalShape.getBounds(); 117 int type = connect ? Arc2D.PIE : Arc2D.OPEN; 118 Arc2D arc = new Arc2D.Double (originalBounds.x, originalBounds.y, 119 originalBounds.width, originalBounds.height, getStartAngle(), getEndAngle()-getStartAngle(), type); 120 121 GeneralShape originalEllipse = new GeneralShape(arc); 122 return originalEllipse; 123 } 124 125 public void transform(AffineTransform at, boolean fromParent) 126 { 127 Rectangle oldBounds = getBounds(); 128 if (generalShape != null) { 129 super.transform(at, fromParent); 130 generalShape = createEllipse(); 131 generalShape.transform(affineTransform); 132 } 133 134 if (!fromParent && getParent() != null) 135 getParent().notifyChildTransform(this); 136 137 bounds = null; 138 } 139 140 146 public Object clone(DrawComponentContainer parent) 147 { 148 EllipseDrawComponentImpl ellipse = (EllipseDrawComponentImpl) super.clone(parent); 149 ellipse.connect = connect; 150 ellipse.endAngle = endAngle; 151 ellipse.startAngle = startAngle; 152 return ellipse; 153 } 154 155 } | Popular Tags |