KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > editor2d > impl > DrawComponentContainerImpl


1 /**
2  * <copyright>
3  * </copyright>
4  *
5  * $Id: DrawComponentContainerImpl.java 1634 2005-08-26 19:26:15Z nozkiller $
6  */

7 package com.nightlabs.editor2d.impl;
8
9 import java.awt.Rectangle JavaDoc;
10 import java.awt.geom.AffineTransform JavaDoc;
11 import java.util.ArrayList JavaDoc;
12 import java.util.Collection JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import java.util.List JavaDoc;
15
16 import com.nightlabs.editor2d.DrawComponent;
17 import com.nightlabs.editor2d.DrawComponentContainer;
18 import com.nightlabs.editor2d.MultiLayerDrawComponent;
19 import com.nightlabs.editor2d.render.RenderModeManager;
20
21 public class DrawComponentContainerImpl
22 extends DrawComponentImpl
23 implements DrawComponentContainer
24 {
25     /**
26      * Instances of {@link DrawComponent} where some of them might be {@link DrawComponentContainer}.
27      */

28     protected List JavaDoc drawComponents = null;
29
30 // protected PropertyChangeListener pcl = new PropertyChangeListener()
31
// {
32
// public void propertyChange(PropertyChangeEvent e)
33
// {
34
// System.out.println("DrawComponentContainer Property Change!");
35
// if (e.getPropertyName().equals(DrawComponent.TRANSFORM_CHANGED))
36
// {
37
// System.out.println("DrawComponent "+e.getSource()+" TRANSFORM_CHANGED!");
38
// Rectangle dcBounds = ((DrawComponent) e.getSource()).getBounds();
39
// if (!getBounds().contains(dcBounds)) {
40
// bounds = null;
41
// setBounds(getBounds());
42
// System.out.println("DrawComponent "+e.getSource().getClass()+" BOUNDS CHANGED!");
43
// }
44
// }
45
// }
46
// };
47

48     public DrawComponentContainerImpl() {
49         super();
50     }
51
52     /**
53      * @return Returns instances of {@link DrawComponent}. Some of them are instances
54      * of {@link DrawComponentContainer}. This method never returns <tt>null</tt>.
55      */

56     public List JavaDoc getDrawComponents()
57     {
58         if (drawComponents == null) {
59             drawComponents = new ArrayList JavaDoc();
60         }
61         return drawComponents;
62     }
63
64     public void setDrawComponents(List JavaDoc drawComponents) {
65         this.drawComponents = drawComponents;
66     }
67     
68     /**
69      * <!-- begin-user-doc -->
70      * <!-- end-user-doc -->
71      *
72      */

73     public void addDrawComponent(DrawComponent drawComponent)
74     {
75         primAddDrawComponent(drawComponent);
76         firePropertyChange(CHILD_ADDED, null, drawComponents);
77     }
78
79     protected void primAddDrawComponent(DrawComponent drawComponent)
80     {
81 // drawComponent.addPropertyChangeListener(pcl);
82
drawComponent.setParent(this);
83         getRoot().registerDrawComponent(drawComponent);
84         drawComponent.setRenderModeManager(getRoot().getRenderModeManager());
85         getDrawComponents().add(drawComponent);
86         bounds = null;
87     }
88     
89     /**
90      * <!-- begin-user-doc -->
91      * <!-- end-user-doc -->
92      *
93      */

94     public void addDrawComponent(DrawComponent drawComponent, int index)
95     {
96         primAddDrawComponent(drawComponent, index);
97         firePropertyChange(CHILD_ADDED, null, drawComponents);
98     }
99     
100     protected void primAddDrawComponent(DrawComponent drawComponent, int index)
101     {
102 // drawComponent.addPropertyChangeListener(pcl);
103
drawComponent.setParent(this);
104         getRoot().registerDrawComponent(drawComponent);
105         drawComponent.setRenderModeManager(getRoot().getRenderModeManager());
106         getDrawComponents().add(index, drawComponent);
107         bounds = null;
108     }
109     
110     /**
111      * <!-- begin-user-doc -->
112      * <!-- end-user-doc -->
113      *
114      */

115     public void removeDrawComponent(DrawComponent drawComponent)
116     {
117         primRemoveDrawComponent(drawComponent);
118         firePropertyChange(CHILD_REMOVED, null, drawComponents);
119     }
120     
121     protected void primRemoveDrawComponent(DrawComponent drawComponent)
122     {
123 // drawComponent.removePropertyChangeListener(pcl);
124
getRoot().unregisterDrawComponent(drawComponent);
125         getDrawComponents().remove(drawComponent);
126         bounds = null;
127     }
128     
129     /**
130      * <!-- begin-user-doc -->
131      * <!-- end-user-doc -->
132      */

133     public void removeDrawComponent(int index)
134     {
135         primRemoveDrawComponent(index);
136         firePropertyChange(CHILD_REMOVED, null, drawComponents);
137     }
138
139     protected void primRemoveDrawComponent(int index)
140     {
141         DrawComponent dc = (DrawComponent) getDrawComponents().get(index);
142 // dc.removePropertyChangeListener(pcl);
143
long idToRemove = dc.getId();
144         getRoot().unregisterDrawComponent(idToRemove);
145         getDrawComponents().remove(index);
146         bounds = null;
147     }
148     
149     /**
150      * <!-- begin-user-doc -->
151      * <!-- end-user-doc -->
152      *
153      */

154     public MultiLayerDrawComponent getRoot()
155     {
156         DrawComponentContainer parent = getParent();
157         if (parent == null) {
158             if (this instanceof MultiLayerDrawComponent)
159                 return (MultiLayerDrawComponent) this;
160             else
161                 throw new IllegalStateException JavaDoc("Member parent may not be null for DrawComponentContainer "+this.toString());
162         }
163         
164         if (parent instanceof MultiLayerDrawComponent) {
165             return (MultiLayerDrawComponent) parent;
166         }
167         
168         while (!(parent instanceof MultiLayerDrawComponent)) {
169             parent = parent.getParent();
170         }
171         
172         return (MultiLayerDrawComponent) parent;
173     }
174
175     public Rectangle JavaDoc getBounds()
176     {
177         if (bounds != null) {
178             return bounds;
179         }
180         else
181         {
182             Rectangle JavaDoc oldBounds = bounds;
183             
184             int minX = Integer.MAX_VALUE;
185             int minY = Integer.MAX_VALUE;
186             int maxX = Integer.MIN_VALUE;
187             int maxY = Integer.MIN_VALUE;
188             
189             if (getDrawComponents().isEmpty())
190                 return new Rectangle JavaDoc(0, 0, 0, 0);
191             
192             for (Iterator JavaDoc it = getDrawComponents().iterator(); it.hasNext(); )
193             {
194                 DrawComponent dc = (DrawComponent) it.next();
195                 Rectangle JavaDoc bounds = dc.getBounds();
196                 minX = Math.min((int)bounds.getMinX(), minX);
197                 minY = Math.min((int)bounds.getMinY(), minY);
198                 maxX = Math.max((int)bounds.getMaxX(), maxX);
199                 maxY = Math.max((int)bounds.getMaxY(), maxY);
200             }
201             bounds = new Rectangle JavaDoc(minX, minY, maxX-minX, maxY-minY);
202             
203             firePropertyChange(PROP_BOUNDS, oldBounds, bounds);
204             return bounds;
205         }
206     }
207
208     public void transform(AffineTransform JavaDoc at)
209     {
210         for (Iterator JavaDoc it = getDrawComponents().iterator(); it.hasNext(); ) {
211             DrawComponent dc = (DrawComponent) it.next();
212             dc.transform(at);
213         }
214         super.transform(at);
215     }
216         
217     public void setRenderModeManager(RenderModeManager man)
218     {
219         super.setRenderModeManager(man);
220         for (Iterator JavaDoc it = getDrawComponents().iterator(); it.hasNext(); ) {
221             DrawComponent dc = (DrawComponent) it.next();
222             dc.setRenderModeManager(renderModeManager);
223         }
224     }
225         
226     public void setRenderMode(int mode)
227     {
228         super.setRenderMode(mode);
229         for (Iterator JavaDoc it = getDrawComponents().iterator(); it.hasNext(); ) {
230             DrawComponent dc = (DrawComponent) it.next();
231             dc.setRenderMode(mode);
232         }
233     }
234     
235     public Class JavaDoc getRenderModeClass() {
236         return DrawComponentContainer.class;
237     }
238         
239     public void notifyChildTransform(DrawComponent child)
240     {
241         // TODO: implement this check (contains in Command)
242
Rectangle JavaDoc childBounds = child.getBounds();
243         if (!getBounds().contains(childBounds)) {
244             bounds = null;
245             setBounds(getBounds());
246             System.out.println("DrawComponent changed DrawComponentContainer BOUNDS!");
247         }
248     }
249
250 // public String getTypeName() {
251
// return ModelPlugin.getResourceString("type.drawComponentContainer");
252
// }
253
public String JavaDoc getTypeName() {
254         return "DrawComponentContainer";
255     }
256
257     public void setLanguageId(String JavaDoc newLanguageId)
258     {
259         super.setLanguageId(newLanguageId);
260         for (Iterator JavaDoc it = getDrawComponents().iterator(); it.hasNext(); ) {
261             DrawComponent dc = (DrawComponent) it.next();
262             dc.setLanguageId(newLanguageId);
263         }
264     }
265
266     /**
267      * @see com.nightlabs.editor2d.DrawComponentContainer#findDrawComponents(java.lang.Class)
268      */

269     public Collection JavaDoc findDrawComponents(Class JavaDoc type)
270     {
271         return findDrawComponents(type, false);
272     }
273     /**
274      * @see com.nightlabs.editor2d.DrawComponentContainer#findDrawComponents(java.lang.Class, boolean)
275      */

276     public Collection JavaDoc findDrawComponents(Class JavaDoc type, boolean canSelfPackage)
277     {
278         ArrayList JavaDoc res = new ArrayList JavaDoc();
279
280         if (drawComponents != null) {
281             for (Iterator JavaDoc it = drawComponents.iterator(); it.hasNext(); ) {
282                 DrawComponent dc = (DrawComponent) it.next();
283
284                 if (type.isInstance(dc)) {
285                     res.add(dc);
286
287                     if (!canSelfPackage)
288                         continue;
289                 }
290
291                 if (dc instanceof DrawComponentContainer) {
292                     DrawComponentContainer dcc = (DrawComponentContainer)dc;
293                     res.addAll(dcc.findDrawComponents(type, canSelfPackage));
294                 }
295             } // for (Iterator it = drawComponents.iterator(); it.hasNext(); ) {
296
} // if (drawComponents != null) {
297

298         return res;
299     }
300 } //DrawComponentContainerImpl
301
Popular Tags