Renaming setName to setDesignName and setSize to setDesignSize to avoid clash with added methods of java.awt.Component that return void
5 package xelfi.design.components.xawt;
9 * @version 2.12, 03 Apr 1997
10 * @author Petr Hamernik, Ian Formanek
16 import xelfi.design.components.*;
17 import xelfi.design.components.property.*;
18 import xelfi.design.forms.XelfiDesignForm;
19 import xelfi.design.util.XFDesignConstants;
20 import xelfi.design.util.XFDesignOptions;
21 import xelfi.design.util.XFDesignUtils;
23 public class XLabel extends XAWTPanel {
25 private static int propertyCount = 10;
26 private Object propDef[];
27 private boolean propDefSet = false;
28 private static int eventCount = 2;
29 private String events[] = new String[eventCount];
30 protected static Image icon = null;
32 private boolean labeled = false;
35 super(XAWTPanel.WITH_DRAGBORDER);
36 setComponent(label = new Label());
37 propDef = new Object[propertyCount];
38 for (int i=0; i<propertyCount; i++)
41 icon = loadIcon("label.gif");
44 protected void regenForm(int what) {
45 if (parentForm != null)
46 parentForm.regenerateCode(this, what);
49 public int setDesignName(String aName) {
55 super.setDesignName(aName);
56 if (!labeled) return XFDesignConstants.RSP_OTHER_PROP;
57 else return XFDesignConstants.RSP_OK;
60 public String[] neededImports() {
61 String[] ret = new String[1];
62 ret[0] = "java.awt.Label";
66 public Image getIcon() {
70 private boolean propertyDefault(int i) throws XFPropertyIndexOutOfBoundsException {
72 propertiesSetDefault();
73 if (propDef[i] == null)
76 case 0: return ((Color) propDef[i]).equals(label.getBackground());
77 case 1: return ((Color) propDef[i]).equals(label.getForeground());
78 case 2: return (((Boolean) propDef[i]).booleanValue() == label.isEnabled());
79 case 3: return (((Boolean) propDef[i]).booleanValue() == bVisible);
80 case 4: return ((Font) propDef[i]).equals(label.getFont());
82 case 6: return (((Boolean) propDef[i]).booleanValue() == autoSize);
83 case 7: return (((Boolean) propDef[i]).booleanValue() == parentColor);
84 case 8: return (((Boolean) propDef[i]).booleanValue() == parentFont);
85 case 9: return (((Integer) propDef[i]).intValue() == label.getAlignment());
86 default: throw new XFPropertyIndexOutOfBoundsException();
90 private void propertiesSetDefault() {
94 if (label.getBackground() != null)
95 propDef[0] = new Color(label.getBackground().getRGB());
96 if (label.getForeground() != null)
97 propDef[1] = new Color(label.getForeground().getRGB());
98 propDef[2] = new Boolean(label.isEnabled());
99 propDef[3] = new Boolean(bVisible);
100 if (label.getFont() != null)
101 propDef[4] = new Font(label.getFont().getName(),label.getFont().getStyle(),label.getFont().getSize());
102 propDef[5] = new String("");
103 propDef[6] = new Boolean(autoSize);
104 propDef[7] = new Boolean(parentColor);
105 propDef[8] = new Boolean(parentFont);
106 propDef[9] = new Integer(label.getAlignment());
109 public int getPropertyCount() { return propertyCount; }
111 public Object getProperty(int index) throws XFPropertyIndexOutOfBoundsException {
113 case 0: return label.getBackground();
114 case 1: return label.getForeground();
115 case 2: return (label.isEnabled()) ? Boolean.TRUE : Boolean.FALSE;
116 case 3: return (bVisible) ? Boolean.TRUE : Boolean.FALSE;
117 case 4: return label.getFont();
118 case 5: return label.getText();
119 case 6: return (autoSize) ? Boolean.TRUE : Boolean.FALSE;
120 case 7: return (parentColor) ? Boolean.TRUE : Boolean.FALSE;
121 case 8: return (parentFont) ? Boolean.TRUE : Boolean.FALSE;
122 case 9: return new Integer(label.getAlignment());
123 default: throw new XFPropertyIndexOutOfBoundsException();
127 public String[] getPropertyNames() {
128 String list[] = new String[propertyCount];
129 list[0] = "Background Color";
130 list[1] = "Foreground Color";
135 list[6] = "Auto Size";
136 list[7] = "Parent Color";
137 list[8] = "Parent Font";
138 list[9] = "Alignment";
142 public String getPropertyString(int index) throws
143 XFPropertyIndexOutOfBoundsException {
146 case 1: return XColorPropertyType.viewString(getProperty(index));
148 case 3: return XBooleanPropertyType.viewString(getProperty(index));
149 case 4: return XFontPropertyType.viewString(getProperty(index));
150 case 5: return XStringPropertyType.viewString(getProperty(index));
153 case 8: return XBooleanPropertyType.viewString(getProperty(index));
154 case 9: return XIntegerPropertyType.viewString(getProperty(index)); //!!!
155 default: throw new XFPropertyIndexOutOfBoundsException();
159 public int getPropertyViewerType(int index) throws
160 XFPropertyIndexOutOfBoundsException {
163 case 1: return XFDesignConstants.PVT_SPECIAL;
165 case 3: return XFDesignConstants.PVT_CHECK;
166 case 4: return XFDesignConstants.PVT_SPECIAL;
167 case 5: return XFDesignConstants.PVT_INPUT_STRING;
170 case 8: return XFDesignConstants.PVT_CHECK;
171 case 9: return XFDesignConstants.PVT_CHOICE_STRICT;
172 default: throw new XFPropertyIndexOutOfBoundsException();
176 public String[] getPropertyValueNames(int index) throws
177 XFPropertyIndexOutOfBoundsException {
179 case 9: String[] ret = new String[3];
184 default: throw new XFPropertyIndexOutOfBoundsException();
188 public Object[] getPropertyValueValues(int index) throws
189 XFPropertyIndexOutOfBoundsException {
191 case 9: Integer[] ret = new Integer[3];
192 ret[0] = new Integer(label.CENTER);
193 ret[1] = new Integer(label.LEFT);
194 ret[2] = new Integer(label.RIGHT);
196 default: throw new XFPropertyIndexOutOfBoundsException();
200 public int setProperty(int index, Object value) throws
201 XFPropertyIndexOutOfBoundsException,
202 XFPropertyBadValueTypeException
204 int ret = XFDesignConstants.RSP_OK;
205 int regen = XFDesignConstants.GEN_SETPROPS;
207 propertiesSetDefault();
209 case 0: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
210 label.setBackground((Color)value);
211 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
216 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
219 case 1: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
220 label.setForeground((Color)value);
221 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
226 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
229 case 2: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
230 label.enable(((Boolean)value).booleanValue());
232 case 3: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
233 bVisible = ((Boolean)value).booleanValue();
235 case 4: if (!(value instanceof Font)) throw new XFPropertyBadValueTypeException();
236 label.setFont((Font)value);
237 ret = ret | XFDesignConstants.RSP_REPAINT_COMP | XFDesignConstants.RSP_OTHER_PROP;
242 regen = regen | XFDesignConstants.GEN_RESHAPE;
247 case 5: if (!(value instanceof String)) throw new XFPropertyBadValueTypeException();
248 label.setText((String)value);
249 labeled = true; // so that caption of a button does not change with its name no more
250 regen = regen | XFDesignConstants.GEN_INIT;
253 regen = regen | XFDesignConstants.GEN_RESHAPE;
254 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
255 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
259 case 6: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
260 setAutoSize(((Boolean)value).booleanValue());
264 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
266 regen = regen | XFDesignConstants.GEN_RESHAPE;
267 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
269 case 7: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
270 setParentColor(((Boolean)value).booleanValue());
272 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
274 case 8: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
275 setParentFont(((Boolean)value).booleanValue());
277 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
279 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
281 case 9: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
282 label.setAlignment(((Integer)value).intValue());
283 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
285 default: throw new XFPropertyIndexOutOfBoundsException();
287 if (parentForm != null)
288 parentForm.regenerateCode(this, regen);
293 public void specialPropertyInput(Frame parent, int index) throws
294 XFPropertyIndexOutOfBoundsException,
295 XFPropertyNoSpecialInputException {
296 if ((index < 0) || (index >= propertyCount)) throw new XFPropertyIndexOutOfBoundsException();
299 case 1: XColorPropertyType.invokeSpecialInput(parent, this, index);
301 case 4: XFontPropertyType.invokeSpecialInput(parent, this, index);
303 default: throw new XFPropertyNoSpecialInputException();
307 public int getEventCount() {
311 public String[] getEventNames() {
312 String list[] = new String[eventCount];
313 list[0] = "OnGotFocus";
314 list[1] = "OnLostFocus";
318 public String getEvent(int index) throws
319 XFPropertyIndexOutOfBoundsException {
320 if ((index>=0) && (index<eventCount)) {
321 if (events[index] == null)
324 return new String(events[index]);
326 else throw new XFPropertyIndexOutOfBoundsException();
329 public void setEvent(int index, String value) throws
330 XFPropertyIndexOutOfBoundsException {
331 if ((index>=0) && (index<eventCount))
332 events[index] = value;
333 else throw new XFPropertyIndexOutOfBoundsException();
336 public String getClassName() {
340 public String generateCode(int what) {
343 case XFDesignConstants.GEN_VARIABLE:
344 gen = getClassName()+" "+ name + ";\n";
346 case XFDesignConstants.GEN_INIT:
347 gen = name + " = new " + getClassName() + "(\"" + label.getText() + "\");\n";
349 case XFDesignConstants.GEN_SETPROPS:
351 propertiesSetDefault();
352 for (int i = 0; i < propertyCount; i++) {
353 if (!propertyDefault(i)) {
355 case 0: if (!parentColor)
356 gen = gen + name + ".setBackground(" +
357 XFDesignUtils.genColor(label.getBackground()) + ");\n";
359 case 1: if (!parentColor)
360 gen = gen + name + ".setForeground(" +
361 XFDesignUtils.genColor(label.getForeground()) + ");\n";
363 case 2: gen = gen + name + (label.isEnabled() ? ".enable();\n" : ".disable();\n");
365 case 3: gen = gen + name + ((bVisible) ? ".show();\n" : ".hide();\n");
367 case 4: if (!parentFont) {
368 gen = gen + name + ".setFont(" +
369 XFDesignUtils.genFont(label.getFont())+");\n";
372 case 9: gen = gen + name + ".setAlignment(Label.";
373 switch (label.getAlignment()) {
374 case Label.CENTER: gen = gen + "CENTER"; break;
375 case Label.LEFT: gen = gen + "LEFT"; break;
376 case Label.RIGHT: gen = gen + "RIGHT"; break;
384 case XFDesignConstants.GEN_RESHAPE:
385 if (((XelfiVisualContainer) getParent()).getDesignLayout().allowsDragging()) {
387 if (getParent() instanceof XelfiDesignForm)
388 gen = name + ".reshape(insets.left+"+position.x+", insets.top+"+position.y+","+size.width+","+size.height+");\n";
390 gen = name + ".reshape("+position.x+","+position.y+","+size.width+","+size.height+");\n";
392 gen = name + ".resize(" + name + ".preferredSize());\n";
393 if (getParent() instanceof XelfiDesignForm)
394 gen = gen + name + ".move(insets.left+"+position.x+", insets.top+"+position.y+");\n";
396 gen = gen + name + ".move("+position.x+","+position.y+");\n";
404 public String generateEventCondition(int index) throws XFPropertyIndexOutOfBoundsException {
405 String evt = XFDesignOptions.eventVarName;
407 case 0: return evt +".id == Event.GOT_FOCUS && "+evt+".target == "+getName();
408 case 1: return evt +".id == Event.LOST_FOCUS && "+evt+".target == "+getName();
409 default: throw new XFPropertyIndexOutOfBoundsException();
413 public void loadFromStream(DataInput stream) throws IOException {
415 super.loadFromStream(stream);
418 propertiesSetDefault();
420 for (int i = 0; i < propertyCount; i++) {
421 if (stream.readBoolean()) {
424 label.setText(name); // default label = component name
427 case 0: label.setBackground(XColorPropertyType.loadFromStream(stream)); break;
428 case 1: label.setForeground(XColorPropertyType.loadFromStream(stream)); break;
429 case 2: label.enable(XBooleanPropertyType.loadBFromStream(stream)); break;
430 case 3: bVisible = XBooleanPropertyType.loadBFromStream(stream); break;
431 case 4: label.setFont(XFontPropertyType.loadFromStream(stream)); break;
432 case 5: label.setText(XStringPropertyType.loadFromStream(stream)); break;
433 case 6: setAutoSize(XBooleanPropertyType.loadBFromStream(stream)); break;
434 case 7: setParentColor(XBooleanPropertyType.loadBFromStream(stream)); break;
435 case 8: setParentFont(XBooleanPropertyType.loadBFromStream(stream)); break;
436 case 9: label.setAlignment(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
440 for (int i = 0; i < eventCount; i++) {
441 if (stream.readBoolean())
442 parentForm.assignEvent(this, i, stream.readUTF());
446 public void saveToStream(DataOutput stream) throws IOException {
448 super.saveToStream(stream);
450 for (int i = 0; i < propertyCount; i++) {
451 boolean b = propertyDefault(i);
452 stream.writeBoolean(b);
455 case 0: XColorPropertyType.saveToStream(label.getBackground(), stream); break;
456 case 1: XColorPropertyType.saveToStream(label.getForeground(), stream); break;
457 case 2: XBooleanPropertyType.saveToStream(label.isEnabled(), stream); break;
458 case 3: XBooleanPropertyType.saveToStream(bVisible, stream); break;
459 case 4: XFontPropertyType.saveToStream(label.getFont(), stream); break;
460 case 5: XStringPropertyType.saveToStream(label.getText(), stream); break;
461 case 6: XBooleanPropertyType.saveToStream(autoSize, stream); break;
462 case 7: XBooleanPropertyType.saveToStream(parentColor, stream); break;
463 case 8: XBooleanPropertyType.saveToStream(parentFont, stream); break;
464 case 9: XIntegerPropertyType.saveToStream(new Integer(label.getAlignment()), stream); break;
468 for (int i = 0; i < eventCount; i++) {
469 if ((events[i] != null) && (events[i].length() > 0)) {
470 stream.writeBoolean(true);
471 stream.writeUTF(events[i]);
473 else stream.writeBoolean(false);