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