separate JVM start and SwingView register at scilab start in mn mode
[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  * Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  */
17
18 package org.scilab.modules.graphic_objects.uicontrol;
19
20 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_BORDER_OPT_PADDING__;
21 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_EVENTHANDLER_ENABLE__;
22 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_EVENTHANDLER_NAME__;
23 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_GRID_OPT_GRID__;
24 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_GRID_OPT_PADDING__;
25 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_LAYOUT_SET__;
26 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_LAYOUT__;
27 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_MARGINS__;
28 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
29 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_STYLE__;
30 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UICONTROL__;
31 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BACKGROUNDCOLOR__;
32 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BORDER_POSITION__;
33 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BORDER_PREFERREDSIZE__;
34 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKBOX__;
35 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_EDIT__;
36 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
37 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTANGLE__;
38 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTNAME__;
39 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTSIZE__;
40 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTUNITS__;
41 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTWEIGHT__;
42 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
43 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FRAME_BORDER__;
44 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FRAME__;
45 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_ANCHOR__;
46 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_FILL__;
47 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_GRID__;
48 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_PADDING__;
49 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_PREFERREDSIZE__;
50 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GRIDBAG_WEIGHT__;
51 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GROUP_NAME__;
52 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_HORIZONTALALIGNMENT__;
53 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ICON__;
54 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_IMAGE__;
55 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LAYER__;
56 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOXTOP_SIZE__;
57 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOXTOP__;
58 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOX__;
59 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_MAX__;
60 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_MIN__;
61 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_POPUPMENU__;
62 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_PUSHBUTTON__;
63 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_RADIOBUTTON__;
64 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_RELIEF__;
65 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_SCROLLABLE__;
66 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_SLIDERSTEP__;
67 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_SLIDER__;
68 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_SPINNER__;
69 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_STRING_COLNB__;
70 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_STRING_SIZE__;
71 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_STRING__;
72 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TABLE__;
73 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TAB__;
74 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TEXT__;
75 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TITLE_POSITION__;
76 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TITLE_SCROLL__;
77 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TOOLTIPSTRING_SIZE__;
78 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_TOOLTIPSTRING__;
79 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_UNITS__;
80 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VALUE_SIZE__;
81 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VALUE__;
82 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_VERTICALALIGNMENT__;
83
84 import java.awt.Font;
85 import java.util.Arrays;
86 import java.util.StringTokenizer;
87
88 import org.scilab.modules.graphic_objects.console.Console;
89 import org.scilab.modules.graphic_objects.event.EventHandler;
90 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
91 import org.scilab.modules.graphic_objects.graphicObject.Visitor;
92 import org.scilab.modules.graphic_objects.utils.LayoutType;
93
94 /**
95  * @author Bruno JOFRET
96  * @author Vincent COUVERT
97  */
98 public class Uicontrol extends GraphicObject {
99
100     public enum TitlePositionType {
101         TOP, LEFT, BOTTOM, RIGHT;
102         public static TitlePositionType intToEnum(Integer value) {
103             switch (value) {
104                 default:
105                 case 0:
106                     return TOP;
107                 case 1:
108                     return LEFT;
109                 case 2:
110                     return BOTTOM;
111                 case 3:
112                     return RIGHT;
113             }
114         }
115
116         public static TitlePositionType stringToEnum(String value) {
117             if (value.equals("left")) {
118                 return LEFT;
119             }
120
121             if (value.equals("bottom")) {
122                 return BOTTOM;
123             }
124
125             if (value.equals("right")) {
126                 return RIGHT;
127             }
128
129             return TOP;
130         }
131
132         public static String enumToString(TitlePositionType value) {
133             switch (value) {
134                 case BOTTOM:
135                     return "bottom";
136                 case LEFT:
137                     return "left";
138                 case RIGHT:
139                     return "right";
140                 default:
141                 case TOP:
142                     return "top";
143             }
144         }
145     }
146
147     public enum BorderLayoutType {
148         BOTTOM, TOP, CENTER, LEFT, RIGHT;
149         public static BorderLayoutType intToEnum(Integer value) {
150             switch (value) {
151                 case 0:
152                     return BorderLayoutType.BOTTOM;
153                 case 1:
154                     return BorderLayoutType.TOP;
155                 default:
156                 case 2:
157                     return BorderLayoutType.CENTER;
158                 case 3:
159                     return BorderLayoutType.LEFT;
160                 case 4:
161                     return BorderLayoutType.RIGHT;
162             }
163         }
164
165         public static BorderLayoutType stringToEnum2(String value) {
166             if (value == null || value.equals("")) {
167                 return CENTER;
168             }
169
170             char[] chars = value.toCharArray();
171             if (chars[0] == 'n' || chars[0] == 'N') {
172                 return TOP;
173             }
174
175             if (chars[0] == 'e' || chars[0] == 'E') {
176                 return RIGHT;
177             }
178
179             if (chars[0] == 's' || chars[0] == 'S') {
180                 return BOTTOM;
181             }
182
183             if (chars[0] == 'w' || chars[0] == 'W') {
184                 return LEFT;
185             }
186
187             return CENTER;
188         }
189
190         public static String enumToString(BorderLayoutType value) {
191             switch (value) {
192                 case BOTTOM:
193                     return "bottom";
194                 default:
195                 case CENTER:
196                     return "center";
197                 case LEFT:
198                     return "left";
199                 case RIGHT:
200                     return "right";
201                 case TOP:
202                     return "top";
203             }
204         }
205
206         public static BorderLayoutType stringToEnum(String value) {
207             if (value.equals("bottom")) {
208                 return BOTTOM;
209             }
210
211             if (value.equals("left")) {
212                 return LEFT;
213             }
214
215             if (value.equals("right")) {
216                 return RIGHT;
217             }
218
219             if (value.equals("top")) {
220                 return TOP;
221             }
222
223             return CENTER;
224         }
225     }
226
227     public enum FillType {
228         NONE, VERTICAL, HORIZONTAL, BOTH;
229         public static FillType intToEnum(Integer value) {
230             switch (value) {
231                 default:
232                 case 0:
233                     return FillType.NONE;
234                 case 1:
235                     return FillType.VERTICAL;
236                 case 2:
237                     return FillType.HORIZONTAL;
238                 case 3:
239                     return FillType.BOTH;
240             }
241         }
242
243         public static FillType stringToEnum(String value) {
244             if (value == null || value.equals("")) {
245                 return NONE;
246             }
247
248             char[] chars = value.toCharArray();
249             if (chars[0] == 'v' || chars[0] == 'V') {
250                 return VERTICAL;
251             }
252
253             if (chars[0] == 'h' || chars[0] == 'H') {
254                 return HORIZONTAL;
255             }
256
257             if (chars[0] == 'b' || chars[0] == 'B') {
258                 return BOTH;
259             }
260
261             return NONE;
262         }
263
264         public static String enumToString(FillType value) {
265             switch (value) {
266                 case BOTH:
267                     return "both";
268                 case HORIZONTAL:
269                     return "horizontal";
270                 case NONE:
271                 default:
272                     return "none";
273                 case VERTICAL:
274                     return "vertical";
275             }
276         }
277     }
278
279     public enum AnchorType {
280         CENTER, UPPER, LOWER, RIGHT, LEFT, UPPER_RIGHT, UPPER_LEFT, LOWER_RIGHT, LOWER_LEFT;
281         //c,e,w,n,s,ne,nw,se,sw
282         public static AnchorType intToEnum(Integer value) {
283             switch (value) {
284                 default:
285                 case 0:
286                     return CENTER;
287                 case 1:
288                     return UPPER;
289                 case 2:
290                     return LOWER;
291                 case 3:
292                     return RIGHT;
293                 case 4:
294                     return LEFT;
295                 case 5:
296                     return UPPER_RIGHT;
297                 case 6:
298                     return UPPER_LEFT;
299                 case 7:
300                     return LOWER_RIGHT;
301                 case 8:
302                     return LOWER_LEFT;
303             }
304         }
305
306         public static AnchorType stringToEnum2(String value) {
307             if (value == null || value.equals("")) {
308                 return CENTER;
309             }
310
311             char[] chars = value.toCharArray();
312             if (chars[0] == 'e' || chars[0] == 'E') {
313                 return RIGHT;
314             }
315
316             if (chars[0] == 'w' || chars[0] == 'W') {
317                 return LEFT;
318             }
319
320             if (chars[0] == 'n' || chars[0] == 'N') {
321                 if (chars.length == 1) {
322                     return UPPER;
323                 }
324
325                 if (chars[1] == 'e' || chars[1] == 'E') {
326                     return UPPER_RIGHT;
327                 }
328
329                 if (chars[1] == 'w' || chars[1] == 'W') {
330                     return UPPER_LEFT;
331                 }
332                 return UPPER;
333             }
334
335             if (chars[0] == 's' || chars[0] == 'S') {
336                 if (chars.length == 1) {
337                     return LOWER;
338                 }
339
340                 if (chars[1] == 'e' || chars[1] == 'E') {
341                     return LOWER_RIGHT;
342                 }
343
344                 if (chars[1] == 'w' || chars[1] == 'W') {
345                     return LOWER_LEFT;
346                 }
347                 return LOWER;
348             }
349
350             return CENTER;
351         }
352
353         public static String enumToString(AnchorType value) {
354             switch (value) {
355                 default:
356                 case CENTER:
357                     return "center";
358                 case LEFT:
359                     return "left";
360                 case LOWER:
361                     return "lower";
362                 case LOWER_LEFT:
363                     return "lower_left";
364                 case LOWER_RIGHT:
365                     return "lower_right";
366                 case RIGHT:
367                     return "right";
368                 case UPPER:
369                     return "upper";
370                 case UPPER_LEFT:
371                     return "upper_left";
372                 case UPPER_RIGHT:
373                     return "upper_right";
374             }
375         }
376
377         public static AnchorType stringToEnum(String value) {
378             if (value.equals("left")) {
379                 return LEFT;
380             }
381
382             if (value.equals("lower")) {
383                 return LOWER;
384             }
385
386             if (value.equals("lower_left")) {
387                 return LOWER_LEFT;
388             }
389
390             if (value.equals("lower_right")) {
391                 return LOWER_RIGHT;
392             }
393
394             if (value.equals("right")) {
395                 return RIGHT;
396             }
397
398             if (value.equals("upper")) {
399                 return UPPER;
400             }
401
402             if (value.equals("upper_left")) {
403                 return UPPER_LEFT;
404             }
405
406             if (value.equals("upper_right")) {
407                 return UPPER_RIGHT;
408             }
409
410             return CENTER;
411         }
412     }
413
414     protected static final String RELIEF_DEFAULT   = "default";
415     protected static final String RELIEF_FLAT   = "flat";
416     protected static final String RELIEF_RAISED = "raised";
417     protected static final String RELIEF_SUNKEN = "sunken";
418     protected static final String RELIEF_GROOVE = "groove";
419     protected static final String RELIEF_RIDGE  = "ridge";
420     protected static final String RELIEF_SOLID  = "solid";
421
422     protected static final double DEFAULT_RED_BACKGROUND = 0.8;
423     protected static final double DEFAULT_GREEN_BACKGROUND = 0.8;
424     protected static final double DEFAULT_BLUE_BACKGROUND = 0.8;
425
426     private static final double DEFAULT_X = 20.0;
427     private static final double DEFAULT_Y = 40.0;
428     private static final double DEFAULT_WIDTH = 40.0;
429     private static final double DEFAULT_HEIGHT = 20.0;
430
431     protected static final double DEFAULT_FONTSIZE = 10;
432     protected static final String DEFAULT_FONTNAME = "helvetica";
433     protected static final String DEFAULT_FONTWEIGHT = "normal";
434     protected static final String DEFAULT_FONTANGLE = "normal";
435     private static final String STRING_SEPARATOR = "|";
436
437     /*default font properties*/
438     private static String defaultFontName = "";
439     private static String defaultFontWeight = "";
440     private static double defaultFontSize = 0;
441     private static String defaultFontAngle = "";
442     private static String defaultFontUnits = "";
443     
444     private UicontrolStyle style;
445     private Double[] backgroundColor = { -1.0, -1.0, -1.0};
446     private Boolean enable = true;
447     private String fontAngle = "";
448     private String fontName = "";
449     private double fontSize = 0;
450     private String fontUnits = "points";
451     private String fontWeight = "";
452     private Double[] foregroundColor = { -1.0, -1.0, -1.0};
453     private String horizontalAlignment = "";
454     private String verticalAlignment = "";
455     private Integer[] listboxTop;
456     private double max = 1.0;
457     private double min;
458     private Double[] position = {DEFAULT_X, DEFAULT_Y, DEFAULT_WIDTH, DEFAULT_HEIGHT};
459     private String relief = RELIEF_DEFAULT;
460     private Double[] sliderStep = {0.01, 0.1};
461     private String[] string = new String[] {};
462     private int stringColNb = 1; // Used for tables
463     private String[] tooltipString = {""};
464     private String units = "pixels";
465     private Double[] value;
466     private Boolean scrollable = false;
467     private LayoutType layout = LayoutType.NONE;
468     private Double[] margins = new Double[] {0.0, 0.0, 0.0, 0.0};
469     private Integer[] gridbagGrid = new Integer[] { -1, -1, 1, 1};
470     private Double[] gridbagWeight = new Double[] {0.0, 0.0};
471     private FillType gridbagFill = FillType.NONE;
472     private AnchorType gridbagAnchor = AnchorType.CENTER;
473     private Integer[] gridbagPadding = new Integer[] {0, 0};
474     private Integer[] gridbagPreferredSize = new Integer[] { -1, -1};
475     private BorderLayoutType borderPosition = BorderLayoutType.CENTER;
476     private Integer[] borderPreferredSize = new Integer[] { -1, -1};
477     private String icon = "";
478
479     /** layout options */
480     private Integer[] gridOptGrid = new Integer[] {0, 0};
481     private Integer[] gridOptPadding = new Integer[] {0, 0};
482     private Integer[] borderOptPadding = new Integer[] {0, 0};
483
484     /** border options */
485     private Integer frameBorder = 0;
486
487     /** groupname for radiobutton */
488     private String groupName = "";
489
490     /** tab properties */
491     private Boolean titleScroll = false;
492     private TitlePositionType titlePosition = TitlePositionType.TOP;
493
494     private EventHandler eventHandler;
495
496     /**
497      * All uicontrol properties
498      */
499     private enum UicontrolProperty {
500         STYLE,
501         BACKGROUNDCOLOR,
502         ENABLE,
503         FONTANGLE,
504         FONTNAME,
505         FONTSIZE,
506         FONTUNITS,
507         FONTWEIGHT,
508         FOREGROUNDCOLOR,
509         HORIZONTALALIGNMENT,
510         LISTBOXTOP,
511         LISTBOXTOP_SIZE,
512         MAX,
513         MIN,
514         POSITION,
515         SCALE,
516         SHEAR,
517         SLIDERSTEP,
518         STRING,
519         STRING_SIZE,
520         STRING_COLNB,
521         RELIEF,
522         TOOLTIPSTRING,
523         TOOLTIPSTRING_SIZE,
524         UNITS,
525         VALUE,
526         VALUE_SIZE,
527         VERTICALALIGNMENT,
528         LAYOUT,
529         LAYOUT_SET,
530         MARGINS,
531         GRIDBAG_GRID,
532         GRIDBAG_WEIGHT,
533         GRIDBAG_FILL,
534         GRIDBAG_ANCHOR,
535         GRIDBAG_PADDING,
536         GRIDBAG_PREFERREDSIZE,
537         BORDER_POSITION,
538         BORDER_PREFERREDSIZE,
539         GRIDOPT_GRID,
540         GRIDOPT_PADDING,
541         BORDEROPT_PADDING,
542         FRAMEBORDER,
543         GROUPNAME,
544         TITLE_POSITION,
545         TITLE_SCROLL,
546         SCROLLABLE,
547         ICON,
548         EVENTHANDLER,
549         EVENTHANDLERENABLE
550     };
551
552     /**
553      * All uicontrol styles
554      */
555     public enum UicontrolStyle {
556         CHECKBOX,
557         EDIT,
558         FRAME,
559         IMAGE,
560         LISTBOX,
561         POPUPMENU,
562         PUSHBUTTON,
563         RADIOBUTTON,
564         SLIDER,
565         TABLE,
566         TEXT,
567         TABGROUP,
568         TAB,
569         LAYER,
570         SPINNER
571     };
572
573     /**
574      * Constructor
575      */
576     public Uicontrol() {
577         super();
578         eventHandler = new EventHandler();
579         setVisible(false); /* To avoid to see the object rendered before all its properties to be set (See bug #10346) */
580
581         if (Console.getConsole().getUseDeprecatedLF()) {
582             setBackgroundColor(new Double[] {
583                                    DEFAULT_RED_BACKGROUND,
584                                    DEFAULT_GREEN_BACKGROUND,
585                                    DEFAULT_BLUE_BACKGROUND
586                                });
587
588             setHorizontalAlignment("center");
589             setVerticalAlignment("middle");
590
591             setFontName(DEFAULT_FONTNAME);
592             setFontSize(DEFAULT_FONTSIZE);
593             setFontAngle(DEFAULT_FONTANGLE);
594             setFontWeight(DEFAULT_FONTWEIGHT);
595         }
596     }
597
598     /**
599      * Get style as a string
600      * @param style the uicontrol style
601      * @return the uicontrol style as a string
602      */
603     private int styleEnumToInt(UicontrolStyle style) {
604         switch (style) {
605             case CHECKBOX:
606                 return __GO_UI_CHECKBOX__;
607             case EDIT:
608                 return __GO_UI_EDIT__;
609             case FRAME:
610                 return __GO_UI_FRAME__;
611             case IMAGE:
612                 return __GO_UI_IMAGE__;
613             case LISTBOX:
614                 return __GO_UI_LISTBOX__;
615             case POPUPMENU:
616                 return __GO_UI_POPUPMENU__;
617             case PUSHBUTTON:
618                 return __GO_UI_PUSHBUTTON__;
619             case RADIOBUTTON:
620                 return __GO_UI_RADIOBUTTON__;
621             case SLIDER:
622                 return __GO_UI_SLIDER__;
623             case TABLE:
624                 return __GO_UI_TABLE__;
625             case TEXT:
626                 return __GO_UI_TEXT__;
627             case TAB:
628                 return __GO_UI_TAB__;
629             case LAYER:
630                 return __GO_UI_LAYER__;
631             case SPINNER:
632                 return __GO_UI_SPINNER__;
633             default :
634                 return -1;
635         }
636     }
637
638     /**
639      * Get style as an enum element
640      * @param style the uicontrol style
641      * @return the uicontrol style as an enum element
642      */
643     private UicontrolStyle intToStyleEnum(int style) {
644         switch (style) {
645             case __GO_UI_CHECKBOX__ :
646                 return UicontrolStyle.CHECKBOX;
647             case __GO_UI_EDIT__ :
648                 return UicontrolStyle.EDIT;
649             case __GO_UI_FRAME__ :
650                 return UicontrolStyle.FRAME;
651             case __GO_UI_IMAGE__ :
652                 return  UicontrolStyle.IMAGE;
653             case __GO_UI_LISTBOX__ :
654                 return UicontrolStyle.LISTBOX;
655             case __GO_UI_POPUPMENU__ :
656                 return UicontrolStyle.POPUPMENU;
657             case __GO_UI_PUSHBUTTON__ :
658                 return UicontrolStyle.PUSHBUTTON;
659             case __GO_UI_RADIOBUTTON__ :
660                 return UicontrolStyle.RADIOBUTTON;
661             case __GO_UI_SLIDER__ :
662                 return UicontrolStyle.SLIDER;
663             case __GO_UI_TABLE__ :
664                 return UicontrolStyle.TABLE;
665             case __GO_UI_TEXT__ :
666                 return UicontrolStyle.TEXT;
667             case __GO_UI_TAB__:
668                 return UicontrolStyle.TAB;
669             case __GO_UI_LAYER__:
670                 return UicontrolStyle.LAYER;
671             case __GO_UI_SPINNER__:
672                 return UicontrolStyle.SPINNER;
673             default :
674                 return null;
675         }
676     }
677
678     /**
679      * Get this object type
680      * @return uicontrol
681      * @see org.scilab.modules.graphic_objects.graphicObject.GraphicObject#getType()
682      */
683     public Integer getType() {
684         return __GO_UICONTROL__;
685     }
686
687     /**
688      * Returns the enum associated to a property name
689      * @param propertyName the property name
690      * @return the property enum
691      */
692     public Object getPropertyFromName(int propertyName) {
693         switch (propertyName) {
694             case __GO_STYLE__ :
695                 return UicontrolProperty.STYLE;
696             case __GO_UI_BACKGROUNDCOLOR__ :
697                 return UicontrolProperty.BACKGROUNDCOLOR;
698             case __GO_UI_ENABLE__ :
699                 return UicontrolProperty.ENABLE;
700             case __GO_UI_FONTANGLE__ :
701                 return UicontrolProperty.FONTANGLE;
702             case __GO_UI_FONTNAME__ :
703                 return UicontrolProperty.FONTNAME;
704             case __GO_UI_FONTSIZE__ :
705                 return UicontrolProperty.FONTSIZE;
706             case __GO_UI_FONTUNITS__ :
707                 return UicontrolProperty.FONTUNITS;
708             case __GO_UI_FONTWEIGHT__ :
709                 return UicontrolProperty.FONTWEIGHT;
710             case __GO_UI_FOREGROUNDCOLOR__ :
711                 return UicontrolProperty.FOREGROUNDCOLOR;
712             case __GO_UI_HORIZONTALALIGNMENT__ :
713                 return UicontrolProperty.HORIZONTALALIGNMENT;
714             case __GO_UI_LISTBOXTOP__ :
715                 return UicontrolProperty.LISTBOXTOP;
716             case __GO_UI_LISTBOXTOP_SIZE__ :
717                 return UicontrolProperty.LISTBOXTOP_SIZE;
718             case __GO_UI_MAX__ :
719                 return UicontrolProperty.MAX;
720             case __GO_UI_MIN__ :
721                 return UicontrolProperty.MIN;
722             case __GO_POSITION__ :
723                 return UicontrolProperty.POSITION;
724             case __GO_UI_RELIEF__ :
725                 return UicontrolProperty.RELIEF;
726             case __GO_UI_SLIDERSTEP__ :
727                 return UicontrolProperty.SLIDERSTEP;
728             case __GO_UI_STRING__ :
729                 return UicontrolProperty.STRING;
730             case __GO_UI_STRING_SIZE__ :
731                 return UicontrolProperty.STRING_SIZE;
732             case __GO_UI_STRING_COLNB__ :
733                 return UicontrolProperty.STRING_COLNB;
734             case __GO_UI_TOOLTIPSTRING__ :
735                 return UicontrolProperty.TOOLTIPSTRING;
736             case __GO_UI_TOOLTIPSTRING_SIZE__ :
737                 return UicontrolProperty.TOOLTIPSTRING_SIZE;
738             case __GO_UI_UNITS__ :
739                 return UicontrolProperty.UNITS;
740             case __GO_UI_VALUE__ :
741                 return UicontrolProperty.VALUE;
742             case __GO_UI_VALUE_SIZE__ :
743                 return UicontrolProperty.VALUE_SIZE;
744             case __GO_UI_VERTICALALIGNMENT__ :
745                 return UicontrolProperty.VERTICALALIGNMENT;
746             case __GO_LAYOUT__ :
747                 return UicontrolProperty.LAYOUT;
748             case __GO_LAYOUT_SET__ :
749                 return UicontrolProperty.LAYOUT_SET;
750             case __GO_MARGINS__:
751                 return UicontrolProperty.MARGINS;
752             case __GO_UI_GRIDBAG_GRID__:
753                 return UicontrolProperty.GRIDBAG_GRID;
754             case __GO_UI_GRIDBAG_WEIGHT__:
755                 return UicontrolProperty.GRIDBAG_WEIGHT;
756             case __GO_UI_GRIDBAG_FILL__:
757                 return UicontrolProperty.GRIDBAG_FILL;
758             case __GO_UI_GRIDBAG_ANCHOR__:
759                 return UicontrolProperty.GRIDBAG_ANCHOR;
760             case __GO_UI_GRIDBAG_PADDING__:
761                 return UicontrolProperty.GRIDBAG_PADDING;
762             case __GO_UI_GRIDBAG_PREFERREDSIZE__:
763                 return UicontrolProperty.GRIDBAG_PREFERREDSIZE;
764             case __GO_UI_BORDER_POSITION__:
765                 return UicontrolProperty.BORDER_POSITION;
766             case __GO_UI_BORDER_PREFERREDSIZE__:
767                 return UicontrolProperty.BORDER_PREFERREDSIZE;
768             case __GO_GRID_OPT_GRID__:
769                 return UicontrolProperty.GRIDOPT_GRID;
770             case __GO_GRID_OPT_PADDING__:
771                 return UicontrolProperty.GRIDOPT_PADDING;
772             case __GO_BORDER_OPT_PADDING__:
773                 return UicontrolProperty.BORDEROPT_PADDING;
774             case __GO_UI_FRAME_BORDER__:
775                 return UicontrolProperty.FRAMEBORDER;
776             case __GO_UI_GROUP_NAME__:
777                 return UicontrolProperty.GROUPNAME;
778             case __GO_UI_TITLE_POSITION__:
779                 return UicontrolProperty.TITLE_POSITION;
780             case __GO_UI_TITLE_SCROLL__:
781                 return UicontrolProperty.TITLE_SCROLL;
782             case __GO_UI_SCROLLABLE__:
783                 return UicontrolProperty.SCROLLABLE;
784             case __GO_UI_ICON__:
785                 return UicontrolProperty.ICON;
786             case __GO_EVENTHANDLER_NAME__:
787                 return UicontrolProperty.EVENTHANDLER;
788             case __GO_EVENTHANDLER_ENABLE__:
789                 return UicontrolProperty.EVENTHANDLERENABLE;
790             default :
791                 return super.getPropertyFromName(propertyName);
792         }
793     }
794
795     /**
796      * Fast property get method
797      * @param property the property to get
798      * @return the property value
799      */
800     public Object getProperty(Object property) {
801         if (property == UicontrolProperty.STYLE) {
802             return getStyle();
803         } else if (property == UicontrolProperty.BACKGROUNDCOLOR) {
804             return getBackgroundColor();
805         } else if (property == UicontrolProperty.ENABLE) {
806             return getEnable();
807         } else if (property == UicontrolProperty.FONTANGLE) {
808             return getFontAngle();
809         } else if (property == UicontrolProperty.FONTNAME) {
810             return getFontName();
811         } else if (property == UicontrolProperty.FONTSIZE) {
812             return getFontSize();
813         } else if (property == UicontrolProperty.FONTUNITS) {
814             return getFontUnits();
815         } else if (property == UicontrolProperty.FONTWEIGHT) {
816             return getFontWeight();
817         } else if (property == UicontrolProperty.FOREGROUNDCOLOR) {
818             return getForegroundColor();
819         } else if (property == UicontrolProperty.HORIZONTALALIGNMENT) {
820             return getHorizontalAlignment();
821         } else if (property == UicontrolProperty.LISTBOXTOP) {
822             return getListboxTop();
823         } else if (property == UicontrolProperty.LISTBOXTOP_SIZE) {
824             return getListboxTopSize();
825         } else if (property == UicontrolProperty.MAX) {
826             return getMax();
827         } else if (property == UicontrolProperty.MIN) {
828             return getMin();
829         } else if (property == UicontrolProperty.POSITION) {
830             return getUiPosition();
831         } else if (property == UicontrolProperty.RELIEF) {
832             return getRelief();
833         } else if (property == UicontrolProperty.SLIDERSTEP) {
834             return getSliderStep();
835         } else if (property == UicontrolProperty.STRING) {
836             return getString();
837         } else if (property == UicontrolProperty.STRING_SIZE) {
838             return getString().length;
839         } else if (property == UicontrolProperty.STRING_COLNB) {
840             return getStringColNb();
841         } else if (property == UicontrolProperty.TOOLTIPSTRING) {
842             return getTooltipString();
843         } else if (property == UicontrolProperty.TOOLTIPSTRING_SIZE) {
844             return getTooltipString().length;
845         } else if (property == UicontrolProperty.UNITS) {
846             return getUnits();
847         } else if (property == UicontrolProperty.VALUE) {
848             return getUiValue();
849         } else if (property == UicontrolProperty.VALUE_SIZE) {
850             return getUiValueSize();
851         } else if (property == UicontrolProperty.VERTICALALIGNMENT) {
852             return getVerticalAlignment();
853         } else if (property == UicontrolProperty.LAYOUT) {
854             return getLayout();
855         } else if (property == UicontrolProperty.LAYOUT_SET) {
856             return isLayoutSettable();
857         } else if (property == UicontrolProperty.MARGINS) {
858             return getMargins();
859         } else if (property == UicontrolProperty.GRIDBAG_GRID) {
860             return getGridBagGrid();
861         } else if (property == UicontrolProperty.GRIDBAG_WEIGHT) {
862             return getGridBagWeight();
863         } else if (property == UicontrolProperty.GRIDBAG_FILL) {
864             return getGridBagFill();
865         } else if (property == UicontrolProperty.GRIDBAG_ANCHOR) {
866             return getGridBagAnchor();
867         } else if (property == UicontrolProperty.GRIDBAG_PADDING) {
868             return getGridBagPadding();
869         } else if (property == UicontrolProperty.GRIDBAG_PREFERREDSIZE) {
870             return getGridBagPreferredSize();
871         } else if (property == UicontrolProperty.BORDER_POSITION) {
872             return getBorderPosition();
873         } else if (property == UicontrolProperty.BORDER_PREFERREDSIZE) {
874             return getBorderPreferredSize();
875         } else if (property == UicontrolProperty.GRIDOPT_GRID) {
876             return getGridOptGrid();
877         } else if (property == UicontrolProperty.GRIDOPT_PADDING) {
878             return getGridOptPadding();
879         } else if (property == UicontrolProperty.BORDEROPT_PADDING) {
880             return getBorderOptPadding();
881         } else if (property == UicontrolProperty.FRAMEBORDER) {
882             return getFrameBorder();
883         } else if (property == UicontrolProperty.GROUPNAME) {
884             return getGroupName();
885         } else if (property == UicontrolProperty.TITLE_POSITION) {
886             return getTitlePosition();
887         } else if (property == UicontrolProperty.TITLE_SCROLL) {
888             return getTitleScroll();
889         } else if (property == UicontrolProperty.SCROLLABLE) {
890             return getScrollable();
891         } else if (property == UicontrolProperty.ICON) {
892             return getIcon();
893         } else if (property == UicontrolProperty.EVENTHANDLER) {
894             return getEventHandler();
895         } else if (property == UicontrolProperty.EVENTHANDLERENABLE) {
896             return getEventHandlerEnable();
897         } else {
898             return super.getProperty(property);
899         }
900     }
901
902     /**
903      * Fast property set method
904      * @param property the property to set
905      * @param value the property value
906      * @return true if the property has been set, false otherwise
907      */
908     public UpdateStatus setProperty(Object property, Object value) {
909         if (!(property instanceof UicontrolProperty)) {
910             return super.setProperty(property, value);
911         }
912
913         UicontrolProperty p = (UicontrolProperty) property;
914         switch (p) {
915             case STYLE:
916                 return setStyle((Integer) value);
917             case BACKGROUNDCOLOR:
918                 return setBackgroundColor((Double[]) value);
919             case ENABLE:
920                 return setEnable((Boolean) value);
921             case FONTANGLE:
922                 return setFontAngle((String) value);
923             case FONTNAME:
924                 return setFontName((String) value);
925             case FONTSIZE:
926                 return setFontSize((Double) value);
927             case FONTUNITS:
928                 return setFontUnits((String) value);
929             case FONTWEIGHT:
930                 return setFontWeight((String) value);
931             case FOREGROUNDCOLOR:
932                 return setForegroundColor((Double[]) value);
933             case HORIZONTALALIGNMENT:
934                 return setHorizontalAlignment((String) value);
935             case LISTBOXTOP:
936                 return setListboxTop((Integer[]) value);
937             case MAX:
938                 return setMax((Double) value);
939             case MIN:
940                 return setMin((Double) value);
941             case POSITION:
942                 return setUiPosition((Double[]) value);
943             case RELIEF:
944                 return setRelief((String) value);
945             case SLIDERSTEP:
946                 return setSliderStep((Double[]) value);
947             case STRING:
948                 return setString((String[]) value);
949             case STRING_COLNB:
950                 return setStringColNb((Integer) value);
951             case TOOLTIPSTRING:
952                 return setTooltipString((String[]) value);
953             case UNITS:
954                 return setUnits((String) value);
955             case VALUE:
956                 return setUiValue((Double[]) value);
957             case VERTICALALIGNMENT:
958                 return setVerticalAlignment((String) value);
959             case LAYOUT:
960                 return setLayout((Integer) value);
961             case MARGINS:
962                 return setMargins((Double[]) value);
963             case GRIDBAG_GRID:
964                 return setGridBagGrid((Integer[]) value);
965             case GRIDBAG_WEIGHT:
966                 return setGridBagWeight((Double[]) value);
967             case GRIDBAG_FILL:
968                 return setGridBagFill((Integer) value);
969             case GRIDBAG_ANCHOR:
970                 return setGridBagAnchor((Integer) value);
971             case GRIDBAG_PADDING:
972                 return setGridBagPadding((Integer[]) value);
973             case GRIDBAG_PREFERREDSIZE:
974                 return setGridBagPreferredSize((Integer[]) value);
975             case BORDER_POSITION:
976                 return setBorderPosition((Integer) value);
977             case BORDER_PREFERREDSIZE:
978                 return setBorderPreferredSize((Integer[]) value);
979             case GRIDOPT_GRID:
980                 return setGridOptGrid((Integer[]) value);
981             case GRIDOPT_PADDING:
982                 return setGridOptPadding((Integer[]) value);
983             case BORDEROPT_PADDING:
984                 return setBorderOptPadding((Integer[]) value);
985             case FRAMEBORDER:
986                 return setFrameBorder((Integer) value);
987             case GROUPNAME:
988                 return setGroupName((String) value);
989             case TITLE_POSITION:
990                 return setTitlePosition((Integer) value);
991             case TITLE_SCROLL:
992                 return setTitleScroll((Boolean) value);
993             case SCROLLABLE:
994                 return setScrollable((Boolean) value);
995             case ICON:
996                 return setIcon((String) value);
997             case EVENTHANDLER:
998                 return setEventHandler((String) value);
999             case EVENTHANDLERENABLE:
1000                 return setEventHandlerEnable((Boolean) value);
1001             default:
1002                 return super.setProperty(property, value);
1003         }
1004     }
1005
1006     /**
1007          * Get the style
1008          * @return the style
1009          */
1010     public Integer getStyle() {
1011         return styleEnumToInt(style);
1012     }
1013
1014     public UicontrolStyle getStyleAsEnum() {
1015         return style;
1016     }
1017
1018     /**
1019      * Set the style
1020      * @param style the style
1021      */
1022     public UpdateStatus setStyle(int style) {
1023         UicontrolStyle val =  intToStyleEnum(style);
1024         if (val == this.style) {
1025             return UpdateStatus.NoChange;
1026         }
1027
1028         this.style = val;
1029         return UpdateStatus.Success;
1030     }
1031
1032     /* Background Color */
1033     public Double[] getBackgroundColor() {
1034         return this.backgroundColor;
1035     }
1036
1037     public UpdateStatus setBackgroundColor(Double[] colors) {
1038         if (Arrays.equals(colors, this.backgroundColor)) {
1039             return UpdateStatus.NoChange;
1040         }
1041
1042         this.backgroundColor = colors;
1043         return UpdateStatus.Success;
1044     }
1045
1046     /* Enable */
1047     public Boolean getEnable() {
1048         return enable;
1049     }
1050
1051     public UpdateStatus setEnable(Boolean status) {
1052         if (enable.equals(status)) {
1053             return UpdateStatus.NoChange;
1054         }
1055         enable = status;
1056         return UpdateStatus.Success;
1057     }
1058
1059     /* FontAngle */
1060     public String getFontAngle() {
1061         return this.fontAngle;
1062     }
1063
1064     public UpdateStatus setFontAngle(String fontAngle) {
1065         if (this.fontAngle.equals(fontAngle)) {
1066             return UpdateStatus.NoChange;
1067         }
1068         this.fontAngle = fontAngle;
1069         return UpdateStatus.Success;
1070     }
1071
1072     /* FontName */
1073     public String getFontName() {
1074         return this.fontName;
1075     }
1076
1077     public UpdateStatus setFontName(String fontName) {
1078         if (this.fontName.equals(fontName)) {
1079             return UpdateStatus.NoChange;
1080         }
1081         this.fontName = fontName;
1082         return UpdateStatus.Success;
1083     }
1084
1085     /* FontSize */
1086     public double getFontSize() {
1087         return this.fontSize;
1088     }
1089
1090     public UpdateStatus setFontSize(double fontSize) {
1091         if (this.fontSize == fontSize) {
1092             return UpdateStatus.NoChange;
1093         }
1094         this.fontSize = fontSize;
1095         return UpdateStatus.Success;
1096     }
1097
1098     /* FontUnits */
1099     public String getFontUnits() {
1100         return this.fontUnits;
1101     }
1102
1103     public UpdateStatus setFontUnits(String fontUnits) {
1104         if (this.fontUnits.equals(fontUnits)) {
1105             return UpdateStatus.NoChange;
1106         }
1107         this.fontUnits = fontUnits;
1108         return UpdateStatus.Success;
1109     }
1110
1111     /* FontWeight */
1112     public String getFontWeight() {
1113         return this.fontWeight;
1114     }
1115
1116     public UpdateStatus setFontWeight(String fontWeight) {
1117         if (this.fontWeight.equals(fontWeight)) {
1118             return UpdateStatus.NoChange;
1119         }
1120         this.fontWeight = fontWeight;
1121         return UpdateStatus.Success;
1122     }
1123
1124     /* Foreground Color */
1125     public Double[] getForegroundColor() {
1126         return this.foregroundColor;
1127     }
1128
1129     public UpdateStatus setForegroundColor(Double[] colors) {
1130         if (Arrays.equals(this.foregroundColor, colors)) {
1131             return UpdateStatus.NoChange;
1132         }
1133         this.foregroundColor = colors;
1134         return UpdateStatus.Success;
1135     }
1136
1137     /* Horizontal Alignment */
1138     public String getHorizontalAlignment() {
1139         return this.horizontalAlignment;
1140     }
1141
1142     public UpdateStatus setHorizontalAlignment(String alignment) {
1143         if (this.horizontalAlignment.equals(alignment)) {
1144             return UpdateStatus.NoChange;
1145         }
1146         this.horizontalAlignment = alignment;
1147         return UpdateStatus.Success;
1148     }
1149
1150     /* Listbox Top */
1151     public Integer getListboxTopSize() {
1152         return (listboxTop != null ? listboxTop.length : 0);
1153     }
1154
1155     public Integer[] getListboxTop() {
1156         return this.listboxTop;
1157     }
1158
1159     public UpdateStatus setListboxTop(Integer[] listboxTop) {
1160         if (Arrays.equals(this.listboxTop, listboxTop)) {
1161             return UpdateStatus.NoChange;
1162         }
1163         this.listboxTop = listboxTop;
1164         return UpdateStatus.Success;
1165     }
1166
1167     /* Max */
1168     public Double getMax() {
1169         return this.max;
1170     }
1171
1172     public UpdateStatus setMax(double max) {
1173         if (this.max == max) {
1174             return UpdateStatus.NoChange;
1175         }
1176         this.max = max;
1177         return UpdateStatus.Success;
1178     }
1179
1180     /* Min */
1181     public Double getMin() {
1182         return this.min;
1183     }
1184
1185     public UpdateStatus setMin(double min) {
1186         if (this.min == min) {
1187             return UpdateStatus.NoChange;
1188         }
1189         this.min = min;
1190         return UpdateStatus.Success;
1191     }
1192
1193     /* Position */
1194     public Double[] getUiPosition() {
1195         return this.position;
1196     }
1197
1198     public UpdateStatus setUiPosition(Double[] position) {
1199         if (Arrays.equals(this.position, position)) {
1200             return UpdateStatus.NoChange;
1201         }
1202         this.position = position;
1203         return UpdateStatus.Success;
1204     }
1205
1206     /* Relief */
1207     public String getRelief() {
1208         return this.relief;
1209     }
1210
1211     public UpdateStatus setRelief(String relief) {
1212         if (this.relief.equals(relief)) {
1213             return UpdateStatus.NoChange;
1214         }
1215         this.relief = relief;
1216         return UpdateStatus.Success;
1217     }
1218
1219     /**
1220      * Get the string
1221      * @return the string
1222      */
1223     public String[] getString() {
1224         return this.string;
1225     }
1226
1227     /**
1228      * Set the string
1229      * @param string the string
1230      */
1231     public UpdateStatus setString(String[] string) {
1232         //update needed ?
1233
1234         //both null or same object
1235         if (this.string == string) {
1236             return UpdateStatus.NoChange;
1237         }
1238
1239         boolean needUpdate = false;
1240         if (this.string.length == string.length) {
1241             for (int i = 0 ; i < string.length ; i++) {
1242
1243                 if (this.string[i] == null && string[i] == null) {
1244                     continue;
1245                 }
1246
1247                 //only one null
1248                 if ((this.string[i] == null || string[i] == null) &&
1249                         this.string[i] != string[i]) {
1250                     needUpdate = true;
1251                     break;
1252                 }
1253
1254                 if (this.string[i].equals(string[i]) == false) {
1255                     needUpdate = true;
1256                     break;
1257                 }
1258             }
1259         } else {
1260             needUpdate = true;
1261         }
1262
1263         if (needUpdate == false) {
1264             return UpdateStatus.NoChange;
1265         }
1266
1267         if (this.style == UicontrolStyle.LISTBOX || this.style == UicontrolStyle.POPUPMENU) {
1268             /* String can be set using a|b|c|d */
1269             if (string.length == 0) {
1270                 if (this.string.length == 0) {
1271                     return UpdateStatus.NoChange;
1272                 }
1273
1274                 this.string = string;
1275                 return UpdateStatus.Success;
1276             } else if (string.length == 1 && string[0].contains(STRING_SEPARATOR)) {
1277                 StringTokenizer strTok = new StringTokenizer(string[0], STRING_SEPARATOR);
1278                 String[] stringTab = new String[strTok.countTokens()];
1279                 while (strTok.hasMoreTokens()) {
1280                     stringTab[stringTab.length - strTok.countTokens()] = strTok.nextToken();
1281                 }
1282                 this.string = stringTab;
1283                 return UpdateStatus.Success;
1284             }
1285         }
1286
1287         this.string = string;
1288         return UpdateStatus.Success;
1289     }
1290
1291     /**
1292      * Get the string column number
1293      * @return the number of columns
1294      */
1295     public int getStringColNb() {
1296         return stringColNb;
1297     }
1298
1299     /**
1300      * Set the string column number
1301      * @param stringColNb the number of columns
1302      */
1303     public UpdateStatus setStringColNb(Integer stringColNb) {
1304         if (this.stringColNb == stringColNb) {
1305             return UpdateStatus.NoChange;
1306         }
1307         this.stringColNb = stringColNb;
1308         return UpdateStatus.Success;
1309     }
1310
1311
1312     /**
1313      * Get the tooltip string
1314      * @return the tooltip string
1315      */
1316     public String[] getTooltipString() {
1317         return this.tooltipString;
1318     }
1319
1320     /**
1321      * Set the tooltip string
1322      * @param tooltipString the tooltip string
1323      */
1324     public UpdateStatus setTooltipString(String[] tooltipString) {
1325         if (Arrays.equals(this.tooltipString, tooltipString)) {
1326             return UpdateStatus.NoChange;
1327         }
1328         this.tooltipString = tooltipString;
1329         return UpdateStatus.Success;
1330     }
1331
1332     /* Slider Step */
1333     public Double[] getSliderStep() {
1334         return this.sliderStep;
1335     }
1336
1337     public UpdateStatus setSliderStep(Double[] sliderStep) {
1338         if (Arrays.equals(this.sliderStep, sliderStep)) {
1339             return UpdateStatus.NoChange;
1340         }
1341         this.sliderStep = sliderStep;
1342         return UpdateStatus.Success;
1343     }
1344
1345     /* Units */
1346     public String getUnits() {
1347         return this.units;
1348     }
1349
1350     public UpdateStatus setUnits(String units) {
1351         if (this.units.equals(units)) {
1352             return UpdateStatus.NoChange;
1353         }
1354         this.units = units;
1355         return UpdateStatus.Success;
1356     }
1357
1358     /* Value */
1359     public Integer getUiValueSize() {
1360         return (value != null ? value.length : 0);
1361     }
1362
1363     public Double[] getUiValue() {
1364         return this.value;
1365     }
1366
1367     public UpdateStatus setUiValue(Double[] value) {
1368         if (Arrays.equals(this.value, value)) {
1369             return UpdateStatus.NoChange;
1370         }
1371         this.value = value;
1372         return UpdateStatus.Success;
1373     }
1374
1375     /* Vertical Alignment */
1376     public String getVerticalAlignment() {
1377         return this.verticalAlignment;
1378     }
1379
1380     public UpdateStatus setVerticalAlignment(String alignment) {
1381         if (this.verticalAlignment.equals(alignment)) {
1382             return UpdateStatus.NoChange;
1383         }
1384         this.verticalAlignment = alignment;
1385         return UpdateStatus.Success;
1386     }
1387
1388     public Integer getLayout() {
1389         return layout.ordinal();
1390     }
1391
1392     public LayoutType getLayoutAsEnum() {
1393         return layout;
1394     }
1395
1396     public boolean isLayoutSettable() {
1397         return (this.layout == LayoutType.NONE);
1398     }
1399
1400     public UpdateStatus setLayout(Integer value) {
1401         return setLayout(LayoutType.intToEnum(value));
1402     }
1403
1404     public UpdateStatus setLayout(LayoutType layout) {
1405         //avoid to set layout twice
1406         if (this.layout == LayoutType.NONE) {
1407             if (layout == LayoutType.NONE) {
1408                 return UpdateStatus.NoChange;
1409             }
1410
1411             this.layout = layout;
1412             return UpdateStatus.Success;
1413         }
1414
1415         return UpdateStatus.Fail;
1416     }
1417
1418     public Double[] getMargins() {
1419         return margins;
1420     }
1421
1422     public UpdateStatus setMargins(Double[] value) {
1423         UpdateStatus status = UpdateStatus.NoChange;
1424         if (value.length != 4) {
1425             return UpdateStatus.Fail;
1426         }
1427
1428         for (int i = 0 ; i < 4 ; i++) {
1429             if (margins[i].equals(value[i]) == false) {
1430                 margins[i] = value[i];
1431                 status = UpdateStatus.Success;
1432             }
1433         }
1434
1435         return status;
1436     }
1437
1438     public Integer getBorderPosition() {
1439         return borderPosition.ordinal();
1440     }
1441
1442     public BorderLayoutType getBorderPositionAsEnum() {
1443         return borderPosition;
1444     }
1445
1446     public UpdateStatus setBorderPosition(Integer value) {
1447         return setBorderPosition(BorderLayoutType.intToEnum(value));
1448     }
1449
1450     public UpdateStatus setBorderPosition(BorderLayoutType value) {
1451         if (borderPosition == value) {
1452             return UpdateStatus.NoChange;
1453         }
1454
1455         borderPosition = value;
1456         return UpdateStatus.Success;
1457     }
1458
1459     public Integer[] getGridBagPadding() {
1460         return gridbagPadding;
1461     }
1462
1463     public UpdateStatus setGridBagPadding(Integer[] value) {
1464         UpdateStatus status = UpdateStatus.NoChange;
1465         if (gridbagPadding.length != value.length) {
1466             return UpdateStatus.Fail;
1467         }
1468
1469         for (int i = 0 ; i < value.length ; i++) {
1470             if (gridbagPadding[i] != value[i]) {
1471                 gridbagPadding[i] = value[i];
1472                 status = UpdateStatus.Success;
1473             }
1474         }
1475
1476         return status;
1477     }
1478
1479     public Integer[] getGridBagPreferredSize() {
1480         return gridbagPreferredSize;
1481     }
1482
1483     public UpdateStatus setGridBagPreferredSize(Integer[] value) {
1484         UpdateStatus status = UpdateStatus.NoChange;
1485         if (gridbagPreferredSize.length != value.length) {
1486             return UpdateStatus.Fail;
1487         }
1488
1489         for (int i = 0 ; i < value.length ; i++) {
1490             if (gridbagPreferredSize[i] != value[i]) {
1491                 gridbagPreferredSize[i] = value[i];
1492                 status = UpdateStatus.Success;
1493             }
1494         }
1495
1496         return status;
1497     }
1498
1499     public Integer[] getBorderPreferredSize() {
1500         return borderPreferredSize;
1501     }
1502
1503     public UpdateStatus setBorderPreferredSize(Integer[] value) {
1504         UpdateStatus status = UpdateStatus.NoChange;
1505         if (borderPreferredSize.length != value.length) {
1506             return UpdateStatus.Fail;
1507         }
1508
1509         for (int i = 0 ; i < value.length ; i++) {
1510             if (borderPreferredSize[i] != value[i]) {
1511                 borderPreferredSize[i] = value[i];
1512                 status = UpdateStatus.Success;
1513             }
1514         }
1515
1516         return status;
1517     }
1518
1519     public Integer getGridBagAnchor() {
1520         return gridbagAnchor.ordinal();
1521     }
1522
1523     public AnchorType getGridBagAnchorAsEnum() {
1524         return gridbagAnchor;
1525     }
1526
1527     public UpdateStatus setGridBagAnchor(Integer value) {
1528         return setGridBagAnchor(AnchorType.intToEnum(value));
1529     }
1530
1531     public UpdateStatus setGridBagAnchor(AnchorType value) {
1532         if (gridbagAnchor == value) {
1533             return UpdateStatus.NoChange;
1534         }
1535
1536         gridbagAnchor = value;
1537         return UpdateStatus.Success;
1538     }
1539
1540     public Integer getGridBagFill() {
1541         return gridbagFill.ordinal();
1542     }
1543
1544     public FillType getGridBagFillAsEnum() {
1545         return gridbagFill;
1546     }
1547
1548     public UpdateStatus setGridBagFill(Integer value) {
1549         return setGridBagFill(FillType.intToEnum(value));
1550     }
1551
1552     public UpdateStatus setGridBagFill(FillType value) {
1553         if (gridbagFill == value) {
1554             return UpdateStatus.NoChange;
1555         }
1556
1557         gridbagFill = value;
1558         return UpdateStatus.Success;
1559     }
1560
1561     public Double[] getGridBagWeight() {
1562         return gridbagWeight;
1563     }
1564
1565     public UpdateStatus setGridBagWeight(Double[] value) {
1566         UpdateStatus status = UpdateStatus.NoChange;
1567         if (gridbagWeight.length != value.length) {
1568             return UpdateStatus.Fail;
1569         }
1570
1571         for (int i = 0 ; i < value.length ; i++) {
1572             if (gridbagWeight[i] != value[i]) {
1573                 gridbagWeight[i] = value[i];
1574                 status = UpdateStatus.Success;
1575             }
1576         }
1577
1578         return status;
1579     }
1580
1581     public Integer[] getGridBagGrid() {
1582         return gridbagGrid;
1583     }
1584
1585     public UpdateStatus setGridBagGrid(Integer[] value) {
1586         UpdateStatus status = UpdateStatus.NoChange;
1587         if (gridbagGrid.length != value.length) {
1588             return UpdateStatus.Fail;
1589         }
1590
1591         for (int i = 0 ; i < value.length ; i++) {
1592             if (gridbagGrid[i] != value[i]) {
1593                 gridbagGrid[i] = value[i];
1594                 status = UpdateStatus.Success;
1595             }
1596         }
1597
1598         return status;
1599     }
1600
1601     public Integer[] getBorderOptPadding() {
1602         return borderOptPadding;
1603     }
1604
1605     public UpdateStatus setBorderOptPadding(Integer[] value) {
1606         UpdateStatus status = UpdateStatus.NoChange;
1607         if (borderOptPadding.length != value.length) {
1608             return UpdateStatus.Fail;
1609         }
1610
1611         for (int i = 0 ; i < value.length ; i++) {
1612             if (borderOptPadding[i] != value[i]) {
1613                 borderOptPadding[i] = value[i];
1614                 status = UpdateStatus.Success;
1615             }
1616         }
1617
1618         return status;
1619     }
1620
1621     public Integer[] getGridOptPadding() {
1622         return gridOptPadding;
1623     }
1624
1625     public UpdateStatus setGridOptPadding(Integer[] value) {
1626         UpdateStatus status = UpdateStatus.NoChange;
1627         if (gridOptPadding.length != value.length) {
1628             return UpdateStatus.Fail;
1629         }
1630
1631         for (int i = 0 ; i < value.length ; i++) {
1632             if (gridOptPadding[i] != value[i]) {
1633                 gridOptPadding[i] = value[i];
1634                 status = UpdateStatus.Success;
1635             }
1636         }
1637
1638         return status;
1639     }
1640
1641     public Integer[] getGridOptGrid() {
1642         return gridOptGrid;
1643     }
1644
1645     public UpdateStatus setGridOptGrid(Integer[] value) {
1646         UpdateStatus status = UpdateStatus.NoChange;
1647         if (gridOptGrid.length != value.length) {
1648             return UpdateStatus.Fail;
1649         }
1650
1651         for (int i = 0 ; i < value.length ; i++) {
1652             if (gridOptGrid[i] != value[i]) {
1653                 gridOptGrid[i] = value[i];
1654                 status = UpdateStatus.Success;
1655             }
1656         }
1657
1658         return status;
1659     }
1660
1661     public Integer getFrameBorder() {
1662         return frameBorder;
1663     }
1664
1665     public UpdateStatus setFrameBorder(Integer value) {
1666         if (frameBorder.equals(value)) {
1667             return UpdateStatus.NoChange;
1668         }
1669
1670         frameBorder = value;
1671         return UpdateStatus.Success;
1672     }
1673
1674     public String getGroupName() {
1675         return groupName;
1676     }
1677
1678     public UpdateStatus setGroupName(String value) {
1679         if (groupName.equals(value)) {
1680             return UpdateStatus.NoChange;
1681         }
1682
1683         groupName = value;
1684         return UpdateStatus.Success;
1685     }
1686
1687     public Boolean getTitleScroll() {
1688         return titleScroll;
1689     }
1690
1691     public UpdateStatus setTitleScroll(Boolean value) {
1692         if (titleScroll == value) {
1693             return UpdateStatus.NoChange;
1694         }
1695
1696         titleScroll = value;
1697         return UpdateStatus.Success;
1698     }
1699
1700     public Integer getTitlePosition() {
1701         return titlePosition.ordinal();
1702     }
1703
1704     public TitlePositionType getTitlePositionAsEnum() {
1705         return titlePosition;
1706     }
1707
1708
1709     public UpdateStatus setTitlePosition(Integer value) {
1710         return setTitlePosition(TitlePositionType.intToEnum(value));
1711     }
1712
1713     public UpdateStatus setTitlePosition(TitlePositionType value) {
1714         if (titlePosition == value) {
1715             return UpdateStatus.NoChange;
1716         }
1717
1718         titlePosition = value;
1719         return UpdateStatus.Success;
1720     }
1721
1722     public UpdateStatus setScrollable(Boolean scrollable) {
1723         if (this.scrollable == scrollable) {
1724             return UpdateStatus.NoChange;
1725         }
1726
1727         this.scrollable = scrollable;
1728         return UpdateStatus.Success;
1729     }
1730
1731     public Boolean getScrollable() {
1732         return scrollable;
1733     }
1734
1735     public void setFont(Font font) {
1736         if (font == null) {
1737             return;
1738         }
1739
1740         if(getDefaultFontName().equals("")) {
1741             setFontName(font.getName());
1742         } else {
1743             setFontName(getDefaultFontName());
1744         }
1745         
1746         if(getDefaultFontSize() == 0) {
1747             setFontSize(font.getSize());
1748         } else {
1749             setFontSize(getDefaultFontSize());
1750         }
1751         
1752         
1753         if(getDefaultFontAngle().equals("")) {
1754             if (font.isItalic()) {
1755                 setFontAngle("italic");
1756             } else {
1757                 setFontAngle("normal");
1758             }
1759         } else {
1760             setFontAngle(getDefaultFontAngle());
1761         }
1762         
1763         
1764         if(getDefaultFontWeight().equals("")) {
1765             if (font.isBold()) {
1766                 setFontWeight("bold");
1767             } else {
1768                 setFontWeight("normal");
1769             }
1770         } else {
1771             setFontWeight(getDefaultFontWeight());
1772         }
1773         
1774         if(getDefaultFontUnits().equals("") == false) {
1775             setFontUnits(getDefaultFontUnits());
1776         }
1777     }
1778
1779     public UpdateStatus setIcon(String icon) {
1780         if (this.icon.equals(icon)) {
1781             return UpdateStatus.NoChange;
1782         }
1783
1784         this.icon = icon;
1785         return UpdateStatus.Success;
1786     }
1787
1788     public String getIcon() {
1789         return icon;
1790     }
1791
1792     public UpdateStatus setEventHandler(String eventHandlerName) {
1793         return eventHandler.setEventHandlerString(eventHandlerName);
1794     }
1795
1796     public String getEventHandler() {
1797         return eventHandler.getEventHandlerString();
1798     }
1799
1800     public UpdateStatus setEventHandlerEnable(Boolean eventHandlerEnabled) {
1801         return eventHandler.setEventHandlerEnabled(eventHandlerEnabled);
1802     }
1803
1804     public boolean getEventHandlerEnable() {
1805         return eventHandler.getEventHandlerEnabled();
1806     }
1807
1808     public void accept(Visitor visitor) {
1809     }
1810
1811     /*
1812     private static String defaultFontName = "";
1813     */
1814     public static void setDefaultFontName(String name) {
1815         defaultFontName = name;
1816     }
1817
1818     public static String getDefaultFontName() {
1819         return defaultFontName;
1820     }
1821
1822     /*
1823     private static String defaultFontWeight = "";
1824     */
1825     public static void setDefaultFontWeight(String weight) {
1826         defaultFontWeight = weight;
1827     }
1828
1829     public static String getDefaultFontWeight() {
1830         return defaultFontWeight;
1831     }
1832
1833     /*
1834     private static double defaultFontSize = 0;
1835     */
1836     public static void setDefaultFontSize(double size) {
1837         defaultFontSize = size;
1838     }
1839
1840     public static double getDefaultFontSize() {
1841         return defaultFontSize;
1842     }
1843
1844     /*
1845     private static String defaultFontAngle = "";
1846     */
1847     public static void setDefaultFontAngle(String angle) {
1848         defaultFontAngle = angle;
1849     }
1850
1851     public static String getDefaultFontAngle() {
1852         return defaultFontAngle;
1853     }
1854
1855     /*
1856     private static String defaultFontUnits = "";
1857     */
1858     public static void setDefaultFontUnits(String units) {
1859         defaultFontUnits = units;
1860     }
1861
1862     public static String getDefaultFontUnits() {
1863         return defaultFontUnits;
1864     }
1865
1866 }