1 8 package com.nightlabs.editor2d.figures; 9 10 import java.util.List ; 11 12 import org.apache.log4j.Logger; 13 import org.eclipse.draw2d.FigureListener; 14 import org.eclipse.draw2d.FreeformFigure; 15 import org.eclipse.draw2d.FreeformListener; 16 import org.eclipse.draw2d.IFigure; 17 import org.eclipse.draw2d.geometry.Insets; 18 import org.eclipse.draw2d.geometry.Rectangle; 19 20 21 public class LayerFreeformHelper 22 implements FreeformListener 23 { 24 public static final Logger LOGGER = Logger.getLogger(LayerFreeformHelper.class); 25 26 class ChildTracker implements FigureListener { 27 public void figureMoved(IFigure source) { 28 invalidate(); 29 } 30 } 31 32 private FreeformFigure host; 33 private Rectangle freeformExtent; 34 private FigureListener figureListener = new ChildTracker(); 35 36 LayerFreeformHelper(FreeformFigure host) { 37 this.host = host; 38 } 39 40 public Rectangle getFreeformExtent() 41 { 42 if (freeformExtent != null) 43 return freeformExtent; 44 Rectangle r; 45 List children = host.getChildren(); 46 for (int i = 0; i < children.size(); i++) { 47 IFigure child = (IFigure)children.get(i); 48 if (child instanceof FreeformFigure) 53 r = ((FreeformFigure) child).getFreeformExtent(); 54 else 55 r = child.getBounds(); 56 if (freeformExtent == null) 57 freeformExtent = r.getCopy(); 58 else 59 freeformExtent.union(r); 60 } 61 Insets insets = host.getInsets(); 62 if (freeformExtent == null) 63 freeformExtent = new Rectangle(0, 0, insets.getWidth(), insets.getHeight()); 64 else { 65 host.translateToParent(freeformExtent); 66 freeformExtent.expand(insets); 67 } 68 return freeformExtent; 70 } 71 72 public void hookChild(IFigure child) 73 { 74 invalidate(); 78 if (child instanceof FreeformFigure) 79 ((FreeformFigure)child).addFreeformListener(this); 80 else 81 child.addFigureListener(figureListener); 82 } 83 84 void invalidate() 85 { 86 freeformExtent = null; 87 host.fireExtentChanged(); 88 if (host.getParent() != null) 89 if (host.getParent() instanceof MLDCFreeformLayer) { 90 } else { 93 host.getParent().revalidate(); 94 } 95 else 96 if (host instanceof OversizedBufferFreeformLayer) { 97 } 100 else { 101 host.revalidate(); 102 } 103 104 } 111 112 public void notifyFreeformExtentChanged() { 113 invalidate(); 115 } 116 117 public void setFreeformBounds(Rectangle bounds) { 118 host.setBounds(bounds); 119 bounds = bounds.getCopy(); 120 host.translateFromParent(bounds); 121 List children = host.getChildren(); 122 for (int i = 0; i < children.size(); i++) { 123 IFigure child = (IFigure)children.get(i); 124 if (child instanceof FreeformFigure) 125 ((FreeformFigure) child).setFreeformBounds(bounds); 126 } 127 } 128 129 public void unhookChild(IFigure child) { 130 invalidate(); 131 if (child instanceof FreeformFigure) 132 ((FreeformFigure)child).removeFreeformListener(this); 133 else 134 child.removeFigureListener(figureListener); 135 } 136 } 137 | Popular Tags |