1 27 28 package org.nightlabs.editor2d.handle; 29 30 import org.eclipse.draw2d.IFigure; 31 import org.eclipse.draw2d.Locator; 32 import org.eclipse.draw2d.geometry.Dimension; 33 import org.eclipse.draw2d.geometry.Point; 34 import org.eclipse.draw2d.geometry.Rectangle; 35 import org.nightlabs.editor2d.edit.ShapeDrawComponentEditPart; 36 import org.nightlabs.editor2d.j2d.GeneralShape; 37 import org.nightlabs.editor2d.j2d.PathSegment; 38 import org.nightlabs.editor2d.util.J2DUtil; 39 40 41 public class ShapeHandleLocator 42 implements Locator 43 { 44 protected IFigure figure; 45 protected IFigure getFigure() { 46 return figure; 47 } 48 49 protected ShapeDrawComponentEditPart sdcep; 50 public GeneralShape getGeneralShape() { 51 return sdcep.getGeneralShape(); 52 } 53 54 protected int index; 55 public int getIndex() { 56 return index; 57 } 58 public void setIndex(int index) { 59 this.index = index; 60 } 61 62 public ShapeHandleLocator(ShapeDrawComponentEditPart sdcep, int index) 63 { 64 super(); 65 this.figure = sdcep.getFigure(); 66 this.sdcep = sdcep; 67 this.index = index; 68 } 69 70 protected Point getReferencePoint(IFigure target) 71 { 72 Point p = getLocation(); 73 getFigure().translateToAbsolute(p); 74 target.translateToRelative(p); 75 76 return p; 77 } 78 79 protected Point getLocation() 80 { 81 PathSegment ps = getGeneralShape().getPathSegment(index); 82 if (ps != null) { 83 return J2DUtil.toDraw2D(ps.getPoint()); 84 } 85 return new Point(); 86 } 87 88 protected IFigure getReference() { 89 return figure; 90 } 91 92 public void relocate(IFigure target) 93 { 94 target.setLocation(calcCenterPoint(target.getBounds(), getReferencePoint(target))); 95 } 96 97 protected Point calcCenterPoint(Rectangle rect, Point point) 98 { 99 Dimension boundsSize = rect.getSize(); 100 return new Point(point.x - boundsSize.width/2, point.y - boundsSize.height/2); 101 } 102 } 103 | Popular Tags |