1 27 28 package org.nightlabs.editor2d.figures; 29 30 import java.util.List ; 31 32 import org.apache.log4j.Logger; 33 import org.eclipse.draw2d.FigureListener; 34 import org.eclipse.draw2d.FreeformFigure; 35 import org.eclipse.draw2d.FreeformListener; 36 import org.eclipse.draw2d.IFigure; 37 import org.eclipse.draw2d.geometry.Insets; 38 import org.eclipse.draw2d.geometry.Rectangle; 39 40 41 public class LayerFreeformHelper 42 implements FreeformListener 43 { 44 public static final Logger LOGGER = Logger.getLogger(LayerFreeformHelper.class); 45 46 class ChildTracker implements FigureListener { 47 public void figureMoved(IFigure source) { 48 invalidate(); 49 } 50 } 51 52 private FreeformFigure host; 53 private Rectangle freeformExtent; 54 private FigureListener figureListener = new ChildTracker(); 55 56 LayerFreeformHelper(FreeformFigure host) { 57 this.host = host; 58 } 59 60 public Rectangle getFreeformExtent() 61 { 62 if (freeformExtent != null) 63 return freeformExtent; 64 Rectangle r; 65 List children = host.getChildren(); 66 for (int i = 0; i < children.size(); i++) { 67 IFigure child = (IFigure)children.get(i); 68 if (child instanceof FreeformFigure) 73 r = ((FreeformFigure) child).getFreeformExtent(); 74 else 75 r = child.getBounds(); 76 if (freeformExtent == null) 77 freeformExtent = r.getCopy(); 78 else 79 freeformExtent.union(r); 80 } 81 Insets insets = host.getInsets(); 82 if (freeformExtent == null) 83 freeformExtent = new Rectangle(0, 0, insets.getWidth(), insets.getHeight()); 84 else { 85 host.translateToParent(freeformExtent); 86 freeformExtent.expand(insets); 87 } 88 return freeformExtent; 90 } 91 92 public void hookChild(IFigure child) 93 { 94 invalidate(); 98 if (child instanceof FreeformFigure) 99 ((FreeformFigure)child).addFreeformListener(this); 100 else 101 child.addFigureListener(figureListener); 102 } 103 104 void invalidate() 105 { 106 freeformExtent = null; 107 host.fireExtentChanged(); 108 if (host.getParent() != null) 109 if (host.getParent() instanceof MLDCFreeformLayer) { 110 } else { 113 host.getParent().revalidate(); 114 } 115 else 116 if (host instanceof OversizedBufferFreeformLayer) { 117 } 120 else { 121 host.revalidate(); 122 } 123 124 } 131 132 public void notifyFreeformExtentChanged() { 133 invalidate(); 135 } 136 137 public void setFreeformBounds(Rectangle bounds) { 138 host.setBounds(bounds); 139 bounds = bounds.getCopy(); 140 host.translateFromParent(bounds); 141 List children = host.getChildren(); 142 for (int i = 0; i < children.size(); i++) { 143 IFigure child = (IFigure)children.get(i); 144 if (child instanceof FreeformFigure) 145 ((FreeformFigure) child).setFreeformBounds(bounds); 146 } 147 } 148 149 public void unhookChild(IFigure child) { 150 invalidate(); 151 if (child instanceof FreeformFigure) 152 ((FreeformFigure)child).removeFreeformListener(this); 153 else 154 child.removeFigureListener(figureListener); 155 } 156 } 157 | Popular Tags |