79dac44666962181840843e02ef14f7cf4eb7c9d
[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     private UicontrolStyle style;
438     private Double[] backgroundColor = { -1.0, -1.0, -1.0};
439     private Boolean enable = true;
440     private String fontAngle = "";
441     private String fontName = "";
442     private double fontSize = 0;
443     private String fontUnits = "points";
444     private String fontWeight = "";
445     private Double[] foregroundColor = { -1.0, -1.0, -1.0};
446     private String horizontalAlignment = "";
447     private String verticalAlignment = "";
448     private Integer[] listboxTop;
449     private double max = 1.0;
450     private double min;
451     private Double[] position = {DEFAULT_X, DEFAULT_Y, DEFAULT_WIDTH, DEFAULT_HEIGHT};
452     private String relief = RELIEF_DEFAULT;
453     private Double[] sliderStep = {0.01, 0.1};
454     private String[] string = new String[] {};
455     private int stringColNb = 1; // Used for tables
456     private String[] tooltipString = {""};
457     private String units = "pixels";
458     private Double[] value;
459     private Boolean scrollable = false;
460     private LayoutType layout = LayoutType.NONE;
461     private Double[] margins = new Double[] {0.0, 0.0, 0.0, 0.0};
462     private Integer[] gridbagGrid = new Integer[] { -1, -1, 1, 1};
463     private Double[] gridbagWeight = new Double[] {0.0, 0.0};
464     private FillType gridbagFill = FillType.NONE;
465     private AnchorType gridbagAnchor = AnchorType.CENTER;
466     private Integer[] gridbagPadding = new Integer[] {0, 0};
467     private Integer[] gridbagPreferredSize = new Integer[] { -1, -1};
468     private BorderLayoutType borderPosition = BorderLayoutType.CENTER;
469     private Integer[] borderPreferredSize = new Integer[] { -1, -1};
470     private String icon = "";
471
472     /** layout options */
473     private Integer[] gridOptGrid = new Integer[] {0, 0};
474     private Integer[] gridOptPadding = new Integer[] {0, 0};
475     private Integer[] borderOptPadding = new Integer[] {0, 0};
476
477     /** border options */
478     private Integer frameBorder = 0;
479
480     /** groupname for radiobutton */
481     private String groupName = "";
482
483     /** tab properties */
484     private Boolean titleScroll = false;
485     private TitlePositionType titlePosition = TitlePositionType.TOP;
486
487     private EventHandler eventHandler;
488
489     /**
490      * All uicontrol properties
491      */
492     private enum UicontrolProperty {
493         STYLE,
494         BACKGROUNDCOLOR,
495         ENABLE,
496         FONTANGLE,
497         FONTNAME,
498         FONTSIZE,
499         FONTUNITS,
500         FONTWEIGHT,
501         FOREGROUNDCOLOR,
502         HORIZONTALALIGNMENT,
503         LISTBOXTOP,
504         LISTBOXTOP_SIZE,
505         MAX,
506         MIN,
507         POSITION,
508         SCALE,
509         SHEAR,
510         SLIDERSTEP,
511         STRING,
512         STRING_SIZE,
513         STRING_COLNB,
514         RELIEF,
515         TOOLTIPSTRING,
516         TOOLTIPSTRING_SIZE,
517         UNITS,
518         VALUE,
519         VALUE_SIZE,
520         VERTICALALIGNMENT,
521         LAYOUT,
522         LAYOUT_SET,
523         MARGINS,
524         GRIDBAG_GRID,
525         GRIDBAG_WEIGHT,
526         GRIDBAG_FILL,
527         GRIDBAG_ANCHOR,
528         GRIDBAG_PADDING,
529         GRIDBAG_PREFERREDSIZE,
530         BORDER_POSITION,
531         BORDER_PREFERREDSIZE,
532         GRIDOPT_GRID,
533         GRIDOPT_PADDING,
534         BORDEROPT_PADDING,
535         FRAMEBORDER,
536         GROUPNAME,
537         TITLE_POSITION,
538         TITLE_SCROLL,
539         SCROLLABLE,
540         ICON,
541         EVENTHANDLER,
542         EVENTHANDLERENABLE
543     };
544
545     /**
546      * All uicontrol styles
547      */
548     public enum UicontrolStyle {
549         CHECKBOX,
550         EDIT,
551         FRAME,
552         IMAGE,
553         LISTBOX,
554         POPUPMENU,
555         PUSHBUTTON,
556         RADIOBUTTON,
557         SLIDER,
558         TABLE,
559         TEXT,
560         TABGROUP,
561         TAB,
562         LAYER,
563         SPINNER
564     };
565
566     /**
567      * Constructor
568      */
569     public Uicontrol() {
570         super();
571         eventHandler = new EventHandler();
572         setVisible(false); /* To avoid to see the object rendered before all its properties to be set (See bug #10346) */
573
574         if (Console.getConsole().getUseDeprecatedLF()) {
575             setBackgroundColor(new Double[] {
576                                    DEFAULT_RED_BACKGROUND,
577                                    DEFAULT_GREEN_BACKGROUND,
578                                    DEFAULT_BLUE_BACKGROUND
579                                });
580
581             setHorizontalAlignment("center");
582             setVerticalAlignment("middle");
583
584             setFontName(DEFAULT_FONTNAME);
585             setFontSize(DEFAULT_FONTSIZE);
586             setFontAngle(DEFAULT_FONTANGLE);
587             setFontWeight(DEFAULT_FONTWEIGHT);
588         }
589     }
590
591     /**
592      * Get style as a string
593      * @param style the uicontrol style
594      * @return the uicontrol style as a string
595      */
596     private int styleEnumToInt(UicontrolStyle style) {
597         switch (style) {
598             case CHECKBOX:
599                 return __GO_UI_CHECKBOX__;
600             case EDIT:
601                 return __GO_UI_EDIT__;
602             case FRAME:
603                 return __GO_UI_FRAME__;
604             case IMAGE:
605                 return __GO_UI_IMAGE__;
606             case LISTBOX:
607                 return __GO_UI_LISTBOX__;
608             case POPUPMENU:
609                 return __GO_UI_POPUPMENU__;
610             case PUSHBUTTON:
611                 return __GO_UI_PUSHBUTTON__;
612             case RADIOBUTTON:
613                 return __GO_UI_RADIOBUTTON__;
614             case SLIDER:
615                 return __GO_UI_SLIDER__;
616             case TABLE:
617                 return __GO_UI_TABLE__;
618             case TEXT:
619                 return __GO_UI_TEXT__;
620             case TAB:
621                 return __GO_UI_TAB__;
622             case LAYER:
623                 return __GO_UI_LAYER__;
624             case SPINNER:
625                 return __GO_UI_SPINNER__;
626             default :
627                 return -1;
628         }
629     }
630
631     /**
632      * Get style as an enum element
633      * @param style the uicontrol style
634      * @return the uicontrol style as an enum element
635      */
636     private UicontrolStyle intToStyleEnum(int style) {
637         switch (style) {
638             case __GO_UI_CHECKBOX__ :
639                 return UicontrolStyle.CHECKBOX;
640             case __GO_UI_EDIT__ :
641                 return UicontrolStyle.EDIT;
642             case __GO_UI_FRAME__ :
643                 return UicontrolStyle.FRAME;
644             case __GO_UI_IMAGE__ :
645                 return  UicontrolStyle.IMAGE;
646             case __GO_UI_LISTBOX__ :
647                 return UicontrolStyle.LISTBOX;
648             case __GO_UI_POPUPMENU__ :
649                 return UicontrolStyle.POPUPMENU;
650             case __GO_UI_PUSHBUTTON__ :
651                 return UicontrolStyle.PUSHBUTTON;
652             case __GO_UI_RADIOBUTTON__ :
653                 return UicontrolStyle.RADIOBUTTON;
654             case __GO_UI_SLIDER__ :
655                 return UicontrolStyle.SLIDER;
656             case __GO_UI_TABLE__ :
657                 return UicontrolStyle.TABLE;
658             case __GO_UI_TEXT__ :
659                 return UicontrolStyle.TEXT;
660             case __GO_UI_TAB__:
661                 return UicontrolStyle.TAB;
662             case __GO_UI_LAYER__:
663                 return UicontrolStyle.LAYER;
664             case __GO_UI_SPINNER__:
665                 return UicontrolStyle.SPINNER;
666             default :
667                 return null;
668         }
669     }
670
671     /**
672      * Get this object type
673      * @return uicontrol
674      * @see org.scilab.modules.graphic_objects.graphicObject.GraphicObject#getType()
675      */
676     public Integer getType() {
677         return __GO_UICONTROL__;
678     }
679
680     /**
681      * Returns the enum associated to a property name
682      * @param propertyName the property name
683      * @return the property enum
684      */
685     public Object getPropertyFromName(int propertyName) {
686         switch (propertyName) {
687             case __GO_STYLE__ :
688                 return UicontrolProperty.STYLE;
689             case __GO_UI_BACKGROUNDCOLOR__ :
690                 return UicontrolProperty.BACKGROUNDCOLOR;
691             case __GO_UI_ENABLE__ :
692                 return UicontrolProperty.ENABLE;
693             case __GO_UI_FONTANGLE__ :
694                 return UicontrolProperty.FONTANGLE;
695             case __GO_UI_FONTNAME__ :
696                 return UicontrolProperty.FONTNAME;
697             case __GO_UI_FONTSIZE__ :
698                 return UicontrolProperty.FONTSIZE;
699             case __GO_UI_FONTUNITS__ :
700                 return UicontrolProperty.FONTUNITS;
701             case __GO_UI_FONTWEIGHT__ :
702                 return UicontrolProperty.FONTWEIGHT;
703             case __GO_UI_FOREGROUNDCOLOR__ :
704                 return UicontrolProperty.FOREGROUNDCOLOR;
705             case __GO_UI_HORIZONTALALIGNMENT__ :
706                 return UicontrolProperty.HORIZONTALALIGNMENT;
707             case __GO_UI_LISTBOXTOP__ :
708                 return UicontrolProperty.LISTBOXTOP;
709             case __GO_UI_LISTBOXTOP_SIZE__ :
710                 return UicontrolProperty.LISTBOXTOP_SIZE;
711             case __GO_UI_MAX__ :
712                 return UicontrolProperty.MAX;
713             case __GO_UI_MIN__ :
714                 return UicontrolProperty.MIN;
715             case __GO_POSITION__ :
716                 return UicontrolProperty.POSITION;
717             case __GO_UI_RELIEF__ :
718                 return UicontrolProperty.RELIEF;
719             case __GO_UI_SLIDERSTEP__ :
720                 return UicontrolProperty.SLIDERSTEP;
721             case __GO_UI_STRING__ :
722                 return UicontrolProperty.STRING;
723             case __GO_UI_STRING_SIZE__ :
724                 return UicontrolProperty.STRING_SIZE;
725             case __GO_UI_STRING_COLNB__ :
726                 return UicontrolProperty.STRING_COLNB;
727             case __GO_UI_TOOLTIPSTRING__ :
728                 return UicontrolProperty.TOOLTIPSTRING;
729             case __GO_UI_TOOLTIPSTRING_SIZE__ :
730                 return UicontrolProperty.TOOLTIPSTRING_SIZE;
731             case __GO_UI_UNITS__ :
732                 return UicontrolProperty.UNITS;
733             case __GO_UI_VALUE__ :
734                 return UicontrolProperty.VALUE;
735             case __GO_UI_VALUE_SIZE__ :
736                 return UicontrolProperty.VALUE_SIZE;
737             case __GO_UI_VERTICALALIGNMENT__ :
738                 return UicontrolProperty.VERTICALALIGNMENT;
739             case __GO_LAYOUT__ :
740                 return UicontrolProperty.LAYOUT;
741             case __GO_LAYOUT_SET__ :
742                 return UicontrolProperty.LAYOUT_SET;
743             case __GO_MARGINS__:
744                 return UicontrolProperty.MARGINS;
745             case __GO_UI_GRIDBAG_GRID__:
746                 return UicontrolProperty.GRIDBAG_GRID;
747             case __GO_UI_GRIDBAG_WEIGHT__:
748                 return UicontrolProperty.GRIDBAG_WEIGHT;
749             case __GO_UI_GRIDBAG_FILL__:
750                 return UicontrolProperty.GRIDBAG_FILL;
751             case __GO_UI_GRIDBAG_ANCHOR__:
752                 return UicontrolProperty.GRIDBAG_ANCHOR;
753             case __GO_UI_GRIDBAG_PADDING__:
754                 return UicontrolProperty.GRIDBAG_PADDING;
755             case __GO_UI_GRIDBAG_PREFERREDSIZE__:
756                 return UicontrolProperty.GRIDBAG_PREFERREDSIZE;
757             case __GO_UI_BORDER_POSITION__:
758                 return UicontrolProperty.BORDER_POSITION;
759             case __GO_UI_BORDER_PREFERREDSIZE__:
760                 return UicontrolProperty.BORDER_PREFERREDSIZE;
761             case __GO_GRID_OPT_GRID__:
762                 return UicontrolProperty.GRIDOPT_GRID;
763             case __GO_GRID_OPT_PADDING__:
764                 return UicontrolProperty.GRIDOPT_PADDING;
765             case __GO_BORDER_OPT_PADDING__:
766                 return UicontrolProperty.BORDEROPT_PADDING;
767             case __GO_UI_FRAME_BORDER__:
768                 return UicontrolProperty.FRAMEBORDER;
769             case __GO_UI_GROUP_NAME__:
770                 return UicontrolProperty.GROUPNAME;
771             case __GO_UI_TITLE_POSITION__:
772                 return UicontrolProperty.TITLE_POSITION;
773             case __GO_UI_TITLE_SCROLL__:
774                 return UicontrolProperty.TITLE_SCROLL;
775             case __GO_UI_SCROLLABLE__:
776                 return UicontrolProperty.SCROLLABLE;
777             case __GO_UI_ICON__:
778                 return UicontrolProperty.ICON;
779             case __GO_EVENTHANDLER_NAME__:
780                 return UicontrolProperty.EVENTHANDLER;
781             case __GO_EVENTHANDLER_ENABLE__:
782                 return UicontrolProperty.EVENTHANDLERENABLE;
783             default :
784                 return super.getPropertyFromName(propertyName);
785         }
786     }
787
788     /**
789      * Fast property get method
790      * @param property the property to get
791      * @return the property value
792      */
793     public Object getProperty(Object property) {
794         if (property == UicontrolProperty.STYLE) {
795             return getStyle();
796         } else if (property == UicontrolProperty.BACKGROUNDCOLOR) {
797             return getBackgroundColor();
798         } else if (property == UicontrolProperty.ENABLE) {
799             return getEnable();
800         } else if (property == UicontrolProperty.FONTANGLE) {
801             return getFontAngle();
802         } else if (property == UicontrolProperty.FONTNAME) {
803             return getFontName();
804         } else if (property == UicontrolProperty.FONTSIZE) {
805             return getFontSize();
806         } else if (property == UicontrolProperty.FONTUNITS) {
807             return getFontUnits();
808         } else if (property == UicontrolProperty.FONTWEIGHT) {
809             return getFontWeight();
810         } else if (property == UicontrolProperty.FOREGROUNDCOLOR) {
811             return getForegroundColor();
812         } else if (property == UicontrolProperty.HORIZONTALALIGNMENT) {
813             return getHorizontalAlignment();
814         } else if (property == UicontrolProperty.LISTBOXTOP) {
815             return getListboxTop();
816         } else if (property == UicontrolProperty.LISTBOXTOP_SIZE) {
817             return getListboxTopSize();
818         } else if (property == UicontrolProperty.MAX) {
819             return getMax();
820         } else if (property == UicontrolProperty.MIN) {
821             return getMin();
822         } else if (property == UicontrolProperty.POSITION) {
823             return getUiPosition();
824         } else if (property == UicontrolProperty.RELIEF) {
825             return getRelief();
826         } else if (property == UicontrolProperty.SLIDERSTEP) {
827             return getSliderStep();
828         } else if (property == UicontrolProperty.STRING) {
829             return getString();
830         } else if (property == UicontrolProperty.STRING_SIZE) {
831             return getString().length;
832         } else if (property == UicontrolProperty.STRING_COLNB) {
833             return getStringColNb();
834         } else if (property == UicontrolProperty.TOOLTIPSTRING) {
835             return getTooltipString();
836         } else if (property == UicontrolProperty.TOOLTIPSTRING_SIZE) {
837             return getTooltipString().length;
838         } else if (property == UicontrolProperty.UNITS) {
839             return getUnits();
840         } else if (property == UicontrolProperty.VALUE) {
841             return getUiValue();
842         } else if (property == UicontrolProperty.VALUE_SIZE) {
843             return getUiValueSize();
844         } else if (property == UicontrolProperty.VERTICALALIGNMENT) {
845             return getVerticalAlignment();
846         } else if (property == UicontrolProperty.LAYOUT) {
847             return getLayout();
848         } else if (property == UicontrolProperty.LAYOUT_SET) {
849             return isLayoutSettable();
850         } else if (property == UicontrolProperty.MARGINS) {
851             return getMargins();
852         } else if (property == UicontrolProperty.GRIDBAG_GRID) {
853             return getGridBagGrid();
854         } else if (property == UicontrolProperty.GRIDBAG_WEIGHT) {
855             return getGridBagWeight();
856         } else if (property == UicontrolProperty.GRIDBAG_FILL) {
857             return getGridBagFill();
858         } else if (property == UicontrolProperty.GRIDBAG_ANCHOR) {
859             return getGridBagAnchor();
860         } else if (property == UicontrolProperty.GRIDBAG_PADDING) {
861             return getGridBagPadding();
862         } else if (property == UicontrolProperty.GRIDBAG_PREFERREDSIZE) {
863             return getGridBagPreferredSize();
864         } else if (property == UicontrolProperty.BORDER_POSITION) {
865             return getBorderPosition();
866         } else if (property == UicontrolProperty.BORDER_PREFERREDSIZE) {
867             return getBorderPreferredSize();
868         } else if (property == UicontrolProperty.GRIDOPT_GRID) {
869             return getGridOptGrid();
870         } else if (property == UicontrolProperty.GRIDOPT_PADDING) {
871             return getGridOptPadding();
872         } else if (property == UicontrolProperty.BORDEROPT_PADDING) {
873             return getBorderOptPadding();
874         } else if (property == UicontrolProperty.FRAMEBORDER) {
875             return getFrameBorder();
876         } else if (property == UicontrolProperty.GROUPNAME) {
877             return getGroupName();
878         } else if (property == UicontrolProperty.TITLE_POSITION) {
879             return getTitlePosition();
880         } else if (property == UicontrolProperty.TITLE_SCROLL) {
881             return getTitleScroll();
882         } else if (property == UicontrolProperty.SCROLLABLE) {
883             return getScrollable();
884         } else if (property == UicontrolProperty.ICON) {
885             return getIcon();
886         } else if (property == UicontrolProperty.EVENTHANDLER) {
887             return getEventHandler();
888         } else if (property == UicontrolProperty.EVENTHANDLERENABLE) {
889             return getEventHandlerEnable();
890         } else {
891             return super.getProperty(property);
892         }
893     }
894
895     /**
896      * Fast property set method
897      * @param property the property to set
898      * @param value the property value
899      * @return true if the property has been set, false otherwise
900      */
901     public UpdateStatus setProperty(Object property, Object value) {
902         if (!(property instanceof UicontrolProperty)) {
903             return super.setProperty(property, value);
904         }
905
906         UicontrolProperty p = (UicontrolProperty) property;
907         switch (p) {
908             case STYLE:
909                 return setStyle((Integer) value);
910             case BACKGROUNDCOLOR:
911                 return setBackgroundColor((Double[]) value);
912             case ENABLE:
913                 return setEnable((Boolean) value);
914             case FONTANGLE:
915                 return setFontAngle((String) value);
916             case FONTNAME:
917                 return setFontName((String) value);
918             case FONTSIZE:
919                 return setFontSize((Double) value);
920             case FONTUNITS:
921                 return setFontUnits((String) value);
922             case FONTWEIGHT:
923                 return setFontWeight((String) value);
924             case FOREGROUNDCOLOR:
925                 return setForegroundColor((Double[]) value);
926             case HORIZONTALALIGNMENT:
927                 return setHorizontalAlignment((String) value);
928             case LISTBOXTOP:
929                 return setListboxTop((Integer[]) value);
930             case MAX:
931                 return setMax((Double) value);
932             case MIN:
933                 return setMin((Double) value);
934             case POSITION:
935                 return setUiPosition((Double[]) value);
936             case RELIEF:
937                 return setRelief((String) value);
938             case SLIDERSTEP:
939                 return setSliderStep((Double[]) value);
940             case STRING:
941                 return setString((String[]) value);
942             case STRING_COLNB:
943                 return setStringColNb((Integer) value);
944             case TOOLTIPSTRING:
945                 return setTooltipString((String[]) value);
946             case UNITS:
947                 return setUnits((String) value);
948             case VALUE:
949                 return setUiValue((Double[]) value);
950             case VERTICALALIGNMENT:
951                 return setVerticalAlignment((String) value);
952             case LAYOUT:
953                 return setLayout((Integer) value);
954             case MARGINS:
955                 return setMargins((Double[]) value);
956             case GRIDBAG_GRID:
957                 return setGridBagGrid((Integer[]) value);
958             case GRIDBAG_WEIGHT:
959                 return setGridBagWeight((Double[]) value);
960             case GRIDBAG_FILL:
961                 return setGridBagFill((Integer) value);
962             case GRIDBAG_ANCHOR:
963                 return setGridBagAnchor((Integer) value);
964             case GRIDBAG_PADDING:
965                 return setGridBagPadding((Integer[]) value);
966             case GRIDBAG_PREFERREDSIZE:
967                 return setGridBagPreferredSize((Integer[]) value);
968             case BORDER_POSITION:
969                 return setBorderPosition((Integer) value);
970             case BORDER_PREFERREDSIZE:
971                 return setBorderPreferredSize((Integer[]) value);
972             case GRIDOPT_GRID:
973                 return setGridOptGrid((Integer[]) value);
974             case GRIDOPT_PADDING:
975                 return setGridOptPadding((Integer[]) value);
976             case BORDEROPT_PADDING:
977                 return setBorderOptPadding((Integer[]) value);
978             case FRAMEBORDER:
979                 return setFrameBorder((Integer) value);
980             case GROUPNAME:
981                 return setGroupName((String) value);
982             case TITLE_POSITION:
983                 return setTitlePosition((Integer) value);
984             case TITLE_SCROLL:
985                 return setTitleScroll((Boolean) value);
986             case SCROLLABLE:
987                 return setScrollable((Boolean) value);
988             case ICON:
989                 return setIcon((String) value);
990             case EVENTHANDLER:
991                 return setEventHandler((String) value);
992             case EVENTHANDLERENABLE:
993                 return setEventHandlerEnable((Boolean) value);
994             default:
995                 return super.setProperty(property, value);
996         }
997     }
998
999     /**
1000          * Get the style
1001          * @return the style
1002          */
1003     public Integer getStyle() {
1004         return styleEnumToInt(style);
1005     }
1006
1007     public UicontrolStyle getStyleAsEnum() {
1008         return style;
1009     }
1010
1011     /**
1012      * Set the style
1013      * @param style the style
1014      */
1015     public UpdateStatus setStyle(int style) {
1016         UicontrolStyle val =  intToStyleEnum(style);
1017         if (val == this.style) {
1018             return UpdateStatus.NoChange;
1019         }
1020
1021         this.style = val;
1022         return UpdateStatus.Success;
1023     }
1024
1025     /* Background Color */
1026     public Double[] getBackgroundColor() {
1027         return this.backgroundColor;
1028     }
1029
1030     public UpdateStatus setBackgroundColor(Double[] colors) {
1031         if (Arrays.equals(colors, this.backgroundColor)) {
1032             return UpdateStatus.NoChange;
1033         }
1034
1035         this.backgroundColor = colors;
1036         return UpdateStatus.Success;
1037     }
1038
1039     /* Enable */
1040     public Boolean getEnable() {
1041         return enable;
1042     }
1043
1044     public UpdateStatus setEnable(Boolean status) {
1045         if (enable.equals(status)) {
1046             return UpdateStatus.NoChange;
1047         }
1048         enable = status;
1049         return UpdateStatus.Success;
1050     }
1051
1052     /* FontAngle */
1053     public String getFontAngle() {
1054         return this.fontAngle;
1055     }
1056
1057     public UpdateStatus setFontAngle(String fontAngle) {
1058         if (this.fontAngle.equals(fontAngle)) {
1059             return UpdateStatus.NoChange;
1060         }
1061         this.fontAngle = fontAngle;
1062         return UpdateStatus.Success;
1063     }
1064
1065     /* FontName */
1066     public String getFontName() {
1067         return this.fontName;
1068     }
1069
1070     public UpdateStatus setFontName(String fontName) {
1071         if (this.fontName.equals(fontName)) {
1072             return UpdateStatus.NoChange;
1073         }
1074         this.fontName = fontName;
1075         return UpdateStatus.Success;
1076     }
1077
1078     /* FontSize */
1079     public double getFontSize() {
1080         return this.fontSize;
1081     }
1082
1083     public UpdateStatus setFontSize(double fontSize) {
1084         if (this.fontSize == fontSize) {
1085             return UpdateStatus.NoChange;
1086         }
1087         this.fontSize = fontSize;
1088         return UpdateStatus.Success;
1089     }
1090
1091     /* FontUnits */
1092     public String getFontUnits() {
1093         return this.fontUnits;
1094     }
1095
1096     public UpdateStatus setFontUnits(String fontUnits) {
1097         if (this.fontUnits.equals(fontUnits)) {
1098             return UpdateStatus.NoChange;
1099         }
1100         this.fontUnits = fontUnits;
1101         return UpdateStatus.Success;
1102     }
1103
1104     /* FontWeight */
1105     public String getFontWeight() {
1106         return this.fontWeight;
1107     }
1108
1109     public UpdateStatus setFontWeight(String fontWeight) {
1110         if (this.fontWeight.equals(fontWeight)) {
1111             return UpdateStatus.NoChange;
1112         }
1113         this.fontWeight = fontWeight;
1114         return UpdateStatus.Success;
1115     }
1116
1117     /* Foreground Color */
1118     public Double[] getForegroundColor() {
1119         return this.foregroundColor;
1120     }
1121
1122     public UpdateStatus setForegroundColor(Double[] colors) {
1123         if (Arrays.equals(this.foregroundColor, colors)) {
1124             return UpdateStatus.NoChange;
1125         }
1126         this.foregroundColor = colors;
1127         return UpdateStatus.Success;
1128     }
1129
1130     /* Horizontal Alignment */
1131     public String getHorizontalAlignment() {
1132         return this.horizontalAlignment;
1133     }
1134
1135     public UpdateStatus setHorizontalAlignment(String alignment) {
1136         if (this.horizontalAlignment.equals(alignment)) {
1137             return UpdateStatus.NoChange;
1138         }
1139         this.horizontalAlignment = alignment;
1140         return UpdateStatus.Success;
1141     }
1142
1143     /* Listbox Top */
1144     public Integer getListboxTopSize() {
1145         return (listboxTop != null ? listboxTop.length : 0);
1146     }
1147
1148     public Integer[] getListboxTop() {
1149         return this.listboxTop;
1150     }
1151
1152     public UpdateStatus setListboxTop(Integer[] listboxTop) {
1153         if (Arrays.equals(this.listboxTop, listboxTop)) {
1154             return UpdateStatus.NoChange;
1155         }
1156         this.listboxTop = listboxTop;
1157         return UpdateStatus.Success;
1158     }
1159
1160     /* Max */
1161     public Double getMax() {
1162         return this.max;
1163     }
1164
1165     public UpdateStatus setMax(double max) {
1166         if (this.max == max) {
1167             return UpdateStatus.NoChange;
1168         }
1169         this.max = max;
1170         return UpdateStatus.Success;
1171     }
1172
1173     /* Min */
1174     public Double getMin() {
1175         return this.min;
1176     }
1177
1178     public UpdateStatus setMin(double min) {
1179         if (this.min == min) {
1180             return UpdateStatus.NoChange;
1181         }
1182         this.min = min;
1183         return UpdateStatus.Success;
1184     }
1185
1186     /* Position */
1187     public Double[] getUiPosition() {
1188         return this.position;
1189     }
1190
1191     public UpdateStatus setUiPosition(Double[] position) {
1192         if (Arrays.equals(this.position, position)) {
1193             return UpdateStatus.NoChange;
1194         }
1195         this.position = position;
1196         return UpdateStatus.Success;
1197     }
1198
1199     /* Relief */
1200     public String getRelief() {
1201         return this.relief;
1202     }
1203
1204     public UpdateStatus setRelief(String relief) {
1205         if (this.relief.equals(relief)) {
1206             return UpdateStatus.NoChange;
1207         }
1208         this.relief = relief;
1209         return UpdateStatus.Success;
1210     }
1211
1212     /**
1213      * Get the string
1214      * @return the string
1215      */
1216     public String[] getString() {
1217         return this.string;
1218     }
1219
1220     /**
1221      * Set the string
1222      * @param string the string
1223      */
1224     public UpdateStatus setString(String[] string) {
1225         //update needed ?
1226
1227         //both null or same object
1228         if (this.string == string) {
1229             return UpdateStatus.NoChange;
1230         }
1231
1232         boolean needUpdate = false;
1233         if (this.string.length == string.length) {
1234             for (int i = 0 ; i < string.length ; i++) {
1235
1236                 if (this.string[i] == null && string[i] == null) {
1237                     continue;
1238                 }
1239
1240                 //only one null
1241                 if ((this.string[i] == null || string[i] == null) &&
1242                         this.string[i] != string[i]) {
1243                     needUpdate = true;
1244                     break;
1245                 }
1246
1247                 if (this.string[i].equals(string[i]) == false) {
1248                     needUpdate = true;
1249                     break;
1250                 }
1251             }
1252         } else {
1253             needUpdate = true;
1254         }
1255
1256         if (needUpdate == false) {
1257             return UpdateStatus.NoChange;
1258         }
1259
1260         if (this.style == UicontrolStyle.LISTBOX || this.style == UicontrolStyle.POPUPMENU) {
1261             /* String can be set using a|b|c|d */
1262             if (string.length == 0) {
1263                 if (this.string.length == 0) {
1264                     return UpdateStatus.NoChange;
1265                 }
1266
1267                 this.string = string;
1268                 return UpdateStatus.Success;
1269             } else if (string.length == 1 && string[0].contains(STRING_SEPARATOR)) {
1270                 StringTokenizer strTok = new StringTokenizer(string[0], STRING_SEPARATOR);
1271                 String[] stringTab = new String[strTok.countTokens()];
1272                 while (strTok.hasMoreTokens()) {
1273                     stringTab[stringTab.length - strTok.countTokens()] = strTok.nextToken();
1274                 }
1275                 this.string = stringTab;
1276                 return UpdateStatus.Success;
1277             }
1278         }
1279
1280         this.string = string;
1281         return UpdateStatus.Success;
1282     }
1283
1284     /**
1285      * Get the string column number
1286      * @return the number of columns
1287      */
1288     public int getStringColNb() {
1289         return stringColNb;
1290     }
1291
1292     /**
1293      * Set the string column number
1294      * @param stringColNb the number of columns
1295      */
1296     public UpdateStatus setStringColNb(Integer stringColNb) {
1297         if (this.stringColNb == stringColNb) {
1298             return UpdateStatus.NoChange;
1299         }
1300         this.stringColNb = stringColNb;
1301         return UpdateStatus.Success;
1302     }
1303
1304
1305     /**
1306      * Get the tooltip string
1307      * @return the tooltip string
1308      */
1309     public String[] getTooltipString() {
1310         return this.tooltipString;
1311     }
1312
1313     /**
1314      * Set the tooltip string
1315      * @param tooltipString the tooltip string
1316      */
1317     public UpdateStatus setTooltipString(String[] tooltipString) {
1318         if (Arrays.equals(this.tooltipString, tooltipString)) {
1319             return UpdateStatus.NoChange;
1320         }
1321         this.tooltipString = tooltipString;
1322         return UpdateStatus.Success;
1323     }
1324
1325     /* Slider Step */
1326     public Double[] getSliderStep() {
1327         return this.sliderStep;
1328     }
1329
1330     public UpdateStatus setSliderStep(Double[] sliderStep) {
1331         if (Arrays.equals(this.sliderStep, sliderStep)) {
1332             return UpdateStatus.NoChange;
1333         }
1334         this.sliderStep = sliderStep;
1335         return UpdateStatus.Success;
1336     }
1337
1338     /* Units */
1339     public String getUnits() {
1340         return this.units;
1341     }
1342
1343     public UpdateStatus setUnits(String units) {
1344         if (this.units.equals(units)) {
1345             return UpdateStatus.NoChange;
1346         }
1347         this.units = units;
1348         return UpdateStatus.Success;
1349     }
1350
1351     /* Value */
1352     public Integer getUiValueSize() {
1353         return (value != null ? value.length : 0);
1354     }
1355
1356     public Double[] getUiValue() {
1357         return this.value;
1358     }
1359
1360     public UpdateStatus setUiValue(Double[] value) {
1361         if (Arrays.equals(this.value, value)) {
1362             return UpdateStatus.NoChange;
1363         }
1364         this.value = value;
1365         return UpdateStatus.Success;
1366     }
1367
1368     /* Vertical Alignment */
1369     public String getVerticalAlignment() {
1370         return this.verticalAlignment;
1371     }
1372
1373     public UpdateStatus setVerticalAlignment(String alignment) {
1374         if (this.verticalAlignment.equals(alignment)) {
1375             return UpdateStatus.NoChange;
1376         }
1377         this.verticalAlignment = alignment;
1378         return UpdateStatus.Success;
1379     }
1380
1381     public Integer getLayout() {
1382         return layout.ordinal();
1383     }
1384
1385     public LayoutType getLayoutAsEnum() {
1386         return layout;
1387     }
1388
1389     public boolean isLayoutSettable() {
1390         return (this.layout == LayoutType.NONE);
1391     }
1392
1393     public UpdateStatus setLayout(Integer value) {
1394         return setLayout(LayoutType.intToEnum(value));
1395     }
1396
1397     public UpdateStatus setLayout(LayoutType layout) {
1398         //avoid to set layout twice
1399         if (this.layout == LayoutType.NONE) {
1400             if (layout == LayoutType.NONE) {
1401                 return UpdateStatus.NoChange;
1402             }
1403
1404             this.layout = layout;
1405             return UpdateStatus.Success;
1406         }
1407
1408         return UpdateStatus.Fail;
1409     }
1410
1411     public Double[] getMargins() {
1412         return margins;
1413     }
1414
1415     public UpdateStatus setMargins(Double[] value) {
1416         UpdateStatus status = UpdateStatus.NoChange;
1417         if (value.length != 4) {
1418             return UpdateStatus.Fail;
1419         }
1420
1421         for (int i = 0 ; i < 4 ; i++) {
1422             if (margins[i].equals(value[i]) == false) {
1423                 margins[i] = value[i];
1424                 status = UpdateStatus.Success;
1425             }
1426         }
1427
1428         return status;
1429     }
1430
1431     public Integer getBorderPosition() {
1432         return borderPosition.ordinal();
1433     }
1434
1435     public BorderLayoutType getBorderPositionAsEnum() {
1436         return borderPosition;
1437     }
1438
1439     public UpdateStatus setBorderPosition(Integer value) {
1440         return setBorderPosition(BorderLayoutType.intToEnum(value));
1441     }
1442
1443     public UpdateStatus setBorderPosition(BorderLayoutType value) {
1444         if (borderPosition == value) {
1445             return UpdateStatus.NoChange;
1446         }
1447
1448         borderPosition = value;
1449         return UpdateStatus.Success;
1450     }
1451
1452     public Integer[] getGridBagPadding() {
1453         return gridbagPadding;
1454     }
1455
1456     public UpdateStatus setGridBagPadding(Integer[] value) {
1457         UpdateStatus status = UpdateStatus.NoChange;
1458         if (gridbagPadding.length != value.length) {
1459             return UpdateStatus.Fail;
1460         }
1461
1462         for (int i = 0 ; i < value.length ; i++) {
1463             if (gridbagPadding[i] != value[i]) {
1464                 gridbagPadding[i] = value[i];
1465                 status = UpdateStatus.Success;
1466             }
1467         }
1468
1469         return status;
1470     }
1471
1472     public Integer[] getGridBagPreferredSize() {
1473         return gridbagPreferredSize;
1474     }
1475
1476     public UpdateStatus setGridBagPreferredSize(Integer[] value) {
1477         UpdateStatus status = UpdateStatus.NoChange;
1478         if (gridbagPreferredSize.length != value.length) {
1479             return UpdateStatus.Fail;
1480         }
1481
1482         for (int i = 0 ; i < value.length ; i++) {
1483             if (gridbagPreferredSize[i] != value[i]) {
1484                 gridbagPreferredSize[i] = value[i];
1485                 status = UpdateStatus.Success;
1486             }
1487         }
1488
1489         return status;
1490     }
1491
1492     public Integer[] getBorderPreferredSize() {
1493         return borderPreferredSize;
1494     }
1495
1496     public UpdateStatus setBorderPreferredSize(Integer[] value) {
1497         UpdateStatus status = UpdateStatus.NoChange;
1498         if (borderPreferredSize.length != value.length) {
1499             return UpdateStatus.Fail;
1500         }
1501
1502         for (int i = 0 ; i < value.length ; i++) {
1503             if (borderPreferredSize[i] != value[i]) {
1504                 borderPreferredSize[i] = value[i];
1505                 status = UpdateStatus.Success;
1506             }
1507         }
1508
1509         return status;
1510     }
1511
1512     public Integer getGridBagAnchor() {
1513         return gridbagAnchor.ordinal();
1514     }
1515
1516     public AnchorType getGridBagAnchorAsEnum() {
1517         return gridbagAnchor;
1518     }
1519
1520     public UpdateStatus setGridBagAnchor(Integer value) {
1521         return setGridBagAnchor(AnchorType.intToEnum(value));
1522     }
1523
1524     public UpdateStatus setGridBagAnchor(AnchorType value) {
1525         if (gridbagAnchor == value) {
1526             return UpdateStatus.NoChange;
1527         }
1528
1529         gridbagAnchor = value;
1530         return UpdateStatus.Success;
1531     }
1532
1533     public Integer getGridBagFill() {
1534         return gridbagFill.ordinal();
1535     }
1536
1537     public FillType getGridBagFillAsEnum() {
1538         return gridbagFill;
1539     }
1540
1541     public UpdateStatus setGridBagFill(Integer value) {
1542         return setGridBagFill(FillType.intToEnum(value));
1543     }
1544
1545     public UpdateStatus setGridBagFill(FillType value) {
1546         if (gridbagFill == value) {
1547             return UpdateStatus.NoChange;
1548         }
1549
1550         gridbagFill = value;
1551         return UpdateStatus.Success;
1552     }
1553
1554     public Double[] getGridBagWeight() {
1555         return gridbagWeight;
1556     }
1557
1558     public UpdateStatus setGridBagWeight(Double[] value) {
1559         UpdateStatus status = UpdateStatus.NoChange;
1560         if (gridbagWeight.length != value.length) {
1561             return UpdateStatus.Fail;
1562         }
1563
1564         for (int i = 0 ; i < value.length ; i++) {
1565             if (gridbagWeight[i] != value[i]) {
1566                 gridbagWeight[i] = value[i];
1567                 status = UpdateStatus.Success;
1568             }
1569         }
1570
1571         return status;
1572     }
1573
1574     public Integer[] getGridBagGrid() {
1575         return gridbagGrid;
1576     }
1577
1578     public UpdateStatus setGridBagGrid(Integer[] value) {
1579         UpdateStatus status = UpdateStatus.NoChange;
1580         if (gridbagGrid.length != value.length) {
1581             return UpdateStatus.Fail;
1582         }
1583
1584         for (int i = 0 ; i < value.length ; i++) {
1585             if (gridbagGrid[i] != value[i]) {
1586                 gridbagGrid[i] = value[i];
1587                 status = UpdateStatus.Success;
1588             }
1589         }
1590
1591         return status;
1592     }
1593
1594     public Integer[] getBorderOptPadding() {
1595         return borderOptPadding;
1596     }
1597
1598     public UpdateStatus setBorderOptPadding(Integer[] value) {
1599         UpdateStatus status = UpdateStatus.NoChange;
1600         if (borderOptPadding.length != value.length) {
1601             return UpdateStatus.Fail;
1602         }
1603
1604         for (int i = 0 ; i < value.length ; i++) {
1605             if (borderOptPadding[i] != value[i]) {
1606                 borderOptPadding[i] = value[i];
1607                 status = UpdateStatus.Success;
1608             }
1609         }
1610
1611         return status;
1612     }
1613
1614     public Integer[] getGridOptPadding() {
1615         return gridOptPadding;
1616     }
1617
1618     public UpdateStatus setGridOptPadding(Integer[] value) {
1619         UpdateStatus status = UpdateStatus.NoChange;
1620         if (gridOptPadding.length != value.length) {
1621             return UpdateStatus.Fail;
1622         }
1623
1624         for (int i = 0 ; i < value.length ; i++) {
1625             if (gridOptPadding[i] != value[i]) {
1626                 gridOptPadding[i] = value[i];
1627                 status = UpdateStatus.Success;
1628             }
1629         }
1630
1631         return status;
1632     }
1633
1634     public Integer[] getGridOptGrid() {
1635         return gridOptGrid;
1636     }
1637
1638     public UpdateStatus setGridOptGrid(Integer[] value) {
1639         UpdateStatus status = UpdateStatus.NoChange;
1640         if (gridOptGrid.length != value.length) {
1641             return UpdateStatus.Fail;
1642         }
1643
1644         for (int i = 0 ; i < value.length ; i++) {
1645             if (gridOptGrid[i] != value[i]) {
1646                 gridOptGrid[i] = value[i];
1647                 status = UpdateStatus.Success;
1648             }
1649         }
1650
1651         return status;
1652     }
1653
1654     public Integer getFrameBorder() {
1655         return frameBorder;
1656     }
1657
1658     public UpdateStatus setFrameBorder(Integer value) {
1659         if (frameBorder.equals(value)) {
1660             return UpdateStatus.NoChange;
1661         }
1662
1663         frameBorder = value;
1664         return UpdateStatus.Success;
1665     }
1666
1667     public String getGroupName() {
1668         return groupName;
1669     }
1670
1671     public UpdateStatus setGroupName(String value) {
1672         if (groupName.equals(value)) {
1673             return UpdateStatus.NoChange;
1674         }
1675
1676         groupName = value;
1677         return UpdateStatus.Success;
1678     }
1679
1680     public Boolean getTitleScroll() {
1681         return titleScroll;
1682     }
1683
1684     public UpdateStatus setTitleScroll(Boolean value) {
1685         if (titleScroll == value) {
1686             return UpdateStatus.NoChange;
1687         }
1688
1689         titleScroll = value;
1690         return UpdateStatus.Success;
1691     }
1692
1693     public Integer getTitlePosition() {
1694         return titlePosition.ordinal();
1695     }
1696
1697     public TitlePositionType getTitlePositionAsEnum() {
1698         return titlePosition;
1699     }
1700
1701
1702     public UpdateStatus setTitlePosition(Integer value) {
1703         return setTitlePosition(TitlePositionType.intToEnum(value));
1704     }
1705
1706     public UpdateStatus setTitlePosition(TitlePositionType value) {
1707         if (titlePosition == value) {
1708             return UpdateStatus.NoChange;
1709         }
1710
1711         titlePosition = value;
1712         return UpdateStatus.Success;
1713     }
1714
1715     public UpdateStatus setScrollable(Boolean scrollable) {
1716         if (this.scrollable == scrollable) {
1717             return UpdateStatus.NoChange;
1718         }
1719
1720         this.scrollable = scrollable;
1721         return UpdateStatus.Success;
1722     }
1723
1724     public Boolean getScrollable() {
1725         return scrollable;
1726     }
1727
1728     public void setFont(Font font) {
1729         if (font == null) {
1730             return;
1731         }
1732
1733         setFontName(font.getName());
1734         setFontSize(font.getSize());
1735
1736         if (font.isItalic()) {
1737             setFontAngle("italic");
1738         } else {
1739             setFontAngle("normal");
1740         }
1741
1742         if (font.isBold()) {
1743             setFontWeight("bold");
1744         } else {
1745             setFontWeight("normal");
1746         }
1747     }
1748
1749     public UpdateStatus setIcon(String icon) {
1750         if (this.icon.equals(icon)) {
1751             return UpdateStatus.NoChange;
1752         }
1753
1754         this.icon = icon;
1755         return UpdateStatus.Success;
1756     }
1757
1758     public String getIcon() {
1759         return icon;
1760     }
1761
1762     public UpdateStatus setEventHandler(String eventHandlerName) {
1763         return eventHandler.setEventHandlerString(eventHandlerName);
1764     }
1765
1766     public String getEventHandler() {
1767         return eventHandler.getEventHandlerString();
1768     }
1769
1770     public UpdateStatus setEventHandlerEnable(Boolean eventHandlerEnabled) {
1771         return eventHandler.setEventHandlerEnabled(eventHandlerEnabled);
1772     }
1773
1774     public boolean getEventHandlerEnable() {
1775         return eventHandler.getEventHandlerEnabled();
1776     }
1777
1778     public void accept(Visitor visitor) {
1779     }
1780 }