KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > editor2d > figures > LayerFreeformHelper


1 /**
2  * <p> Project: com.nightlabs.editor2d </p>
3  * <p> Copyright: Copyright (c) 2004 </p>
4  * <p> Company: NightLabs GmbH (Germany) </p>
5  * <p> Creation Date: 14.12.2004 </p>
6  * <p> Author: Daniel Mazurek </p>
7 **/

8 package com.nightlabs.editor2d.figures;
9
10 import java.util.List JavaDoc;
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 JavaDoc children = host.getChildren();
46     for (int i = 0; i < children.size(); i++) {
47         IFigure child = (IFigure)children.get(i);
48 // if (child instanceof OversizedBufferFreeformLayer)
49
// r = child.getBounds();
50
// else if (child instanceof FreeformFigure)
51
// r = ((FreeformFigure) child).getFreeformExtent();
52
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 // System.out.println("New extent calculated for " + host + " = " + freeformExtent);
69
return freeformExtent;
70   }
71
72   public void hookChild(IFigure child)
73   {
74 // if (child instanceof OversizedBufferFreeformLayer) {
75
// return;
76
// }
77
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         // Do nothing
91
// LOGGER.debug("host.getParent() instanceof MLDCFreeformLayer!");
92
} else {
93             host.getParent().revalidate();
94       }
95     else
96       if (host instanceof OversizedBufferFreeformLayer) {
97         // Do nothing
98
// LOGGER.debug("host.getParent() instanceof OversizedBufferFreeformLayer!");
99
}
100       else {
101             host.revalidate();
102       }
103     
104 // freeformExtent = null;
105
// host.fireExtentChanged();
106
// if (host.getParent() != null)
107
// host.getParent().revalidate();
108
// else
109
// host.revalidate();
110
}
111
112   public void notifyFreeformExtentChanged() {
113     //A childs freeform extent has changed, therefore this extent must be recalculated
114
invalidate();
115   }
116
117   public void setFreeformBounds(Rectangle bounds) {
118     host.setBounds(bounds);
119     bounds = bounds.getCopy();
120     host.translateFromParent(bounds);
121     List JavaDoc 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