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