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 abstract class XScrollbar extends XAWTPanel {
24 protected Scrollbar scrollbar;
25 private static int propertyCount = 13;
26 private Object propDef[];
27 private boolean propDefSet = false;
28 private static int eventCount = 7;
29 private String events[] = new String[eventCount];
31 private int orientation;
32 private String orientationStr;
34 public XScrollbar(int aOrientation, String aOrientationStr) {
35 super(XAWTPanel.WITH_DRAGBORDER);
36 setComponent(scrollbar = new Scrollbar(aOrientation));
37 orientation = aOrientation;
38 orientationStr = aOrientationStr;
39 propDef = new Object[propertyCount];
40 for (int i=0; i<propertyCount; i++)
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] = "java.awt.Scrollbar";
55 private boolean propertyDefault(int i) throws XFPropertyIndexOutOfBoundsException {
57 propertiesSetDefault();
58 if (propDef[i] == null)
61 case 0: return ((Color) propDef[i]).equals(scrollbar.getBackground());
62 case 1: return ((Color) propDef[i]).equals(scrollbar.getForeground());
63 case 2: return (((Boolean) propDef[i]).booleanValue() == scrollbar.isEnabled());
64 case 3: return (((Boolean) propDef[i]).booleanValue() == bVisible);
65 case 4: return (((Boolean) propDef[i]).booleanValue() == autoSize);
66 case 5: return (((Boolean) propDef[i]).booleanValue() == parentColor);
68 case 7: return (((Integer) propDef[i]).intValue() == scrollbar.getValue());
69 case 8: return (((Integer) propDef[i]).intValue() == scrollbar.getMinimum());
70 case 9: return (((Integer) propDef[i]).intValue() == scrollbar.getMaximum());
71 case 10: return (((Integer) propDef[i]).intValue() == scrollbar.getLineIncrement());
72 case 11: return (((Integer) propDef[i]).intValue() == scrollbar.getPageIncrement());
73 case 12: return (((Integer) propDef[i]).intValue() == scrollbar.getVisible());
74 default: throw new XFPropertyIndexOutOfBoundsException();
78 private void propertiesSetDefault() {
82 if (scrollbar.getBackground() != null)
83 propDef[0] = new Color(scrollbar.getBackground().getRGB());
84 if (scrollbar.getForeground() != null)
85 propDef[1] = new Color(scrollbar.getForeground().getRGB());
86 propDef[2] = new Boolean(scrollbar.isEnabled());
87 propDef[3] = new Boolean(bVisible);
88 propDef[4] = new Boolean(autoSize);
89 propDef[5] = new Boolean(parentColor);
90 propDef[7] = new Integer(scrollbar.getValue());
91 propDef[8] = new Integer(scrollbar.getMinimum());
92 propDef[9] = new Integer(scrollbar.getMaximum());
93 propDef[10] = new Integer(scrollbar.getLineIncrement());
94 propDef[11] = new Integer(scrollbar.getPageIncrement());
95 propDef[12] = new Integer(scrollbar.getVisible());
98 public int getPropertyCount() { return propertyCount; }
100 public Object getProperty(int index) throws XFPropertyIndexOutOfBoundsException {
102 case 0: return scrollbar.getBackground();
103 case 1: return scrollbar.getForeground();
104 case 2: return (scrollbar.isEnabled()) ? Boolean.TRUE : Boolean.FALSE;
105 case 3: return (bVisible) ? Boolean.TRUE : Boolean.FALSE;
106 case 4: return (autoSize) ? Boolean.TRUE : Boolean.FALSE;
107 case 5: return (parentColor) ? Boolean.TRUE : Boolean.FALSE;
108 case 6: return orientationStr;
109 case 7: return new Integer(scrollbar.getValue());
110 case 8: return new Integer(scrollbar.getMinimum());
111 case 9: return new Integer(scrollbar.getMaximum());
112 case 10: return new Integer(scrollbar.getLineIncrement());
113 case 11: return new Integer(scrollbar.getPageIncrement());
114 case 12: return new Integer(scrollbar.getVisible());
115 default: throw new XFPropertyIndexOutOfBoundsException();
119 public String[] getPropertyNames() {
120 String list[] = new String[propertyCount];
121 list[0] = "Background Color";
122 list[1] = "Foreground Color";
125 list[4] = "Auto Size";
126 list[5] = "Parent Color";
127 list[6] = "Orientation";
131 list[10] = "Line Increment";
132 list[11] = "Page Increment";
133 list[12] = "Visible Amount";
137 public String getPropertyString(int index) throws
138 XFPropertyIndexOutOfBoundsException {
141 case 1: return XColorPropertyType.viewString(getProperty(index));
143 case 3: return XBooleanPropertyType.viewString(getProperty(index));
145 case 5: return XBooleanPropertyType.viewString(getProperty(index));
146 case 6: return orientationStr;
152 case 12: return XIntegerPropertyType.viewString(getProperty(index));
153 default: throw new XFPropertyIndexOutOfBoundsException();
157 public int getPropertyViewerType(int index) throws
158 XFPropertyIndexOutOfBoundsException {
161 case 1: return XFDesignConstants.PVT_SPECIAL;
165 case 5: return XFDesignConstants.PVT_CHECK;
166 case 6: return XFDesignConstants.PVT_READONLY;
172 case 12: return XFDesignConstants.PVT_INPUT_INT;
173 default: throw new XFPropertyIndexOutOfBoundsException();
177 public String[] getPropertyValueNames(int index) throws
178 XFPropertyIndexOutOfBoundsException {
180 default: throw new XFPropertyIndexOutOfBoundsException();
184 public Object[] getPropertyValueValues(int index) throws
185 XFPropertyIndexOutOfBoundsException {
187 default: throw new XFPropertyIndexOutOfBoundsException();
191 public int setProperty(int index, Object value) throws
192 XFPropertyIndexOutOfBoundsException,
193 XFPropertyBadValueTypeException
195 int ret = XFDesignConstants.RSP_OK;
196 int regen = XFDesignConstants.GEN_SETPROPS;
198 propertiesSetDefault();
200 case 0: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
201 scrollbar.setBackground((Color)value);
202 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
207 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
210 case 1: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
211 scrollbar.setForeground((Color)value);
212 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
217 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
220 case 2: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
221 scrollbar.enable(((Boolean)value).booleanValue());
223 case 3: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
224 bVisible = ((Boolean)value).booleanValue();
226 case 4: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
227 setAutoSize(((Boolean)value).booleanValue());
231 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
233 regen = regen | XFDesignConstants.GEN_RESHAPE;
234 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
236 case 5: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
237 setParentColor(((Boolean)value).booleanValue());
239 ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
241 case 7: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
242 scrollbar.setValue(((Integer)value).intValue());
243 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
245 case 8: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
246 scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
247 ((Integer)value).intValue(), scrollbar.getMaximum());
248 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
250 case 9: if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
251 scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
252 scrollbar.getMinimum(), ((Integer)value).intValue());
253 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
255 case 10:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
256 scrollbar.setLineIncrement(((Integer)value).intValue());
257 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
259 case 11:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
260 scrollbar.setPageIncrement(((Integer)value).intValue());
261 ret = ret | XFDesignConstants.RSP_OTHER_PROP;
263 case 12:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
264 scrollbar.setValues(scrollbar.getValue(),((Integer)value).intValue(),
265 scrollbar.getMinimum(), scrollbar.getMaximum());
268 default: throw new XFPropertyIndexOutOfBoundsException();
270 if (parentForm != null)
271 parentForm.regenerateCode(this, regen);
276 public void specialPropertyInput(Frame parent, int index) throws
277 XFPropertyIndexOutOfBoundsException,
278 XFPropertyNoSpecialInputException {
279 if ((index < 0) || (index >= propertyCount)) throw new XFPropertyIndexOutOfBoundsException();
282 case 1: XColorPropertyType.invokeSpecialInput(parent, this, index);
284 default: throw new XFPropertyNoSpecialInputException();
288 public int getEventCount() {
292 public String[] getEventNames() {
293 String list[] = new String[eventCount];
294 list[0] = "OnGotFocus";
295 list[1] = "OnLostFocus";
296 list[2] = "OnScrollAbolute";
297 list[3] = "OnScrollLineDown";
298 list[4] = "OnScrollLineUp";
299 list[5] = "OnScrollPageDown";
300 list[6] = "OnScrollPageUp";
304 public String getEvent(int index) throws
305 XFPropertyIndexOutOfBoundsException {
306 if ((index>=0) && (index<eventCount)) {
307 if (events[index] == null)
310 return new String(events[index]);
312 else throw new XFPropertyIndexOutOfBoundsException();
315 public void setEvent(int index, String value) throws
316 XFPropertyIndexOutOfBoundsException {
317 if ((index>=0) && (index<eventCount))
318 events[index] = value;
319 else throw new XFPropertyIndexOutOfBoundsException();
322 public String getClassName() {
326 public String generateCode(int what) {
329 case XFDesignConstants.GEN_VARIABLE:
330 gen = getClassName()+" "+ name + ";\n";
332 case XFDesignConstants.GEN_INIT:
333 gen = name + " = new " + getClassName() + "(Scrollbar." + orientationStr + ");\n";
335 case XFDesignConstants.GEN_SETPROPS:
337 propertiesSetDefault();
338 for (int i = 0; i < propertyCount; i++) {
339 if (!propertyDefault(i)) {
341 case 0: if (!parentColor)
342 gen = gen + name + ".setBackground(" +
343 XFDesignUtils.genColor(scrollbar.getBackground()) + ");\n";
345 case 1: if (!parentColor)
346 gen = gen + name + ".setForeground(" +
347 XFDesignUtils.genColor(scrollbar.getForeground()) + ");\n";
349 case 2: gen = gen + name + (scrollbar.isEnabled() ? ".enable();\n" : ".disable();\n");
351 case 3: gen = gen + name + ((bVisible) ? ".show();\n" : ".hide();\n");
353 case 7: //generate properties 7,8,9,12
354 if ((!propertyDefault(8))||(!propertyDefault(9))||(!propertyDefault(12))) {
355 gen = gen + name + ".setValues(" + scrollbar.getValue() + "," +
356 scrollbar.getVisible() + "," + scrollbar.getMinimum() + "," +
357 scrollbar.getMaximum() + ");\n";
360 if (!propertyDefault(8))
361 gen = gen + name + ".setMinimum(" + scrollbar.getMinimum() + ");\n";
362 if (!propertyDefault(9))
363 gen = gen + name + ".setMaximum(" + scrollbar.getMaximum() + ");\n";
364 if (!propertyDefault(12))
365 gen = gen + name + ".setVisible(" + scrollbar.getVisible() + ");\n";
371 case 10: gen = gen + name + ".setLineIncrement(" + scrollbar.getLineIncrement() + ");\n";
372 case 11: gen = gen + name + ".setPageIncrement(" + scrollbar.getPageIncrement() + ");\n";
379 case XFDesignConstants.GEN_RESHAPE:
380 if (((XelfiVisualContainer) getParent()).getDesignLayout().allowsDragging()) {
382 if (getParent() instanceof XelfiDesignForm)
383 gen = name + ".reshape(insets.left+"+position.x+", insets.top+"+position.y+","+size.width+","+size.height+");\n";
385 gen = name + ".reshape("+position.x+","+position.y+","+size.width+","+size.height+");\n";
387 gen = name + ".resize(" + name + ".preferredSize());\n";
388 if (getParent() instanceof XelfiDesignForm)
389 gen = gen + name + ".move(insets.left+"+position.x+", insets.top+"+position.y+");\n";
391 gen = gen + name + ".move("+position.x+","+position.y+");\n";
399 public String generateEventCondition(int index) throws XFPropertyIndexOutOfBoundsException {
400 String evt = XFDesignOptions.eventVarName;
402 case 0: return evt +".id == Event.GOT_FOCUS && "+evt+".target == "+getName();
403 case 1: return evt +".id == Event.LOST_FOCUS && "+evt+".target == "+getName();
404 case 2: return evt +".id == Event.SCROLL_ABSOLUTE && "+evt+".target == "+getName();
405 case 3: return evt +".id == Event.SCROLL_LINE_DOWN && "+evt+".target == "+getName();
406 case 4: return evt +".id == Event.SCROLL_LINE_UP && "+evt+".target == "+getName();
407 case 5: return evt +".id == Event.SCROLL_PAGE_DOWN && "+evt+".target == "+getName();
408 case 6: return evt +".id == Event.SCROLL_PAGE_UP && "+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()) {
425 case 0: scrollbar.setBackground(XColorPropertyType.loadFromStream(stream)); break;
426 case 1: scrollbar.setForeground(XColorPropertyType.loadFromStream(stream)); break;
427 case 2: scrollbar.enable(XBooleanPropertyType.loadBFromStream(stream)); break;
428 case 3: bVisible = XBooleanPropertyType.loadBFromStream(stream); break;
429 case 4: setAutoSize(XBooleanPropertyType.loadBFromStream(stream)); break;
430 case 5: setParentColor(XBooleanPropertyType.loadBFromStream(stream)); break;
431 case 6: scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
432 XIntegerPropertyType.loadFromStream(stream).intValue(),scrollbar.getMaximum()); break;
433 case 7: scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
434 scrollbar.getMinimum(),XIntegerPropertyType.loadFromStream(stream).intValue()); break;
435 case 8: scrollbar.setValue(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
436 case 9: scrollbar.setLineIncrement(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
437 case 10: scrollbar.setPageIncrement(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
438 case 11: scrollbar.setValues(scrollbar.getValue(),XIntegerPropertyType.loadFromStream(stream).intValue(),
439 scrollbar.getMinimum(),scrollbar.getMaximum()); break;
443 for (int i = 0; i < eventCount; i++)
444 if (stream.readBoolean())
445 parentForm.assignEvent(this, i, stream.readUTF());
448 public void saveToStream(DataOutput stream) throws IOException {
450 super.saveToStream(stream);
452 for (int i = 0; i < propertyCount; i++) {
453 boolean b = propertyDefault(i);
454 stream.writeBoolean(b);
457 case 0: XColorPropertyType.saveToStream(scrollbar.getBackground(), stream); break;
458 case 1: XColorPropertyType.saveToStream(scrollbar.getForeground(), stream); break;
459 case 2: XBooleanPropertyType.saveToStream(scrollbar.isEnabled(), stream); break;
460 case 3: XBooleanPropertyType.saveToStream(bVisible, stream); break;
461 case 4: XBooleanPropertyType.saveToStream(autoSize, stream); break;
462 case 5: XBooleanPropertyType.saveToStream(parentColor, stream); break;
463 case 6: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getMinimum()), stream); break;
464 case 7: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getMaximum()), stream); break;
465 case 8: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getValue()), stream); break;
466 case 9: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getLineIncrement()), stream); break;
467 case 10: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getPageIncrement()), stream); break;
468 case 11: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getVisible()), stream); break;
473 for (int i = 0; i < eventCount; i++) {
474 if ((events[i] != null) && (events[i].length() > 0)) {
475 stream.writeBoolean(true);
476 stream.writeUTF(events[i]);
478 else stream.writeBoolean(false);