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
16 import xelfi.awt.SpinEdit;
17 import xelfi.awt.SpinButton;
18 import xelfi.design.components.*;
19 import xelfi.design.components.property.*;
20 import xelfi.design.forms.XelfiDesignForm;
21 import xelfi.design.util.*;
23 public class XSpinEdit extends XAWTPanel {
24 private SpinEdit spin;
26 private static int propertyCount = 14;
27 private Object propDef[];
28 private boolean propDefSet = false;
29 private static int eventCount = 4;
30 private String events[] = new String[eventCount];
31 protected static Image icon = null;
34 super(XAWTPanel.WITH_DRAGBORDER);
35 setComponent(spin = new SpinEdit());
36 spin.propagate = true;
37 propDef = new Object[propertyCount];
38 for (int i=0; i<propertyCount; i++)
41 icon = loadIcon("spinedit.gif");
44 protected void regenForm(int what) {
45 if (parentForm != null)
46 parentForm.regenerateCode(this, what);
49 public String[] neededImports() {
50 String[] ret = new String[1];
51 ret[0] = "xelfi.awt.SpinEdit";
55 public Image getIcon() {
59 public boolean handleEvent(Event evt) {
61 if (XFDesignOptions.designMode == XFDesignConstants.DM_REAL)
62 spin.propagate = false;
64 spin.propagate = true;
65 boolean b = super.handleEvent(evt);
66 if (XFDesignOptions.designMode == XFDesignConstants.DM_REAL)
71 private boolean propertyDefault(int i) throws XFPropertyIndexOutOfBoundsException {
73 propertiesSetDefault();
74 if (propDef[i] == null)
77 case 0: return ((Color) propDef[i]).equals(spin.getBackground());
78 case 1: return ((Color) propDef[i]).equals(spin.getForeground());
79 case 2: return (((Boolean) propDef[i]).booleanValue() == spin.isEnabled());
80 case 3: return (((Boolean) propDef[i]).booleanValue() == bVisible);
81 case 4: return (((Boolean) propDef[i]).booleanValue() == autoSize);
82 case 5: return (((Boolean) propDef[i]).booleanValue() == parentColor);
83 case 6: return (((Integer) propDef[i]).intValue() == spin.getValue());
84 case 7: return (SpinButton.defaultMinimum == spin.getMinimum());
85 case 8: return (SpinButton.defaultMaximum == spin.getMaximum());
86 case 9: return (SpinButton.defaultStep == spin.getStep());
87 case 10: return (SpinButton.defaultRepeatDelay == spin.getDelay());
88 case 11: return (SpinButton.defaultRepeatRate == spin.getRate());
89 case 12: return ((Font) propDef[i]).equals(spin.getFont());
90 case 13: return (((Boolean) propDef[i]).booleanValue() == parentFont);
91 default: throw new XFPropertyIndexOutOfBoundsException();
95 private void propertiesSetDefault() {
99 if (getBackground() != null)
100 propDef[0] = new Color(spin.getBackground().getRGB());
101 if (getForeground() != null)
102 propDef[1] = new Color(spin.getForeground().getRGB());
103 propDef[2] = new Boolean(spin.isEnabled());
104 propDef[3] = new Boolean(bVisible);
105 propDef[4] = new Boolean(autoSize);
106 propDef[5] = new Boolean(parentColor);
107 propDef[6] = new Integer(spin.getValue());
108 propDef[7] = new Integer(-1);
109 propDef[8] = new Integer(-1);
110 propDef[9] = new Integer(-1);
111 propDef[10] = new Integer(-1);
112 propDef[11] = new Integer(-1);
113 if (spin.getFont() != null)
114 propDef[12] = new Font(spin.getFont().getName(),spin.getFont().getStyle(),spin.getFont().getSize());
115 propDef[13] = new Boolean(parentFont);
118 public int getPropertyCount() { return propertyCount; }
120 public Object getProperty(int index) throws XFPropertyIndexOutOfBoundsException {
122 case 0: return spin.getBackground();
123 case 1: return spin.getForeground();
124 case 2: return (spin.isEnabled()) ? Boolean.TRUE : Boolean.FALSE;
125 case 3: return (bVisible) ? Boolean.TRUE : Boolean.FALSE;
126 case 4: return (autoSize) ? Boolean.TRUE : Boolean.FALSE;
127 case 5: return (parentColor) ? Boolean.TRUE : Boolean.FALSE;
128 case 6: return new Integer(spin.getValue());
129 case 7: return new Integer(spin.getMinimum());
130 case 8: return new Integer(spin.getMaximum());
131 case 9: return new Integer(spin.getStep());
132 case 10: return new Integer(spin.getDelay());
133 case 11: return new Integer(spin.getRate());
134 case 12: return spin.getFont();
135 case 13: return (parentFont) ? Boolean.TRUE : Boolean.FALSE;
136 default: throw new XFPropertyIndexOutOfBoundsException();
140 public String[] getPropertyNames() {
141 String list[] = new String[propertyCount];
142 list[0] = new String("Background Color");
143 list[1] = new String("Foreground Color");
144 list[2] = new String("Enabled");
145 list[3] = new String("Visible");
146 list[4] = new String("Auto Size");
147 list[5] = new String("Parent Color");
148 list[6] = new String("Value");
149 list[7] = new String("Minimum");
150 list[8] = new String("Maximum");
151 list[9] = new String("Step");
152 list[10] = new String("Repeat Delay");
153 list[11] = new String("Repeat Rate");
154 list[12] = new String("Font");
155 list[13] = new String("Parent Font");
159 public String getPropertyString(int index) throws
160 XFPropertyIndexOutOfBoundsException {
163 case 1: return XColorPropertyType.viewString(getProperty(index));
167 case 5: return XBooleanPropertyType.viewString(getProperty(index));
173 case 11: return XIntegerPropertyType.viewString(getProperty(index));
174 case 12: return XFontPropertyType.viewString(getProperty(index));
175 case 13: return XBooleanPropertyType.viewString(getProperty(index));
176 default: throw new XFPropertyIndexOutOfBoundsException();
180 public int getPropertyViewerType(int index) throws
181 XFPropertyIndexOutOfBoundsException {
184 case 1: return XFDesignConstants.PVT_SPECIAL;
188 case 5: return XFDesignConstants.PVT_CHECK;
194 case 11: return XFDesignConstants.PVT_INPUT_INT;
195 case 12: return XFDesignConstants.PVT_SPECIAL;
196 case 13: return XFDesignConstants.PVT_CHECK;
197 default: throw new XFPropertyIndexOutOfBoundsException();
201 public String[] getPropertyValueNames(int index) throws
202 XFPropertyIndexOutOfBoundsException {
204 default: throw new XFPropertyIndexOutOfBoundsException();
208 public Object[] getPropertyValueValues(int index) throws
209 XFPropertyIndexOutOfBoundsException {
211 default: throw new XFPropertyIndexOutOfBoundsException();
215 public int setProperty(int index, Object value) throws
216 XFPropertyIndexOutOfBoundsException,
217 XFPropertyBadValueTypeException
219 int ret = XFDesignConstants.RSP_OK;
220 int regen = XFDesignConstants.GEN_SETPROPS;
222 propertiesSetDefault();
224 case 0: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
225 spin.setBackground((Color)value);
226 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
229 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
233 case 1: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
234 spin.setForeground((Color)value);
235 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
238 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
242 case 2: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
243 spin.enable(((Boolean)value).booleanValue());
245 case 3: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
246 bVisible = ((Boolean)value).booleanValue();
248 case 4: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
249 setAutoSize(((Boolean)value).booleanValue());
252 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
255 regen = regen | XFDesignConstants.GEN_RESHAPE;
256 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
258 case 5: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
259 setParentColor(((Boolean)value).booleanValue());
261 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
263 case 6: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
264 spin.setValue(((Integer)value).intValue());
265 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
267 case 7: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
268 spin.setMinimum(((Integer)value).intValue());
269 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
271 case 8: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
272 spin.setMaximum(((Integer)value).intValue());
273 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
275 case 9: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
276 spin.setStep(((Integer)value).intValue());
277 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
279 case 10: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
280 spin.setDelay(((Integer)value).intValue());
282 case 11:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
283 spin.setRate(((Integer)value).intValue());
285 case 12: if (!(value instanceof Font)) throw new XFPropertyBadValueTypeException();
286 spin.setFont((Font)value);
287 ret = ret | XFDesignConstants.RSP_REPAINT_COMP | XFDesignConstants.RSP_OTHER_PROP;
290 if (autoSize) setDesignSize(0,0);
294 case 13: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
295 setParentFont(((Boolean)value).booleanValue());
297 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
299 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
301 default: throw new XFPropertyIndexOutOfBoundsException();
308 public void specialPropertyInput(Frame parent, int index) throws
309 XFPropertyIndexOutOfBoundsException,
310 XFPropertyNoSpecialInputException {
311 if ((index < 0) || (index >= propertyCount)) throw new XFPropertyIndexOutOfBoundsException();
314 case 1: XColorPropertyType.invokeSpecialInput(parent, this, index);
316 case 12: XFontPropertyType.invokeSpecialInput(parent, this, index);
318 default: throw new XFPropertyNoSpecialInputException();
322 public int getEventCount() {
326 public String[] getEventNames() {
327 String list[] = new String[eventCount];
328 list[0] = "OnGotFocus";
329 list[1] = "OnLostFocus";
330 list[2] = "OnDownClick";
331 list[3] = "OnUpClick";
335 public String getEvent(int index) throws
336 XFPropertyIndexOutOfBoundsException {
337 if ((index>=0) && (index<eventCount)) {
338 if (events[index] == null)
341 return new String(events[index]);
343 else throw new XFPropertyIndexOutOfBoundsException();
346 public void setEvent(int index, String value) throws
347 XFPropertyIndexOutOfBoundsException {
348 if ((index>=0) && (index<eventCount))
349 events[index] = value;
350 else throw new XFPropertyIndexOutOfBoundsException();
353 public String getClassName() {
357 public String generateCode(int what) {
360 case XFDesignConstants.GEN_VARIABLE:
361 gen = getClassName()+" "+ name + ";\n";
363 case XFDesignConstants.GEN_INIT:
364 gen = name + " = new " + getClassName() + "();\n";
366 case XFDesignConstants.GEN_SETPROPS:
368 propertiesSetDefault();
369 for (int i = 0; i < propertyCount; i++) {
370 if (!propertyDefault(i)) {
372 case 0: if (!parentColor)
373 gen = gen + name + ".setBackground(" +
374 XFDesignUtils.genColor(spin.getBackground()) + ");\n";
376 case 1: if (!parentColor)
377 gen = gen + name + ".setForeground(" +
378 XFDesignUtils.genColor(spin.getForeground()) + ");\n";
380 case 2: gen = gen + name + (spin.isEnabled() ? ".enable();\n" : ".disable();\n");
382 case 3: gen = gen + name + ((bVisible) ? ".show();\n" : ".hide();\n");
384 case 6: gen = gen + name + ".setValue(" + spin.getValue() + ");\n";
386 case 7: gen = gen + name + ".setMinimum(" + spin.getMinimum() + ");\n";
388 case 8: gen = gen + name + ".setMaximum(" + spin.getMaximum() + ");\n";
390 case 9: gen = gen + name + ".setStep(" + spin.getStep() + ");\n";
392 case 10: gen = gen + name + ".setDelay(" + spin.getDelay() + ");\n";
394 case 11: gen = gen + name + ".setRate(" + spin.getRate() + ");\n";
396 case 12: if (!parentFont) {
397 gen = gen + name + ".setFont(" +
398 XFDesignUtils.genFont(spin.getFont())+");\n";
405 case XFDesignConstants.GEN_RESHAPE:
406 if (((XelfiVisualContainer) getParent()).getDesignLayout().allowsDragging()) {
408 if (getParent() instanceof XelfiDesignForm)
409 gen = name + ".reshape(insets.left+"+position.x+", insets.top+"+position.y+","+size.width+","+size.height+");\n";
411 gen = name + ".reshape("+position.x+","+position.y+","+size.width+","+size.height+");\n";
413 gen = name + ".resize(" + name + ".preferredSize());\n";
414 if (getParent() instanceof XelfiDesignForm)
415 gen = gen + name + ".move(insets.left+"+position.x+", insets.top+"+position.y+");\n";
417 gen = gen + name + ".move("+position.x+","+position.y+");\n";
425 public String generateEventCondition(int index) throws XFPropertyIndexOutOfBoundsException {
426 String evt = XFDesignOptions.eventVarName;
428 case 0: return evt +".id == Event.GOT_FOCUS && "+evt+".target == "+getName();
429 case 1: return evt +".id == Event.LOST_FOCUS && "+evt+".target == "+getName();
430 case 2: return evt +".id == SpinEdit.SPIN_DOWN && "+evt+".target == "+getName();
431 case 3: return evt +".id == SpinEdit.SPIN_UP && "+evt+".target == "+getName();
432 default: throw new XFPropertyIndexOutOfBoundsException();
436 public void loadFromStream(DataInput stream) throws IOException {
438 super.loadFromStream(stream);
441 propertiesSetDefault();
443 for (int i = 0; i < propertyCount; i++) {
444 if (stream.readBoolean())
447 case 0: spin.setBackground(XColorPropertyType.loadFromStream(stream)); break;
448 case 1: spin.setForeground(XColorPropertyType.loadFromStream(stream)); break;
449 case 2: spin.enable(XBooleanPropertyType.loadBFromStream(stream)); break;
450 case 3: bVisible = XBooleanPropertyType.loadBFromStream(stream); break;
451 case 4: setAutoSize(XBooleanPropertyType.loadBFromStream(stream)); break;
452 case 5: setParentColor(XBooleanPropertyType.loadBFromStream(stream)); break;
453 case 6: spin.setValue(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
454 case 7: spin.setMinimum(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
455 case 8: spin.setMaximum(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
456 case 9: spin.setStep(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
457 case 10: spin.setDelay(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
458 case 11: spin.setRate(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
459 case 12: spin.setFont(XFontPropertyType.loadFromStream(stream)); break;
460 case 13: setParentFont(XBooleanPropertyType.loadBFromStream(stream)); break;
464 for (int i = 0; i < eventCount; i++) {
465 if (stream.readBoolean())
466 parentForm.assignEvent(this, i, stream.readUTF());
470 public void saveToStream(DataOutput stream) throws IOException {
472 super.saveToStream(stream);
474 for (int i = 0; i < propertyCount; i++) {
475 boolean b = propertyDefault(i);
476 stream.writeBoolean(b);
479 case 0: XColorPropertyType.saveToStream(spin.getBackground(), stream); break;
480 case 1: XColorPropertyType.saveToStream(spin.getForeground(), stream); break;
481 case 2: XBooleanPropertyType.saveToStream(spin.isEnabled(), stream); break;
482 case 3: XBooleanPropertyType.saveToStream(bVisible, stream); break;
483 case 4: XBooleanPropertyType.saveToStream(autoSize, stream); break;
484 case 5: XBooleanPropertyType.saveToStream(parentColor, stream); break;
485 case 6: XIntegerPropertyType.saveToStream(new Integer(spin.getValue()), stream); break;
486 case 7: XIntegerPropertyType.saveToStream(new Integer(spin.getMinimum()), stream); break;
487 case 8: XIntegerPropertyType.saveToStream(new Integer(spin.getMaximum()), stream); break;
488 case 9: XIntegerPropertyType.saveToStream(new Integer(spin.getStep()), stream); break;
489 case 10: XIntegerPropertyType.saveToStream(new Integer(spin.getDelay()), stream); break;
490 case 11: XIntegerPropertyType.saveToStream(new Integer(spin.getRate()), stream); break;
491 case 12: XFontPropertyType.saveToStream(spin.getFont(), stream); break;
492 case 13: XBooleanPropertyType.saveToStream(parentFont, stream); break;
497 for (int i = 0; i < eventCount; i++) {
498 if ((events[i] != null) && (events[i].length() > 0)) {
499 stream.writeBoolean(true);
500 stream.writeUTF(events[i]);
502 else stream.writeBoolean(false);