575cae1edf82200bf33ca120dbce3bdddcb9e338
[scilab.git] / scilab / modules / graphic_objects / src / java / org / scilab / modules / graphic_objects / uicontrol / Uicontrol.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Bruno JOFRET
4  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13
14 package org.scilab.modules.graphic_objects.uicontrol;
15
16 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_LAYOUT_SET__;
17 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_LAYOUT__;
18 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_MARGINS__;
19 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
20 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_STYLE__;
21 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UICONTROL__;
22 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BACKGROUNDCOLOR__;
23 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BORDER_POSITION__;
24 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKBOX__;
25 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_EDIT__;
26 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
27 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTANGLE__;
28 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTNAME__;
29 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTSIZE__;
30 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTUNITS__;
31 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTWEIGHT__;
32 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
33 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FRAME__;
34 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_ANCHOR__;
35 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_FILL__;
36 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_GRID__;
37 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_PADDING__;
38 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_WEIGHT__;
39 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRID_GRID__;
40 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRID_PADDING__;
41 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_HORIZONTALALIGNMENT__;
42 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_IMAGE__;
43 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOXTOP_SIZE__;
44 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOXTOP__;
45 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOX__;
46 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_MAX__;
47 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_MIN__;
48 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_POPUPMENU__;
49 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_PUSHBUTTON__;
50 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_RADIOBUTTON__;
51 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_RELIEF__;
52 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_SLIDERSTEP__;
53 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_SLIDER__;
54 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_STRING_COLNB__;
55 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_STRING_SIZE__;
56 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_STRING__;
57 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TABGROUP__;
58 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TABLE__;
59 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TAB__;
60 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TEXT__;
61 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TOOLTIPSTRING_SIZE__;
62 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TOOLTIPSTRING__;
63 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_UNITS__;
64 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VALUE_SIZE__;
65 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VALUE__;
66 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VERTICALALIGNMENT__;
67
68 import java.util.Arrays;
69 import java.util.StringTokenizer;
70
71 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
72 import org.scilab.modules.graphic_objects.graphicObject.Visitor;
73 import org.scilab.modules.graphic_objects.utils.LayoutType;
74
75 /**
76  * @author Bruno JOFRET
77  * @author Vincent COUVERT
78  */
79 public class Uicontrol extends GraphicObject {
80
81     public enum BorderLayoutType {
82         SOUTH, NORTH, CENTER, WEST, EAST;
83         public static BorderLayoutType intToEnum(Integer value) {
84             switch (value) {
85                 case 0:
86                     return BorderLayoutType.SOUTH;
87                 case 1:
88                     return BorderLayoutType.NORTH;
89                 default:
90                 case 2:
91                     return BorderLayoutType.CENTER;
92                 case 3:
93                     return BorderLayoutType.WEST;
94                 case 4:
95                     return BorderLayoutType.EAST;
96             }
97         }
98     }
99
100     public enum FillType {
101         NONE, VERTICAL, HORIZONTAL, BOTH;
102         public static FillType intToEnum(Integer value) {
103             switch (value) {
104                 default:
105                 case 0:
106                     return FillType.NONE;
107                 case 1:
108                     return FillType.VERTICAL;
109                 case 2:
110                     return FillType.HORIZONTAL;
111                 case 3:
112                     return FillType.BOTH;
113             }
114         }
115     }
116
117     public enum AnchorType {
118         CENTER, UPPER, LOWER, RIGHT, LEFT, UPPER_RIGHT, UPPER_LEFT, LOWER_RIGHT, LOWER_LEFT;
119         public static AnchorType intToEnum(Integer value) {
120             switch (value) {
121                 default:
122                 case 0:
123                     return CENTER;
124                 case 1:
125                     return UPPER;
126                 case 2:
127                     return LOWER;
128                 case 3:
129                     return RIGHT;
130                 case 4:
131                     return LEFT;
132                 case 5:
133                     return UPPER_RIGHT;
134                 case 6:
135                     return UPPER_LEFT;
136                 case 7:
137                     return LOWER_RIGHT;
138                 case 8:
139                     return LOWER_LEFT;
140             }
141         }
142     }
143
144     protected static final String FLAT_RELIEF   = "flat";
145     protected static final String RAISED_RELIEF = "raised";
146     protected static final String SUNKEN_RELIEF = "sunken";
147     protected static final String GROOVE_RELIEF = "groove";
148     protected static final String RIDGE_RELIEF  = "ridge";
149     protected static final String SOLID_RELIEF  = "solid";
150
151     private static final double DEFAULT_RED_BACKGROUND = 0.8;
152     private static final double DEFAULT_GREEN_BACKGROUND = 0.8;
153     private static final double DEFAULT_BLUE_BACKGROUND = 0.8;
154
155     private static final double DEFAULT_X = 20.0;
156     private static final double DEFAULT_Y = 40.0;
157     private static final double DEFAULT_WIDTH = 40.0;
158     private static final double DEFAULT_HEIGHT = 20.0;
159
160     private static final double DEFAULTFONTSIZE = 10;
161     private static final String DEFAULTFONTNAME = "helvetica";
162     private static final String DEFAULTFONTWEIGHT = "normal";
163     private static final String DEFAULTFONTANGLE = DEFAULTFONTWEIGHT;
164     private static final String STRING_SEPARATOR = "|";
165
166     private UicontrolStyle style;
167     private Double[] backgroundColor = {DEFAULT_RED_BACKGROUND, DEFAULT_GREEN_BACKGROUND, DEFAULT_BLUE_BACKGROUND};
168     private boolean enable = true;
169     private String fontAngle = DEFAULTFONTANGLE;
170     private String fontName = DEFAULTFONTNAME;
171     private double fontSize = DEFAULTFONTSIZE;
172     private String fontUnits = "points";
173     private String fontWeight = DEFAULTFONTWEIGHT;
174     private Double[] foregroundColor = {0.0, 0.0, 0.0};
175     private String horizontalAlignment = "center";
176     private Integer[] listboxTop;
177     private double max = 1.0;
178     private double min;
179     private Double[] position = {DEFAULT_X, DEFAULT_Y, DEFAULT_WIDTH, DEFAULT_HEIGHT};
180     private String relief = RAISED_RELIEF;
181     private Double[] sliderStep = {0.01, 0.1};
182     private String[] string = {""};
183     private int stringColNb = 1; // Used for tables
184     private String[] tooltipString = {""};
185     private String units = "pixels";
186     private Double[] value;
187     private String verticalAlignment = "middle";
188     private LayoutType layout = LayoutType.NONE;
189     private Double[] margins = new Double[] {0.0, 0.0, 0.0, 0.0};
190     private Integer[] gridbagGrid = new Integer[] {0, 0, 0, 0};
191     private Double[] gridbagWeight = new Double[] {0.0, 0.0};
192     private FillType gridbagFill = FillType.NONE;
193     private AnchorType gridbagAnchor = AnchorType.CENTER;
194     private Integer[] gridbagPadding = new Integer[] {0, 0};
195     private Integer[] gridGrid = new Integer[] {0, 0};
196     private Integer[] gridPadding = new Integer[] {0, 0};
197     private BorderLayoutType borderPosition = BorderLayoutType.CENTER;
198
199     /**
200      * All uicontrol properties
201      */
202     private enum UicontrolProperty {
203         STYLE,
204         BACKGROUNDCOLOR,
205         ENABLE,
206         FONTANGLE,
207         FONTNAME,
208         FONTSIZE,
209         FONTUNITS,
210         FONTWEIGHT,
211         FOREGROUNDCOLOR,
212         HORIZONTALALIGNMENT,
213         LISTBOXTOP,
214         LISTBOXTOP_SIZE,
215         MAX,
216         MIN,
217         POSITION,
218         SCALE,
219         SHEAR,
220         SLIDERSTEP,
221         STRING,
222         STRING_SIZE,
223         STRING_COLNB,
224         RELIEF,
225         TOOLTIPSTRING,
226         TOOLTIPSTRING_SIZE,
227         UNITS,
228         VALUE,
229         VALUE_SIZE,
230         VERTICALALIGNMENT,
231         LAYOUT,
232         LAYOUT_SET,
233         MARGINS,
234         GRIDBAG_GRID,
235         GRIDBAG_WEIGHT,
236         GRIDBAG_FILL,
237         GRIDBAG_ANCHOR,
238         GRIDBAG_PADDING,
239         GRID_GRID,
240         GRID_PADDING,
241         BORDER_POSITION
242     };
243
244     /**
245      * All uicontrol styles
246      */
247     private enum UicontrolStyle {
248         CHECKBOX,
249         EDIT,
250         FRAME,
251         IMAGE,
252         LISTBOX,
253         POPUPMENU,
254         PUSHBUTTON,
255         RADIOBUTTON,
256         SLIDER,
257         TABLE,
258         TEXT,
259         TABGROUP,
260         TAB
261     };
262
263     /**
264      * Constructor
265      */
266     public Uicontrol() {
267         super();
268         setVisible(false); /* To avoid to see the object rendered before all its properties to be set (See bug #10346) */
269     }
270
271     /**
272      * Get style as a string
273      * @param style the uicontrol style
274      * @return the uicontrol style as a string
275      */
276     private int styleEnumToInt(UicontrolStyle style) {
277         switch (style) {
278             case CHECKBOX:
279                 return __GO_UI_CHECKBOX__;
280             case EDIT:
281                 return __GO_UI_EDIT__;
282             case FRAME:
283                 return __GO_UI_FRAME__;
284             case IMAGE:
285                 return __GO_UI_IMAGE__;
286             case LISTBOX:
287                 return __GO_UI_LISTBOX__;
288             case POPUPMENU:
289                 return __GO_UI_POPUPMENU__;
290             case PUSHBUTTON:
291                 return __GO_UI_PUSHBUTTON__;
292             case RADIOBUTTON:
293                 return __GO_UI_RADIOBUTTON__;
294             case SLIDER:
295                 return __GO_UI_SLIDER__;
296             case TABLE:
297                 return __GO_UI_TABLE__;
298             case TEXT:
299                 return __GO_UI_TEXT__;
300             case TABGROUP:
301                 return __GO_UI_TABGROUP__;
302             case TAB:
303                 return __GO_UI_TAB__;
304             default :
305                 return -1;
306         }
307     }
308
309     /**
310      * Get style as an enum element
311      * @param style the uicontrol style
312      * @return the uicontrol style as an enum element
313      */
314     private UicontrolStyle intToStyleEnum(int style) {
315         switch (style) {
316             case __GO_UI_CHECKBOX__ :
317                 return UicontrolStyle.CHECKBOX;
318             case __GO_UI_EDIT__ :
319                 return UicontrolStyle.EDIT;
320             case __GO_UI_FRAME__ :
321                 return UicontrolStyle.FRAME;
322             case __GO_UI_IMAGE__ :
323                 return  UicontrolStyle.IMAGE;
324             case __GO_UI_LISTBOX__ :
325                 return UicontrolStyle.LISTBOX;
326             case __GO_UI_POPUPMENU__ :
327                 return UicontrolStyle.POPUPMENU;
328             case __GO_UI_PUSHBUTTON__ :
329                 return UicontrolStyle.PUSHBUTTON;
330             case __GO_UI_RADIOBUTTON__ :
331                 return UicontrolStyle.RADIOBUTTON;
332             case __GO_UI_SLIDER__ :
333                 return UicontrolStyle.SLIDER;
334             case __GO_UI_TABLE__ :
335                 return UicontrolStyle.TABLE;
336             case __GO_UI_TEXT__ :
337                 return UicontrolStyle.TEXT;
338             case __GO_UI_TABGROUP__:
339                 return UicontrolStyle.TABGROUP;
340             case __GO_UI_TAB__:
341                 return UicontrolStyle.TAB;
342             default :
343                 return null;
344         }
345     }
346
347     /**
348      * Get this object type
349      * @return uicontrol
350      * @see org.scilab.modules.graphic_objects.graphicObject.GraphicObject#getType()
351      */
352     public Integer getType() {
353         return __GO_UICONTROL__;
354     }
355
356     /**
357      * Returns the enum associated to a property name
358      * @param propertyName the property name
359      * @return the property enum
360      */
361     public Object getPropertyFromName(int propertyName) {
362         switch (propertyName) {
363             case __GO_STYLE__ :
364                 return UicontrolProperty.STYLE;
365             case __GO_UI_BACKGROUNDCOLOR__ :
366                 return UicontrolProperty.BACKGROUNDCOLOR;
367             case __GO_UI_ENABLE__ :
368                 return UicontrolProperty.ENABLE;
369             case __GO_UI_FONTANGLE__ :
370                 return UicontrolProperty.FONTANGLE;
371             case __GO_UI_FONTNAME__ :
372                 return UicontrolProperty.FONTNAME;
373             case __GO_UI_FONTSIZE__ :
374                 return UicontrolProperty.FONTSIZE;
375             case __GO_UI_FONTUNITS__ :
376                 return UicontrolProperty.FONTUNITS;
377             case __GO_UI_FONTWEIGHT__ :
378                 return UicontrolProperty.FONTWEIGHT;
379             case __GO_UI_FOREGROUNDCOLOR__ :
380                 return UicontrolProperty.FOREGROUNDCOLOR;
381             case __GO_UI_HORIZONTALALIGNMENT__ :
382                 return UicontrolProperty.HORIZONTALALIGNMENT;
383             case __GO_UI_LISTBOXTOP__ :
384                 return UicontrolProperty.LISTBOXTOP;
385             case __GO_UI_LISTBOXTOP_SIZE__ :
386                 return UicontrolProperty.LISTBOXTOP_SIZE;
387             case __GO_UI_MAX__ :
388                 return UicontrolProperty.MAX;
389             case __GO_UI_MIN__ :
390                 return UicontrolProperty.MIN;
391             case __GO_POSITION__ :
392                 return UicontrolProperty.POSITION;
393             case __GO_UI_RELIEF__ :
394                 return UicontrolProperty.RELIEF;
395             case __GO_UI_SLIDERSTEP__ :
396                 return UicontrolProperty.SLIDERSTEP;
397             case __GO_UI_STRING__ :
398                 return UicontrolProperty.STRING;
399             case __GO_UI_STRING_SIZE__ :
400                 return UicontrolProperty.STRING_SIZE;
401             case __GO_UI_STRING_COLNB__ :
402                 return UicontrolProperty.STRING_COLNB;
403             case __GO_UI_TOOLTIPSTRING__ :
404                 return UicontrolProperty.TOOLTIPSTRING;
405             case __GO_UI_TOOLTIPSTRING_SIZE__ :
406                 return UicontrolProperty.TOOLTIPSTRING_SIZE;
407             case __GO_UI_UNITS__ :
408                 return UicontrolProperty.UNITS;
409             case __GO_UI_VALUE__ :
410                 return UicontrolProperty.VALUE;
411             case __GO_UI_VALUE_SIZE__ :
412                 return UicontrolProperty.VALUE_SIZE;
413             case __GO_UI_VERTICALALIGNMENT__ :
414                 return UicontrolProperty.VERTICALALIGNMENT;
415             case __GO_LAYOUT__ :
416                 return UicontrolProperty.LAYOUT;
417             case __GO_LAYOUT_SET__ :
418                 return UicontrolProperty.LAYOUT_SET;
419             case __GO_MARGINS__:
420                 return UicontrolProperty.MARGINS;
421             case __GO_UI_GRIDBAG_GRID__:
422                 return UicontrolProperty.GRIDBAG_GRID;
423             case __GO_UI_GRIDBAG_WEIGHT__:
424                 return UicontrolProperty.GRIDBAG_WEIGHT;
425             case __GO_UI_GRIDBAG_FILL__:
426                 return UicontrolProperty.GRIDBAG_FILL;
427             case __GO_UI_GRIDBAG_ANCHOR__:
428                 return UicontrolProperty.GRIDBAG_ANCHOR;
429             case __GO_UI_GRIDBAG_PADDING__:
430                 return UicontrolProperty.GRIDBAG_PADDING;
431             case __GO_UI_GRID_GRID__:
432                 return UicontrolProperty.GRID_GRID;
433             case __GO_UI_GRID_PADDING__:
434                 return UicontrolProperty.GRID_PADDING;
435             case __GO_UI_BORDER_POSITION__:
436                 return UicontrolProperty.BORDER_POSITION;
437             default :
438                 return super.getPropertyFromName(propertyName);
439         }
440     }
441
442     /**
443      * Fast property get method
444      * @param property the property to get
445      * @return the property value
446      */
447     public Object getProperty(Object property) {
448         if (property == UicontrolProperty.STYLE) {
449             return getStyle();
450         } else if (property == UicontrolProperty.BACKGROUNDCOLOR) {
451             return getBackgroundColor();
452         } else if (property == UicontrolProperty.ENABLE) {
453             return getEnable();
454         } else if (property == UicontrolProperty.FONTANGLE) {
455             return getFontAngle();
456         } else if (property == UicontrolProperty.FONTNAME) {
457             return getFontName();
458         } else if (property == UicontrolProperty.FONTSIZE) {
459             return getFontSize();
460         } else if (property == UicontrolProperty.FONTUNITS) {
461             return getFontUnits();
462         } else if (property == UicontrolProperty.FONTWEIGHT) {
463             return getFontWeight();
464         } else if (property == UicontrolProperty.FOREGROUNDCOLOR) {
465             return getForegroundColor();
466         } else if (property == UicontrolProperty.HORIZONTALALIGNMENT) {
467             return getHorizontalAlignment();
468         } else if (property == UicontrolProperty.LISTBOXTOP) {
469             return getListboxTop();
470         } else if (property == UicontrolProperty.LISTBOXTOP_SIZE) {
471             return getListboxTopSize();
472         } else if (property == UicontrolProperty.MAX) {
473             return getMax();
474         } else if (property == UicontrolProperty.MIN) {
475             return getMin();
476         } else if (property == UicontrolProperty.POSITION) {
477             return getUiPosition();
478         } else if (property == UicontrolProperty.RELIEF) {
479             return getRelief();
480         } else if (property == UicontrolProperty.SLIDERSTEP) {
481             return getSliderStep();
482         } else if (property == UicontrolProperty.STRING) {
483             return getString();
484         } else if (property == UicontrolProperty.STRING_SIZE) {
485             return getString().length;
486         } else if (property == UicontrolProperty.STRING_COLNB) {
487             return getStringColNb();
488         } else if (property == UicontrolProperty.TOOLTIPSTRING) {
489             return getTooltipString();
490         } else if (property == UicontrolProperty.TOOLTIPSTRING_SIZE) {
491             return getTooltipString().length;
492         } else if (property == UicontrolProperty.UNITS) {
493             return getUnits();
494         } else if (property == UicontrolProperty.VALUE) {
495             return getUiValue();
496         } else if (property == UicontrolProperty.VALUE_SIZE) {
497             return getUiValueSize();
498         } else if (property == UicontrolProperty.VERTICALALIGNMENT) {
499             return getVerticalAlignment();
500         } else if (property == UicontrolProperty.LAYOUT) {
501             return getLayout();
502         } else if (property == UicontrolProperty.LAYOUT_SET) {
503             return isLayoutSettable();
504         } else if (property == UicontrolProperty.MARGINS) {
505             return getMargins();
506         } else if (property == UicontrolProperty.GRIDBAG_GRID) {
507             return getGridBagGrid();
508         } else if (property == UicontrolProperty.GRIDBAG_WEIGHT) {
509             return getGridBagWeight();
510         } else if (property == UicontrolProperty.GRIDBAG_FILL) {
511             return getGridBagFill();
512         } else if (property == UicontrolProperty.GRIDBAG_ANCHOR) {
513             return getGridBagAnchor();
514         } else if (property == UicontrolProperty.GRIDBAG_PADDING) {
515             return getGridBagPadding();
516         } else if (property == UicontrolProperty.GRID_GRID) {
517             return getGridGrid();
518         } else if (property == UicontrolProperty.GRID_PADDING) {
519             return getGridPadding();
520         } else if (property == UicontrolProperty.BORDER_POSITION) {
521             return getBorderPosition();
522         } else {
523             return super.getProperty(property);
524         }
525     }
526
527     /**
528      * Fast property set method
529      * @param property the property to set
530      * @param value the property value
531      * @return true if the property has been set, false otherwise
532      */
533     public UpdateStatus setProperty(Object property, Object value) {
534         if (!(property instanceof UicontrolProperty)) {
535             return super.setProperty(property, value);
536         }
537
538         UicontrolProperty p = (UicontrolProperty) property;
539         switch (p) {
540             case STYLE:
541                 return setStyle((Integer) value);
542             case BACKGROUNDCOLOR:
543                 return setBackgroundColor((Double[]) value);
544             case ENABLE:
545                 return setEnable((Boolean) value);
546             case FONTANGLE:
547                 return setFontAngle((String) value);
548             case FONTNAME:
549                 return setFontName((String) value);
550             case FONTSIZE:
551                 return setFontSize((Double) value);
552             case FONTUNITS:
553                 return setFontUnits((String) value);
554             case FONTWEIGHT:
555                 return setFontWeight((String) value);
556             case FOREGROUNDCOLOR:
557                 return setForegroundColor((Double[]) value);
558             case HORIZONTALALIGNMENT:
559                 return setHorizontalAlignment((String) value);
560             case LISTBOXTOP:
561                 return setListboxTop((Integer[]) value);
562             case MAX:
563                 return setMax((Double) value);
564             case MIN:
565                 return setMin((Double) value);
566             case POSITION:
567                 return setUiPosition((Double[]) value);
568             case RELIEF:
569                 return setRelief((String) value);
570             case SLIDERSTEP:
571                 return setSliderStep((Double[]) value);
572             case STRING:
573                 return setString((String[]) value);
574             case STRING_COLNB:
575                 return setStringColNb((Integer) value);
576             case TOOLTIPSTRING:
577                 return setTooltipString((String[]) value);
578             case UNITS:
579                 return setUnits((String) value);
580             case VALUE:
581                 return setUiValue((Double[]) value);
582             case VERTICALALIGNMENT:
583                 return setVerticalAlignment((String) value);
584             case LAYOUT:
585                 return setLayout((Integer) value);
586             case MARGINS:
587                 return setMargins((Double[]) value);
588             case GRIDBAG_GRID:
589                 return setGridBagGrid((Integer[]) value);
590             case GRIDBAG_WEIGHT:
591                 return setGridBagWeight((Double[]) value);
592             case GRIDBAG_FILL:
593                 return setGridBagFill((Integer) value);
594             case GRIDBAG_ANCHOR:
595                 return setGridBagAnchor((Integer) value);
596             case GRIDBAG_PADDING:
597                 return setGridBagPadding((Integer[]) value);
598             case GRID_GRID:
599                 return setGridGrid((Integer[]) value);
600             case GRID_PADDING:
601                 return setGridPadding((Integer[]) value);
602             case BORDER_POSITION:
603                 return setBorderPosition((Integer) value);
604             default:
605                 return super.setProperty(property, value);
606         }
607     }
608
609     /**
610      * Get the style
611      * @return the style
612      */
613     public Integer getStyle() {
614         return styleEnumToInt(this.style);
615     }
616
617     /**
618      * Set the style
619      * @param style the style
620      * @return TODO
621      */
622     public UpdateStatus setStyle(int style) {
623         UicontrolStyle val =  intToStyleEnum(style);
624         if (val == this.style) {
625             return UpdateStatus.NoChange;
626         }
627
628         this.style = val;
629         return UpdateStatus.Success;
630     }
631
632     /* Background Color */
633     public Double[] getBackgroundColor() {
634         return this.backgroundColor;
635     }
636
637     public UpdateStatus setBackgroundColor(Double[] colors) {
638         if (Arrays.equals(colors, this.backgroundColor)) {
639             return UpdateStatus.NoChange;
640         }
641
642         this.backgroundColor = colors;
643         return UpdateStatus.Success;
644     }
645
646     /* Enable */
647     public boolean getEnable() {
648         return this.enable;
649     }
650
651     public UpdateStatus setEnable(boolean status) {
652         if (this.enable == status) {
653             return UpdateStatus.NoChange;
654         }
655         this.enable = status;
656         return UpdateStatus.Success;
657     }
658
659     /* FontAngle */
660     public String getFontAngle() {
661         return this.fontAngle;
662     }
663
664     public UpdateStatus setFontAngle(String fontAngle) {
665         if (this.fontAngle.equals(fontAngle)) {
666             return UpdateStatus.NoChange;
667         }
668         this.fontAngle = fontAngle;
669         return UpdateStatus.Success;
670     }
671
672     /* FontName */
673     public String getFontName() {
674         return this.fontName;
675     }
676
677     public UpdateStatus setFontName(String fontName) {
678         if (this.fontName.equals(fontName)) {
679             return UpdateStatus.NoChange;
680         }
681         this.fontName = fontName;
682         return UpdateStatus.Success;
683     }
684
685     /* FontSize */
686     public double getFontSize() {
687         return this.fontSize;
688     }
689
690     public UpdateStatus setFontSize(double fontSize) {
691         if (this.fontSize == fontSize) {
692             return UpdateStatus.NoChange;
693         }
694         this.fontSize = fontSize;
695         return UpdateStatus.Success;
696     }
697
698     /* FontUnits */
699     public String getFontUnits() {
700         return this.fontUnits;
701     }
702
703     public UpdateStatus setFontUnits(String fontUnits) {
704         if (this.fontUnits.equals(fontUnits)) {
705             return UpdateStatus.NoChange;
706         }
707         this.fontUnits = fontUnits;
708         return UpdateStatus.Success;
709     }
710
711     /* FontWeight */
712     public String getFontWeight() {
713         return this.fontWeight;
714     }
715
716     public UpdateStatus setFontWeight(String fontWeight) {
717         if (this.fontWeight.equals(fontWeight)) {
718             return UpdateStatus.NoChange;
719         }
720         this.fontWeight = fontWeight;
721         return UpdateStatus.Success;
722     }
723
724     /* Foreground Color */
725     public Double[] getForegroundColor() {
726         return this.foregroundColor;
727     }
728
729     public UpdateStatus setForegroundColor(Double[] colors) {
730         if (Arrays.equals(this.foregroundColor, colors)) {
731             return UpdateStatus.NoChange;
732         }
733         this.foregroundColor = colors;
734         return UpdateStatus.Success;
735     }
736
737     /* Horizontal Alignment */
738     public String getHorizontalAlignment() {
739         return this.horizontalAlignment;
740     }
741
742     public UpdateStatus setHorizontalAlignment(String alignment) {
743         if (this.horizontalAlignment.equals(alignment)) {
744             return UpdateStatus.NoChange;
745         }
746         this.horizontalAlignment = alignment;
747         return UpdateStatus.Success;
748     }
749
750     /* Listbox Top */
751     public Integer getListboxTopSize() {
752         return (listboxTop != null ? listboxTop.length : 0);
753     }
754
755     public Integer[] getListboxTop() {
756         return this.listboxTop;
757     }
758
759     public UpdateStatus setListboxTop(Integer[] listboxTop) {
760         if (Arrays.equals(this.listboxTop, listboxTop)) {
761             return UpdateStatus.NoChange;
762         }
763         this.listboxTop = listboxTop;
764         return UpdateStatus.Success;
765     }
766
767     /* Max */
768     public Double getMax() {
769         return this.max;
770     }
771
772     public UpdateStatus setMax(double max) {
773         if (this.max == max) {
774             return UpdateStatus.NoChange;
775         }
776         this.max = max;
777         return UpdateStatus.Success;
778     }
779
780     /* Min */
781     public Double getMin() {
782         return this.min;
783     }
784
785     public UpdateStatus setMin(double min) {
786         if (this.min == min) {
787             return UpdateStatus.NoChange;
788         }
789         this.min = min;
790         return UpdateStatus.Success;
791     }
792
793     /* Position */
794     public Double[] getUiPosition() {
795         return this.position;
796     }
797
798     public UpdateStatus setUiPosition(Double[] position) {
799         if (Arrays.equals(this.position, position)) {
800             return UpdateStatus.NoChange;
801         }
802         this.position = position;
803         return UpdateStatus.Success;
804     }
805
806     /* Relief */
807     public String getRelief() {
808         return this.relief;
809     }
810
811     public UpdateStatus setRelief(String relief) {
812         if (this.relief.equals(relief)) {
813             return UpdateStatus.NoChange;
814         }
815         this.relief = relief;
816         return UpdateStatus.Success;
817     }
818
819     /**
820      * Get the string
821      * @return the string
822      */
823     public String[] getString() {
824         return this.string;
825     }
826
827     /**
828      * Set the string
829      * @param string the string
830      */
831     public UpdateStatus setString(String[] string) {
832         if (this.style == UicontrolStyle.LISTBOX || this.style == UicontrolStyle.POPUPMENU) {
833             /* String can be set using a|b|c|d */
834             if (string.length == 1 & string[0].contains(STRING_SEPARATOR)) {
835                 StringTokenizer strTok = new StringTokenizer(string[0], STRING_SEPARATOR);
836                 String[] stringTab = new String[strTok.countTokens()];
837                 while (strTok.hasMoreTokens()) {
838                     stringTab[stringTab.length - strTok.countTokens()] = strTok.nextToken();
839                 }
840                 this.string = stringTab;
841                 return UpdateStatus.Success;
842             }
843         }
844         this.string = string;
845         return UpdateStatus.Success;
846     }
847
848     /**
849      * Get the string column number
850      * @return the number of columns
851      */
852     public int getStringColNb() {
853         return stringColNb;
854     }
855
856     /**
857      * Set the string column number
858      * @param stringColNb the number of columns
859      */
860     public UpdateStatus setStringColNb(Integer stringColNb) {
861         if (this.stringColNb == stringColNb) {
862             return UpdateStatus.NoChange;
863         }
864         this.stringColNb = stringColNb;
865         return UpdateStatus.Success;
866     }
867
868
869     /**
870      * Get the tooltip string
871      * @return the tooltip string
872      */
873     public String[] getTooltipString() {
874         return this.tooltipString;
875     }
876
877     /**
878      * Set the tooltip string
879      * @param tooltipString the tooltip string
880      */
881     public UpdateStatus setTooltipString(String[] tooltipString) {
882         if (Arrays.equals(this.tooltipString, tooltipString)) {
883             return UpdateStatus.NoChange;
884         }
885         this.tooltipString = tooltipString;
886         return UpdateStatus.Success;
887     }
888
889     /* Slider Step */
890     public Double[] getSliderStep() {
891         return this.sliderStep;
892     }
893
894     public UpdateStatus setSliderStep(Double[] sliderStep) {
895         if (Arrays.equals(this.sliderStep, sliderStep)) {
896             return UpdateStatus.NoChange;
897         }
898         this.sliderStep = sliderStep;
899         return UpdateStatus.Success;
900     }
901
902     /* Units */
903     public String getUnits() {
904         return this.units;
905     }
906
907     public UpdateStatus setUnits(String units) {
908         if (this.units.equals(units)) {
909             return UpdateStatus.NoChange;
910         }
911         this.units = units;
912         return UpdateStatus.Success;
913     }
914
915     /* Value */
916     public Integer getUiValueSize() {
917         return (value != null ? value.length : 0);
918     }
919
920     public Double[] getUiValue() {
921         return this.value;
922     }
923
924     public UpdateStatus setUiValue(Double[] value) {
925         if (Arrays.equals(this.value, value)) {
926             return UpdateStatus.NoChange;
927         }
928         this.value = value;
929         return UpdateStatus.Success;
930     }
931
932     /* Vertical Alignment */
933     public String getVerticalAlignment() {
934         return this.verticalAlignment;
935     }
936
937     public UpdateStatus setVerticalAlignment(String alignment) {
938         if (this.verticalAlignment.equals(alignment)) {
939             return UpdateStatus.NoChange;
940         }
941         this.verticalAlignment = alignment;
942         return UpdateStatus.Success;
943     }
944
945     public Integer getLayout() {
946         return layout.ordinal();
947     }
948
949     public LayoutType getLayoutAsEnum() {
950         return layout;
951     }
952
953     public boolean isLayoutSettable() {
954         return (this.layout == LayoutType.NONE);
955     }
956
957     public UpdateStatus setLayout(Integer value) {
958         return setLayout(LayoutType.intToEnum(value));
959     }
960
961     public UpdateStatus setLayout(LayoutType layout) {
962         //avoid to set layout twice
963         if (this.layout == LayoutType.NONE) {
964             if (layout == LayoutType.NONE) {
965                 return UpdateStatus.NoChange;
966             }
967
968             this.layout = layout;
969             return UpdateStatus.Success;
970         }
971
972         return UpdateStatus.Fail;
973     }
974
975     public Double[] getMargins() {
976         return margins;
977     }
978
979     public UpdateStatus setMargins(Double[] value) {
980         UpdateStatus status = UpdateStatus.NoChange;
981         if (value.length != 4) {
982             return UpdateStatus.Fail;
983         }
984
985         for (int i = 0 ; i < 4 ; i++) {
986             if (margins[i].equals(value[i]) == false) {
987                 margins[i] = value[i];
988                 status = UpdateStatus.Success;
989             }
990         }
991
992         return status;
993     }
994
995     public Integer getBorderPosition() {
996         return borderPosition.ordinal();
997     }
998
999     public BorderLayoutType getBorderPositionAsEnum() {
1000         return borderPosition;
1001     }
1002
1003     public UpdateStatus setBorderPosition(Integer value) {
1004         return setBorderPosition(BorderLayoutType.intToEnum(value));
1005     }
1006
1007     public UpdateStatus setBorderPosition(BorderLayoutType value) {
1008         if (borderPosition == value) {
1009             return UpdateStatus.NoChange;
1010         }
1011
1012         borderPosition = value;
1013         return UpdateStatus.Success;
1014     }
1015
1016     public Integer[] getGridPadding() {
1017         return gridPadding;
1018     }
1019
1020     public UpdateStatus setGridPadding(Integer[] value) {
1021         UpdateStatus status = UpdateStatus.NoChange;
1022         if (gridPadding.length != value.length) {
1023             return UpdateStatus.Fail;
1024         }
1025
1026         for (int i = 0 ; i < value.length ; i++) {
1027             if (gridPadding[i] != value[i]) {
1028                 gridPadding[i] = value[i];
1029                 status = UpdateStatus.Success;
1030             }
1031         }
1032
1033         return status;
1034     }
1035
1036     public Integer[] getGridGrid() {
1037         return gridGrid;
1038     }
1039
1040     public UpdateStatus setGridGrid(Integer[] value) {
1041         UpdateStatus status = UpdateStatus.NoChange;
1042         if (gridGrid.length != value.length) {
1043             return UpdateStatus.Fail;
1044         }
1045
1046         for (int i = 0 ; i < value.length ; i++) {
1047             if (gridGrid[i] != value[i]) {
1048                 gridGrid[i] = value[i];
1049                 status = UpdateStatus.Success;
1050             }
1051         }
1052
1053         return status;
1054     }
1055
1056     public Integer[] getGridBagPadding() {
1057         return gridbagPadding;
1058     }
1059
1060     public UpdateStatus setGridBagPadding(Integer[] value) {
1061         UpdateStatus status = UpdateStatus.NoChange;
1062         if (gridbagPadding.length != value.length) {
1063             return UpdateStatus.Fail;
1064         }
1065
1066         for (int i = 0 ; i < value.length ; i++) {
1067             if (gridbagPadding[i] != value[i]) {
1068                 gridbagPadding[i] = value[i];
1069                 status = UpdateStatus.Success;
1070             }
1071         }
1072
1073         return status;
1074     }
1075
1076     public Integer getGridBagAnchor() {
1077         return gridbagAnchor.ordinal();
1078     }
1079
1080     public AnchorType getGridBagAnchorAsEnum() {
1081         return gridbagAnchor;
1082     }
1083
1084     public UpdateStatus setGridBagAnchor(Integer value) {
1085         return setGridBagAnchor(AnchorType.intToEnum(value));
1086     }
1087
1088     public UpdateStatus setGridBagAnchor(AnchorType value) {
1089         if (gridbagAnchor == value) {
1090             return UpdateStatus.NoChange;
1091         }
1092
1093         gridbagAnchor = value;
1094         return UpdateStatus.Success;
1095     }
1096
1097     public Integer getGridBagFill() {
1098         return gridbagFill.ordinal();
1099     }
1100
1101     public FillType getGridBagFillAsEnum() {
1102         return gridbagFill;
1103     }
1104
1105     public UpdateStatus setGridBagFill(Integer value) {
1106         return setGridBagFill(FillType.intToEnum(value));
1107     }
1108
1109     public UpdateStatus setGridBagFill(FillType value) {
1110         if (gridbagFill == value) {
1111             return UpdateStatus.NoChange;
1112         }
1113
1114         gridbagFill = value;
1115         return UpdateStatus.Success;
1116     }
1117
1118     public Double[] getGridBagWeight() {
1119         return gridbagWeight;
1120     }
1121
1122     public UpdateStatus setGridBagWeight(Double[] value) {
1123         UpdateStatus status = UpdateStatus.NoChange;
1124         if (gridbagWeight.length != value.length) {
1125             return UpdateStatus.Fail;
1126         }
1127
1128         for (int i = 0 ; i < value.length ; i++) {
1129             if (gridbagWeight[i] != value[i]) {
1130                 gridbagWeight[i] = value[i];
1131                 status = UpdateStatus.Success;
1132             }
1133         }
1134
1135         return status;
1136     }
1137
1138     public Integer[] getGridBagGrid() {
1139         return gridbagGrid;
1140     }
1141
1142     public UpdateStatus setGridBagGrid(Integer[] value) {
1143         UpdateStatus status = UpdateStatus.NoChange;
1144         if (gridbagGrid.length != value.length) {
1145             return UpdateStatus.Fail;
1146         }
1147
1148         for (int i = 0 ; i < value.length ; i++) {
1149             if (gridbagGrid[i] != value[i]) {
1150                 gridbagGrid[i] = value[i];
1151                 status = UpdateStatus.Success;
1152             }
1153         }
1154
1155         return status;
1156     }
1157
1158     public void accept(Visitor visitor) {
1159     }
1160 }