001 /*
002 * $Id: LabelProperties.java,v 1.4 2005/10/26 14:29:54 kleopatra Exp $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021
022 package org.jdesktop.swingx;
023
024 import java.awt.Color;
025 import java.awt.Font;
026 import java.beans.PropertyChangeEvent;
027 import java.beans.PropertyChangeListener;
028
029 import javax.swing.AbstractButton;
030 import javax.swing.Icon;
031 import javax.swing.JLabel;
032 import javax.swing.table.TableCellRenderer;
033
034 /**
035 * Class used to store label properties in a single object so that they
036 * may be applied as a set on renderers.
037 * @author Amy Fowler
038 * @version 1.0
039 */
040
041 public class LabelProperties extends JLabel {
042 private static final int BACKGROUND_SET = 1;
043 private static final int FOREGROUND_SET = 2;
044 private static final int FONT_SET = 4;
045 private static final int HORIZONTAL_ALIGNMENT_SET = 8;
046 private static final int HORIZONTAL_TEXT_POSITION_SET = 16;
047 private static final int ICON_SET = 32;
048 private static final int ICON_TEXT_GAP_SET = 64;
049 private static final int TEXT_SET = 128;
050 private static final int VERTICAL_ALIGNMENT_SET = 256;
051 private static final int VERTICAL_TEXT_POSITION_SET = 512;
052
053 private int setFlags = 0;
054
055 public LabelProperties() {
056 super();
057 addPropertyChangeListener(new PropertyChangeListener() {
058 public void propertyChange(PropertyChangeEvent e) {
059 String propertyName = e.getPropertyName();
060 Object value = e.getNewValue();
061 if (propertyName.equals("background")) {
062 if (value != null) {
063 setFlags |= BACKGROUND_SET;
064 } else {
065 setFlags &= (~BACKGROUND_SET);
066 }
067 }
068 else if (propertyName.equals("font")) {
069 if (value != null) {
070 setFlags |= FONT_SET;
071 } else {
072 setFlags &= (~FONT_SET);
073 }
074 }
075 else if (propertyName.equals("foreground")) {
076 if (value != null) {
077 setFlags |= FOREGROUND_SET;
078 } else {
079 setFlags &= (~FOREGROUND_SET);
080 }
081 }
082 else if (propertyName.equals("horizontalAlignment")) {
083 if (value != null && ((Integer)value).intValue() != -1) {
084 setFlags |= HORIZONTAL_ALIGNMENT_SET;
085 } else {
086 setFlags &= (~HORIZONTAL_ALIGNMENT_SET);
087 }
088 }
089 else if (propertyName.equals("horizontalTextPosition")) {
090 if (value != null && ((Integer)value).intValue() != -1) {
091 setFlags |= HORIZONTAL_TEXT_POSITION_SET;
092 } else {
093 setFlags &= (~HORIZONTAL_TEXT_POSITION_SET);
094 }
095 }
096 else if (propertyName.equals("icon")) {
097 if (value != null) {
098 setFlags |= ICON_SET;
099 } else {
100 setFlags &= (~ICON_SET);
101 }
102 }
103 else if (propertyName.equals("iconTextGap")) {
104 if (value != null && ((Integer)value).intValue() != -1) {
105 setFlags |= ICON_TEXT_GAP_SET;
106 } else {
107 setFlags &= (~ICON_TEXT_GAP_SET);
108 }
109 }
110 else if (propertyName.equals("text")) {
111 if (value != null) {
112 setFlags |= TEXT_SET;
113 } else {
114 setFlags &= (~TEXT_SET);
115 }
116 }
117 else if (propertyName.equals("verticalAlignment")) {
118 if (value != null && ((Integer)value).intValue() != -1) {
119 setFlags |= VERTICAL_ALIGNMENT_SET;
120 } else {
121 setFlags &= (~VERTICAL_ALIGNMENT_SET);
122 }
123 }
124 else if (propertyName.equals("verticalTextPosition")) {
125 if (value != null && ((Integer)value).intValue() != -1) {
126 setFlags |= VERTICAL_TEXT_POSITION_SET;
127 } else {
128 setFlags &= (~VERTICAL_TEXT_POSITION_SET);
129 }
130 }
131 }
132 });
133 }
134
135 public LabelProperties(Color background, Color foreground, Font font,
136 int horizontalAlignment, int horizontalTextPosition,
137 int verticalAlignment, int verticalTextPosition,
138 Icon icon, int iconTextGap, String text) {
139 this();
140 setBackground(background);
141 setForeground(foreground);
142 setFont(font);
143 setHorizontalAlignment(horizontalAlignment);
144 setHorizontalTextPosition(horizontalTextPosition);
145 setVerticalAlignment(verticalAlignment);
146 setVerticalTextPosition(verticalTextPosition);
147 setIcon(icon);
148 setIconTextGap(iconTextGap);
149 setText(text);
150 }
151
152 public boolean isBackgroundSet() {
153 return (setFlags & BACKGROUND_SET) > 0;
154 }
155
156 public boolean isForegroundSet() {
157 return (setFlags & FOREGROUND_SET) > 0;
158 }
159
160 public boolean isFontSet() {
161 return (setFlags & FONT_SET) > 0;
162 }
163
164 public boolean isHorizontalAlignmentSet() {
165 return (setFlags & HORIZONTAL_ALIGNMENT_SET) > 0;
166 }
167
168 public boolean isHorizontalTextPositionSet() {
169 return (setFlags & HORIZONTAL_TEXT_POSITION_SET) > 0;
170 }
171
172 public boolean isIconSet() {
173 return (setFlags & ICON_SET) > 0;
174 }
175
176 public boolean isIconTextGapSet() {
177 return (setFlags & ICON_TEXT_GAP_SET) > 0;
178 }
179
180 public boolean isTextSet() {
181 return (setFlags & TEXT_SET) > 0;
182 }
183
184 public boolean isVerticalAlignmentSet() {
185 return (setFlags & VERTICAL_ALIGNMENT_SET) > 0;
186 }
187
188 public boolean isVerticalTextPositionSet() {
189 return (setFlags & VERTICAL_TEXT_POSITION_SET) > 0;
190 }
191
192 public boolean noPropertiesSet() {
193 return setFlags == 0;
194 }
195
196 public void applyPropertiesTo(JLabel label) {
197 if (noPropertiesSet()) {
198 return;
199 }
200 if (isBackgroundSet()) {
201 label.setBackground(getBackground());
202 }
203 if (isForegroundSet()) {
204 label.setForeground(getForeground());
205 }
206 if (isFontSet()) {
207 label.setFont(getFont());
208 }
209 if (isHorizontalAlignmentSet()) {
210 label.setHorizontalAlignment(getHorizontalAlignment());
211 }
212 if (isHorizontalTextPositionSet()) {
213 label.setHorizontalTextPosition(getHorizontalTextPosition());
214 }
215 if (isIconSet()) {
216 label.setIcon(getIcon());
217 }
218 if (isIconTextGapSet()) {
219 label.setIconTextGap(getIconTextGap());
220 }
221 if (isTextSet()) {
222 label.setText(getText());
223 }
224 if (isVerticalAlignmentSet()) {
225 label.setVerticalAlignment(getVerticalAlignment());
226 }
227 if (isVerticalTextPositionSet()) {
228 label.setVerticalTextPosition(getVerticalTextPosition());
229 }
230 }
231
232 public void applyPropertiesTo(AbstractButton button) {
233 if (noPropertiesSet()) {
234 return;
235 }
236 if (isBackgroundSet()) {
237 button.setBackground(getBackground());
238 }
239 if (isForegroundSet()) {
240 button.setForeground(getForeground());
241 }
242 if (isFontSet()) {
243 button.setFont(getFont());
244 }
245 if (isHorizontalAlignmentSet()) {
246 button.setHorizontalAlignment(getHorizontalAlignment());
247 }
248 if (isHorizontalTextPositionSet()) {
249 button.setHorizontalTextPosition(getHorizontalTextPosition());
250 }
251 if (isIconSet()) {
252 button.setIcon(getIcon());
253 }
254 if (isIconTextGapSet()) {
255 button.setIconTextGap(getIconTextGap());
256 }
257 if (isTextSet()) {
258 button.setText(getText());
259 }
260 if (isVerticalAlignmentSet()) {
261 button.setVerticalAlignment(getVerticalAlignment());
262 }
263 if (isVerticalTextPositionSet()) {
264 button.setVerticalTextPosition(getVerticalTextPosition());
265 }
266 }
267
268 public void applyPropertiesTo(LabelProperties props) {
269 if (noPropertiesSet()) {
270 return;
271 }
272 if (isBackgroundSet()) {
273 props.setBackground(getBackground());
274 }
275 if (isForegroundSet()) {
276 props.setForeground(getForeground());
277 }
278 if (isFontSet()) {
279 props.setFont(getFont());
280 }
281 if (isHorizontalAlignmentSet()) {
282 props.setHorizontalAlignment(getHorizontalAlignment());
283 }
284 if (isHorizontalTextPositionSet()) {
285 props.setHorizontalTextPosition(getHorizontalTextPosition());
286 }
287 if (isIconSet()) {
288 props.setIcon(getIcon());
289 }
290 if (isIconTextGapSet()) {
291 props.setIconTextGap(getIconTextGap());
292 }
293 if (isTextSet()) {
294 props.setText(getText());
295 }
296 if (isVerticalAlignmentSet()) {
297 props.setVerticalAlignment(getVerticalAlignment());
298 }
299 if (isVerticalTextPositionSet()) {
300 props.setVerticalTextPosition(getVerticalTextPosition());
301 }
302 }
303
304 public void applyPropertiesTo(TableCellRenderer renderer) {
305 if (renderer instanceof JLabel) {
306 applyPropertiesTo( (JLabel) renderer);
307 }
308 else if (renderer instanceof AbstractButton) {
309 applyPropertiesTo( (AbstractButton) renderer);
310 }
311 }
312 }