KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > modeler > pref > ComponentGeometry


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.modeler.pref;
57
58 import java.awt.Component JavaDoc;
59 import java.awt.event.ComponentAdapter JavaDoc;
60 import java.awt.event.ComponentEvent JavaDoc;
61 import java.beans.PropertyChangeEvent JavaDoc;
62 import java.beans.PropertyChangeListener JavaDoc;
63
64 import javax.swing.JDialog JavaDoc;
65 import javax.swing.JFrame JavaDoc;
66
67 import org.apache.commons.beanutils.PropertyUtils;
68 import org.objectstyle.cayenne.pref.Domain;
69 import org.objectstyle.cayenne.pref.PreferenceException;
70
71 public class ComponentGeometry extends _ComponentGeometry {
72
73     public static final String JavaDoc GEOMETRY_PREF_KEY = "geometry";
74
75     public static ComponentGeometry getPreference(Domain domain) {
76         return (ComponentGeometry) domain.getDetail(
77                 ComponentGeometry.GEOMETRY_PREF_KEY,
78                 ComponentGeometry.class,
79                 true);
80     }
81
82     /**
83      * Binds this preference object to synchronize its state with a given component,
84      * allowing to specify an initial offset compared to the stored position.
85      */

86     public void bind(
87             final JFrame JavaDoc frame,
88             int initialWidth,
89             int initialHeight,
90             int maxOffset) {
91
92         updateSize(frame, initialWidth, initialHeight);
93         updateLocation(frame, maxOffset);
94
95         frame.addComponentListener(new ComponentAdapter JavaDoc() {
96
97             public void componentResized(ComponentEvent JavaDoc e) {
98                 setWidth(new Integer JavaDoc(frame.getWidth()));
99                 setHeight(new Integer JavaDoc(frame.getHeight()));
100             }
101
102             public void componentMoved(ComponentEvent JavaDoc e) {
103                 setX(new Integer JavaDoc(frame.getX()));
104                 setY(new Integer JavaDoc(frame.getY()));
105             }
106         });
107     }
108
109     /**
110      * Binds this preference object to synchronize its state with a given component,
111      * allowing to specify an initial offset compared to the stored position.
112      */

113     public void bind(final JDialog JavaDoc dialog, int initialWidth, int initialHeight) {
114         updateSize(dialog, initialWidth, initialHeight);
115
116         dialog.addComponentListener(new ComponentAdapter JavaDoc() {
117
118             public void componentResized(ComponentEvent JavaDoc e) {
119                 setWidth(new Integer JavaDoc(dialog.getWidth()));
120                 setHeight(new Integer JavaDoc(dialog.getHeight()));
121             }
122         });
123     }
124
125     /**
126      * Binds this preference object to synchronize its state with a given component
127      * property.
128      */

129     public void bindIntProperty(
130             final Component JavaDoc component,
131             final String JavaDoc property,
132             int defaultValue) {
133
134         updateIntProperty(component, property, defaultValue);
135
136         component.addPropertyChangeListener(property, new PropertyChangeListener JavaDoc() {
137
138             public void propertyChange(PropertyChangeEvent JavaDoc e) {
139                 Object JavaDoc value = e.getNewValue();
140                 setProperty(property, value != null ? value.toString() : null);
141             }
142         });
143     }
144
145     void updateIntProperty(Component JavaDoc c, String JavaDoc property, int defaultValue) {
146         int i = getIntProperty(property, defaultValue);
147         try {
148             PropertyUtils.setProperty(c, property, new Integer JavaDoc(i));
149         }
150         catch (Throwable JavaDoc th) {
151             throw new PreferenceException("Error setting property: " + property, th);
152         }
153     }
154
155     void updateSize(Component JavaDoc c, int initialWidth, int initialHeight) {
156         int w = getIntWidth(initialWidth);
157         int h = getIntHeight(initialHeight);
158
159         if (w > 0 && h > 0) {
160             c.setSize(w, h);
161         }
162     }
163
164     void updateLocation(Component JavaDoc c, int maxOffset) {
165         if (maxOffset != 0) {
166             int xOffset = (int) (Math.random() * maxOffset);
167             int yOffset = (int) (Math.random() * maxOffset);
168             changeX(xOffset);
169             changeY(yOffset);
170         }
171
172         int x = getIntX(-1);
173         int y = getIntY(-1);
174
175         if (x > 0 && y > 0) {
176             c.setLocation(x, y);
177         }
178     }
179
180     public void changeX(int xOffset) {
181         if (xOffset != 0) {
182             setX(new Integer JavaDoc(getIntX(0) + xOffset));
183         }
184     }
185
186     public void changeY(int yOffset) {
187         if (yOffset != 0) {
188             setY(new Integer JavaDoc(getIntY(0) + yOffset));
189         }
190     }
191
192     public int getIntWidth(int defaultValue) {
193         return (getWidth() != null) ? getWidth().intValue() : defaultValue;
194     }
195
196     public int getIntHeight(int defaultValue) {
197         return (getHeight() != null) ? getHeight().intValue() : defaultValue;
198     }
199
200     public int getIntX(int defaultValue) {
201         return (getX() != null) ? getX().intValue() : defaultValue;
202     }
203
204     public int getIntY(int defaultValue) {
205         return (getY() != null) ? getY().intValue() : defaultValue;
206     }
207 }
208
209
Popular Tags