uimenu now use MVC 20/5220/3
Vincent COUVERT [Wed, 12 Oct 2011 11:42:03 +0000 (13:42 +0200)]
Change-Id: I3b0f261c4e5daae222615c0bbdd8e91dd933dec4

45 files changed:
scilab/modules/graphic_objects/includes/graphicObjectProperties.h
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/graphicModel/GraphicModel.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/graphicObject/GraphicObject.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/graphicObject/GraphicObjectProperties.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/uimenu/Uimenu.java [new file with mode: 0644]
scilab/modules/graphic_objects/src/scripts/propertiesMap.properties
scilab/modules/graphics/src/c/getHandleProperty/set_parent_property.c
scilab/modules/gui/includes/GetUimenuChecked.h
scilab/modules/gui/includes/GetUimenuLabel.h
scilab/modules/gui/includes/InitUIMenu.h
scilab/modules/gui/includes/SetUimenuChecked.h
scilab/modules/gui/includes/SetUimenuLabel.h
scilab/modules/gui/sci_gateway/c/sci_uimenu.c
scilab/modules/gui/src/c/CreateUimenu.c
scilab/modules/gui/src/c/CreateUimenu.h
scilab/modules/gui/src/cpp/GetUimenuChecked.cpp
scilab/modules/gui/src/cpp/GetUimenuChecked.hxx
scilab/modules/gui/src/cpp/GetUimenuLabel.cpp
scilab/modules/gui/src/cpp/GetUimenuLabel.hxx
scilab/modules/gui/src/cpp/GetUiobjectEnable.hxx
scilab/modules/gui/src/cpp/InitUIMenu.cpp
scilab/modules/gui/src/cpp/SetUimenuChecked.cpp
scilab/modules/gui/src/cpp/SetUimenuChecked.hxx
scilab/modules/gui/src/cpp/SetUimenuLabel.cpp
scilab/modules/gui/src/cpp/SetUimenuLabel.hxx
scilab/modules/gui/src/cpp/SetUiobjectEnable.cpp
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingViewMenu.java [new file with mode: 0644]
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingViewWidget.java [moved from scilab/modules/gui/src/java/org/scilab/modules/gui/SwingScilabWidget.java with 99% similarity]
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/checkbox/SwingScilabCheckBox.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/checkboxmenuitem/SwingScilabCheckBoxMenuItem.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/editbox/SwingScilabEditBox.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/frame/SwingScilabFrame.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/imagerenderer/SwingScilabImageRenderer.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/label/SwingScilabLabel.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/listbox/SwingScilabListBox.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/menu/SwingScilabMenu.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/menuitem/SwingScilabMenuItem.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/popupmenu/SwingScilabPopupMenu.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/pushbutton/SwingScilabPushButton.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/radiobutton/SwingScilabRadioButton.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/slider/SwingScilabSlider.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/uitable/SwingScilabUiTable.java
scilab/modules/gui/tests/unit_tests/uimenu.dia.ref
scilab/modules/gui/tests/unit_tests/uimenu.tst

index 7622e2e..ff55ff5 100644 (file)
@@ -39,7 +39,6 @@
 #define __GO_UICONTROL__                   "uicontrol"
 #define __GO_UIMENU__                      "uimenu"
 
-
 #define __GO_CHILDREN__                    "Children"
 #define __GO_CHILDREN_COUNT__              "ChildrenCount"
 #define __GO_PARENT__                      "Parent"
 #define __GO_UI_RIDGE_RELIEF__             "ridge"
 #define __GO_UI_SOLID_RELIEF__             "solid"
 
+#define __GO_UI_CHECKED__                  "UIChecked"
+#define __GO_UI_LABEL__                    "UILabel"
+
 #endif /* !__GRAPHIC_OBJECT_PROPERTIES_H__ */
index 62ecc3a..d4f6ce7 100644 (file)
@@ -43,6 +43,7 @@ import org.scilab.modules.graphic_objects.uicontrol.radiobutton.RadioButton;
 import org.scilab.modules.graphic_objects.uicontrol.slider.Slider;
 import org.scilab.modules.graphic_objects.uicontrol.table.Table;
 import org.scilab.modules.graphic_objects.uicontrol.uitext.UiText;
+import org.scilab.modules.graphic_objects.uimenu.Uimenu;
 import org.scilab.modules.graphic_objects.vectfield.Champ;
 import org.scilab.modules.graphic_objects.vectfield.Segs;
 
@@ -159,75 +160,104 @@ public final class GraphicModel {
      * @return the created typed object
      */
     private GraphicObject createTypedObject(Type type) {
-        try {
+        GraphicObject createdObject = null;
             switch (type) {
-
             case ARC:
-                return new Arc();
+                createdObject = new Arc();
+                break;
             case AXES:
-                return new Axes();
+                createdObject = new Axes();
+                break;
             case AXIS:
-                return new Axis();
+                createdObject = new Axis();
+                break;
             case CHAMP:
-                return new Champ();
+                createdObject = new Champ();
+                break;
             case COMPOUND:
-                return new Compound();
+                createdObject = new Compound();
+                break;
             case FAC3D:
-                return new Fac3d();
+                createdObject = new Fac3d();
+                break;
             case FEC:
-                return new Fec();
+                createdObject = new Fec();
+                break;
             case FIGURE:
-                return new Figure();
+                createdObject = new Figure();
+                break;
             case GRAYPLOT:
-                return new Grayplot();
+                createdObject = new Grayplot();
+                break;
             case LABEL:
-                return new Label();
+                createdObject = new Label();
+                break;
             case LEGEND:
-                return new Legend();
+                createdObject = new Legend();
+                break;
             case MATPLOT:
-                return new Matplot();
+                createdObject = new Matplot();
+                break;
             case PLOT3D:
-                return new Plot3d();
+                createdObject = new Plot3d();
+                break;
             case POLYLINE:
-                return new Polyline();
+                createdObject = new Polyline();
+                break;
             case RECTANGLE:
-                return new Rectangle();
+                createdObject = new Rectangle();
+                break;
             case SEGS:
-                return new Segs();
+                createdObject = new Segs();
+                break;
             case TEXT:
-                return new Text();
+                createdObject = new Text();
+                break;
             /* UICONTROLS */
             case CHECKBOX:
-                return new CheckBox();
+                createdObject = new CheckBox();
+                break;
             case EDIT:
-                return new Edit();
+                createdObject = new Edit();
+                break;
             case FRAME:
-                return new Frame();
+                createdObject = new Frame();
+                break;
             case IMAGERENDERER:
-                return new ImageRenderer();
+                createdObject = new ImageRenderer();
+                break;
             case LISTBOX:
-                return new ListBox();
+                createdObject = new ListBox();
+                break;
             case POPUPMENU:
-                return new PopupMenu();
+                createdObject = new PopupMenu();
+                break;
             case PUSHBUTTON:
-                return new PushButton();
+                createdObject = new PushButton();
+                break;
             case RADIOBUTTON:
-                return new RadioButton();
+                createdObject = new RadioButton();
+                break;
             case SLIDER:
-                return new Slider();
+                createdObject = new Slider();
+                break;
             case TABLE:
-                return new Table();
+                createdObject = new Table();
+                break;
             case UITEXT:
-                return new UiText();
+                createdObject = new UiText();
+                break;
+            /* UIMENU */
+            case UIMENU:
+                createdObject = new Uimenu();
+                break;
             case UNKNOWNOBJECT:
-                return null;
+                createdObject = null;
+                break;
             default:
-                return null;
+                createdObject = null;
             }
-        } catch (Throwable t) {
-            t.printStackTrace();
-            return null;
-        }
+        return createdObject;
     }
 
     /**
index 633a090..661cc75 100644 (file)
@@ -35,7 +35,7 @@ public abstract class GraphicObject implements Cloneable {
     /** Graphic objects types */
     public enum Type { ARC, AXES, AXIS, CHAMP, COMPOUND, FAC3D, FEC, FIGURE, GRAYPLOT,
         LABEL, LEGEND, MATPLOT, PLOT3D, POLYLINE, RECTANGLE, SEGS, TEXT, CHECKBOX, EDIT, FRAME,
-        IMAGERENDERER, LISTBOX, POPUPMENU, PUSHBUTTON, RADIOBUTTON, SLIDER, TABLE, UITEXT, UNKNOWNOBJECT 
+        IMAGERENDERER, LISTBOX, POPUPMENU, PUSHBUTTON, RADIOBUTTON, SLIDER, TABLE, UITEXT, UIMENU, UNKNOWNOBJECT 
     };
 
     /** GraphicObject properties */
@@ -192,6 +192,8 @@ public abstract class GraphicObject implements Cloneable {
             return Type.TABLE;
         } else if (typeName.equals(__GO_UI_TEXT__)) {
             return Type.UITEXT;
+        } else if (typeName.equals(__GO_UIMENU__)) {
+            return Type.UIMENU;
         } else {
             return Type.UNKNOWNOBJECT;
         }
index b1e5b77..34c9b82 100644 (file)
@@ -346,4 +346,7 @@ public static final String __GO_UI_GROOVE_RELIEF__ =       "groove";
 public static final String __GO_UI_RIDGE_RELIEF__ =        "ridge";
 public static final String __GO_UI_SOLID_RELIEF__ =        "solid";
 
+public static final String __GO_UI_CHECKED__ =             "UIChecked";
+public static final String __GO_UI_LABEL__ =               "UILabel";
+
 }
diff --git a/scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/uimenu/Uimenu.java b/scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/uimenu/Uimenu.java
new file mode 100644 (file)
index 0000000..bb5e5e6
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.graphic_objects.uimenu;
+
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UIMENU__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKED__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LABEL__;
+
+import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
+import org.scilab.modules.graphic_objects.graphicObject.IVisitor;
+
+/**
+ * @author Vincent COUVERT
+ */
+public class Uimenu extends GraphicObject {
+
+    private boolean checked;
+    private boolean enable = true;
+    private Double[] foregroundColor = {0.0, 0.0, 0.0};
+    private String label = "";
+
+    /**
+     * All uimenu properties
+     */
+    private enum UimenuProperty {
+        CHECKED,
+        ENABLE,
+        FOREGROUNDCOLOR,
+        LABEL
+    };
+
+    /**
+     * Constructor
+     */
+    public Uimenu() {
+        super();
+        setCallbackString("");
+        setCallbackType(0);
+    }
+
+    /**
+     * Get this object type
+     * @return uicontrol
+     * @see org.scilab.modules.graphic_objects.graphicObject.GraphicObject#getType()
+     */
+    public String getType() {
+        return __GO_UIMENU__;
+    }
+
+    /**
+     * Returns the enum associated to a property name
+     * @param propertyName the property name
+     * @return the property enum
+     */
+    public Object getPropertyFromName(String propertyName) {
+        Object property = null;
+        if (propertyName.equals(__GO_UI_CHECKED__)) {
+            property = UimenuProperty.CHECKED;
+        } else if (propertyName.equals(__GO_UI_ENABLE__)) {
+            property = UimenuProperty.ENABLE;
+       } else if (propertyName.equals(__GO_UI_FOREGROUNDCOLOR__)) {
+           property = UimenuProperty.FOREGROUNDCOLOR;
+       } else if (propertyName.equals(__GO_UI_LABEL__)) {
+           property = UimenuProperty.LABEL;
+        } else {
+            property = super.getPropertyFromName(propertyName);
+        }
+        return property;
+    }
+
+    /**
+     * Fast property get method
+     * @param property the property to get
+     * @return the property value
+     */
+    public Object getProperty(Object property) {
+        Object propertyValue = null;
+        if (property == UimenuProperty.CHECKED) {
+            propertyValue = getChecked();
+        } else if (property == UimenuProperty.ENABLE) {
+            propertyValue = getEnable();
+        } else if (property == UimenuProperty.FOREGROUNDCOLOR) {
+            propertyValue = getForegroundColor();
+        } else if (property == UimenuProperty.LABEL) {
+            propertyValue = getLabel();
+        } else {
+            propertyValue = super.getProperty(property); 
+        }
+        return propertyValue;
+    }
+
+    /**
+     * Fast property set method
+     * @param property the property to set
+     * @param value the property value
+     * @return true if the property has been set, false otherwise
+     */
+    public boolean setProperty(Object property, Object value) {
+        if (property == UimenuProperty.CHECKED) {
+            setChecked((Boolean) value);
+        } else if (property == UimenuProperty.ENABLE) {
+            setEnable((Boolean) value);
+        } else if (property == UimenuProperty.FOREGROUNDCOLOR) {
+            setForegroundColor((Double[]) value);
+        } else if (property == UimenuProperty.LABEL) {
+            setLabel((String) value);
+        } else {
+            return super.setProperty(property, value);
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the menu checked status
+     * @return the status 
+     */
+    public Boolean getChecked() {
+        return this.checked;
+    }
+
+    /**
+     * Set the menu checked status
+     * @param checked the status
+     */
+    public void setChecked(Boolean checked) {
+        this.checked = checked;
+    }
+
+    /**
+     * Get the menu enable status
+     * @return the status 
+     */
+    public Boolean getEnable() {
+        return this.enable;
+    }
+
+    /**
+     * Set the menu enable status
+     * @param enable the status
+     */
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    /**
+     * Get the menu Foreground Color
+     * @return the RGB color 
+     */
+    public Double[] getForegroundColor() {
+        return this.foregroundColor;
+    }
+
+    /**
+     * Set the menu Foreground Color
+     * @param colors the RGB color 
+     */
+    public void setForegroundColor(Double[] colors) {
+        this.foregroundColor = colors;
+    }
+
+    /**
+     * Get the menu label
+     * @return the label 
+     */
+    public String getLabel() {
+        return this.label;
+    }
+
+    /**
+     * Set the menu label
+     * @param label the label
+     */
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    /**
+     * Accept method
+     * @param visitor the visitor
+     * @see org.scilab.modules.graphic_objects.graphicObject.GraphicObject#accept(org.scilab.modules.graphic_objects.graphicObject.IVisitor)
+     */
+    public void accept(IVisitor visitor) {
+
+    }
+
+}
index ad3b2c4..c46ed6f 100644 (file)
 @DECLARE@ __GO_UI_GROOVE_RELIEF__ @EQUAL@       "groove" @END@
 @DECLARE@ __GO_UI_RIDGE_RELIEF__ @EQUAL@        "ridge" @END@
 @DECLARE@ __GO_UI_SOLID_RELIEF__ @EQUAL@        "solid" @END@
+
+@DECLARE@ __GO_UI_CHECKED__ @EQUAL@             "UIChecked" @END@
+@DECLARE@ __GO_UI_LABEL__ @EQUAL@               "UILabel" @END@
index fcc70bd..d88039b 100644 (file)
 #include "FigureList.h"
 
 /*------------------------------------------------------------------------*/
-int set_parent_property(char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol )
+int set_parent_property(char *pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
 {
-    char* figureUID = NULL;
-    char* type = NULL;
+    char *figureUID = NULL;
+    char *type = NULL;
 
     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_string, &type);
 
@@ -54,8 +54,8 @@ int set_parent_property(char* pobjUID, size_t stackPointer, int valueType, int n
         }
         else
         {
-          Scierror(999,_("Wrong type for '%s' property: '%s' handle or '%s' handle expected.\n"),"parent","Figure", "Frame uicontrol");
-          return SET_PROPERTY_ERROR;
+            Scierror(999, _("Wrong type for '%s' property: '%s' handle or '%s' handle expected.\n"), "parent", "Figure", "Frame uicontrol");
+            return SET_PROPERTY_ERROR;
         }
 
         if (figureUID == NULL)
@@ -66,38 +66,26 @@ int set_parent_property(char* pobjUID, size_t stackPointer, int valueType, int n
         }
 
         setGraphicObjectRelationship(figureUID, pobjUID);
+        return SET_PROPERTY_SUCCEED;
     }
 
-#if 0
-  if(sciGetEntityType( pobj ) == SCI_UIMENU)
-    {
-      if ((pobj == NULL) || (valueType!=sci_handles && valueType!=sci_matrix)) /* sci_matrix used for adding menus in console menu */
-        {
-          Scierror(999,_("Wrong type for '%s' property: '%s' handle or '%s' handle expected.\n"),"parent","Figure", "Uimenu");
-          return SET_PROPERTY_ERROR ;
-        }
-      else
-        {
-          return setMenuParent(pobj, stackPointer, valueType, nbRow, nbCol);
-        }
-    }
-  else if(sciGetEntityType(pobj) == SCI_UICONTROL)
+    if (strcmp(type, __GO_UIMENU__) == 0)
     {
-      if ((pobj == NULL) || (valueType!=sci_handles && valueType!=sci_matrix))
+        if ((valueType != sci_handles) && (valueType != sci_matrix))    /* sci_matrix used for adding menus in console menu */
         {
-          Scierror(999,_("Wrong type for '%s' property: '%s' handle or '%s' handle expected.\n"),"parent","Figure", "Uimenu");
-          return SET_PROPERTY_ERROR ;
+            Scierror(999, _("Wrong type for '%s' property: '%s' handle or '%s' handle expected.\n"), "parent", "Figure", "Uimenu");
+            return SET_PROPERTY_ERROR;
         }
-      else
+        else
         {
-          return SetUicontrolParent(pobj, stackPointer, valueType, nbRow, nbCol);
+            return setMenuParent(pobjUID, stackPointer, valueType, nbRow, nbCol);
         }
     }
-  else
+    else
     {
-      Scierror(999, _("Parent property can not be modified directly.\n"));
-      return SET_PROPERTY_ERROR ;
+        Scierror(999, _("Parent property can not be modified directly.\n"));
+        return SET_PROPERTY_ERROR;
     }
-#endif
 }
+
 /*------------------------------------------------------------------------*/
index b1428c5..a9a3d25 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
@@ -19,9 +19,9 @@
 /**
  * Get the checked status of an uimenu
  *
- * @param pobj Scilab object corresponding to the uimenu
+ * @param pobjUID UID of the uimenu
  * @return true if the status is got without error
  */
-GUI_IMPEXP int GetUimenuChecked(sciPointObj * pobj);
+GUI_IMPEXP int GetUimenuChecked(char *pobjUID);
 
 #endif /* !__GETUIMENUCHECKED_H__ */
index 4bf0188..b08fa04 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Vincent COUVERT
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
@@ -19,9 +19,9 @@
 /**
  * Get the label of an uimenu
  *
- * @param pobj Scilab object corresponding to the uimenu
+ * @param pobjUID UID of the uimenu
  * @return the label
  */
-GUI_IMPEXP int GetUimenuLabel(sciPointObj * pobj);
+GUI_IMPEXP int GetUimenuLabel(char *pobjUID);
 
 #endif /* __GET_UIMENU_LABEL_H__ */
index 87fc152..13fdaaf 100644 (file)
@@ -24,7 +24,7 @@
  *
  * @param sciObj Scilab object for this Menu    
  */
-GUI_IMPEXP void InitUIMenu(sciPointObj* sciObj);
+GUI_IMPEXP void InitUIMenu(sciPointObj * sciObj);
 
 /**
  * Set the parent of a Menu
@@ -36,7 +36,7 @@ GUI_IMPEXP void InitUIMenu(sciPointObj* sciObj);
  * @param nbCol number of columns of the parent
  * @return execution status
  */
-GUI_IMPEXP int setMenuParent(sciPointObj* sciObj, size_t stackPointer, int valueType, int nbRow, int nbCol);
+GUI_IMPEXP int setMenuParent(char *sciObj, size_t stackPointer, int valueType, int nbRow, int nbCol);
 
 /**
  * Disable/Enable a menu attached to the console
index 4742eb5..af81fdd 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
@@ -26,6 +26,6 @@
  * @param nbCol number of columns of the value on stack
  * @return true if the set has been correcty done
  */
-GUI_IMPEXP int SetUimenuChecked(sciPointObj * pobj, size_t stackPointer, int valueType, int nbRow, int nbCol ) ;
+GUI_IMPEXP int SetUimenuChecked(char *pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol);
 
 #endif /* !__SETUIMENUCHECKED_H__ */
index 3bed24a..23e24bd 100644 (file)
@@ -28,6 +28,6 @@
  * @param nbCol number of columns of the value on stack
  * @return true is the set has been correcty done
  */
-GUI_IMPEXP int SetUimenuLabel(char * pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol ) ;
+GUI_IMPEXP int SetUimenuLabel(char *pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol);
 
 #endif
index e6814b5..64711c1 100644 (file)
@@ -1,24 +1,24 @@
 /*
-* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-* Copyright (C) 2006 - INRIA - Allan Cornet
-* Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
-* Copyright (C) 2006 - INRIA - Fabrice Leray
-* Copyright (C) 2011 - DIGITEO - Allan CORNET
-* desc : interface for sci_uimenu routine
-*
-* This file must be used under the terms of the CeCILL.
-* This source file is licensed as described in the file COPYING, which
-* you should have received as part of this distribution.  The terms
-* are also available at
-* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-*
-*/
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2006 - INRIA - Allan Cornet
+ * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
+ * Copyright (C) 2006 - INRIA - Fabrice Leray
+ * Copyright (C) 2011 - DIGITEO - Allan CORNET
+ * desc : interface for sci_uimenu routine
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
 
 /*--------------------------------------------------------------------------*/
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
-#include "MALLOC.h" /* MALLOC */
+#include "MALLOC.h"             /* MALLOC */
 #include "ObjectStructure.h"
 #include "BuildObjects.h"
 #include "gw_gui.h"
 #include "Scierror.h"
 #include "stricmp.h"
 #include "CreateUimenu.h"
+#include "setGraphicObjectProperty.h"
+#include "getGraphicObjectProperty.h"
+#include "graphicObjectProperties.h"
 /*--------------------------------------------------------------------------*/
-int sci_uimenu( char *fname,unsigned long fname_len )
+int sci_uimenu(char *fname, unsigned long fname_len)
 {
-    abort();
-    // ???
-#if 0
     int nbRow = 0, nbCol = 0, stkAdr = 0;
 
     int setStatus = SET_PROPERTY_SUCCEED;
@@ -46,66 +46,84 @@ int sci_uimenu( char *fname,unsigned long fname_len )
 
     char *propertyName = NULL;
 
-    sciPointObj *pParent = NULL;
+    char *pParentUID = NULL;
 
     unsigned long GraphicHandle = 0;
 
     int parentDefined = FALSE;
 
+    char *pstCurrentFigure = NULL;
+
+    char *parentType = NULL;
+
     /* Create a new menu */
-    GraphicHandle = sciGetHandle(CreateUimenu());
+    GraphicHandle = getHandle(CreateUimenu());
 
     /* If no Rhs -> current figure is the parent (Ascendant compatibility) */
     if (Rhs == 0)
     {
         // Set the parent property
-        setMenuParent(sciGetPointerFromHandle(GraphicHandle), (size_t)(-1), sci_handles, nbRow, nbCol);
+        pstCurrentFigure = getCurrentFigure();
+        if (pstCurrentFigure == NULL)
+        {
+            pstCurrentFigure = createNewFigureWithAxes();
+        }
+        setGraphicObjectRelationship(pstCurrentFigure, getObjectFromHandle(GraphicHandle));
     }
 
     /**
-    * Odd number of input arguments
-    * First input is the parent ID
-    * All event inputs are property names
-    * All odd (except first) inputs are property values
-    */
+     * Odd number of input arguments
+     * First input is the parent ID
+     * All event inputs are property names
+     * All odd (except first) inputs are property values
+     */
     if (Rhs % 2 == 1)
     {
         if (VarType(1) != sci_handles)
         {
-            Scierror(999,_("%s: Wrong type for input argument #%d: A graphic handle expected.\n"),fname, 1);
+            Scierror(999, _("%s: Wrong type for input argument #%d: A graphic handle expected.\n"), fname, 1);
             return FALSE;
         }
-        else /* Get parent ID */
+        else                    /* Get parent ID */
         {
-            GetRhsVar(1,GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
+            GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
 
-            if (nbRow*nbCol != 1)
+            if (nbRow * nbCol != 1)
             {
-                Scierror(999,_("%s: Wrong size for input argument #%d: A graphic handle expected.\n"),fname, 1);
+                Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
                 return FALSE;
             }
-            pParent=sciGetPointerFromHandle((long)*hstk(stkAdr));
-            if ( (sciGetEntityType (pParent) != SCI_FIGURE) && (sciGetEntityType (pParent) != SCI_UIMENU) )
+            pParentUID = getObjectFromHandle((long)*hstk(stkAdr));
+            if (pParentUID != NULL)
+            {
+                getGraphicObjectProperty(pParentUID, __GO_TYPE__, jni_string, &parentType);
+                if ((strcmp(parentType, __GO_FIGURE__) != 0) && (strcmp(parentType, __GO_UIMENU__) != 0))
+                {
+                    Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure", "Uimenu");
+                    return FALSE;
+                }
+
+                // Set the parent property
+                callSetProperty(getObjectFromHandle(GraphicHandle), stkAdr, sci_handles, nbRow, nbCol, "parent");
+
+                // Set the flag to avoid setting the parent two times
+                parentDefined = TRUE;
+            }
+            else
             {
-                Scierror(999,_("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure", "Uimenu");
+                Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure", "Uimenu");
                 return FALSE;
             }
 
-            // Set the parent property
-            callSetProperty(sciGetPointerFromHandle(GraphicHandle), stkAdr, sci_handles, nbRow, nbCol, "parent");
-
-            // Set the flag to avoid setting the parent two times
-            parentDefined = TRUE;
+            // First input parameter which is a property name
+            beginIndex = 2;
         }
-
-        // First input parameter which is a property name
-        beginIndex = 2;
     }
     /**
-    * Even number of input arguments
-    * All odd inputs are property names
-    * All even inputs are property values
-    */
+     * Even number of input arguments
+     * All odd inputs are property names
+     * All even inputs are property values
+     */
     else
     {
         // First input parameter which is a property name
@@ -113,7 +131,7 @@ int sci_uimenu( char *fname,unsigned long fname_len )
     }
 
     /* Read and set all properties */
-    for(inputIndex = beginIndex; inputIndex<Rhs; inputIndex = inputIndex+2)
+    for (inputIndex = beginIndex; inputIndex < Rhs; inputIndex = inputIndex + 2)
     {
         int isUserDataProperty = 0;
         int iPropertyValuePositionIndex = inputIndex + 1;
@@ -138,14 +156,14 @@ int sci_uimenu( char *fname,unsigned long fname_len )
             isUserDataProperty = (stricmp(propertyName, "user_data") == 0) || (stricmp(propertyName, "userdata") == 0);
         }
 
-
         /* Read property value */
         switch (VarType(iPropertyValuePositionIndex))
         {
         case sci_matrix:
             if (isUserDataProperty)
             {
-                nbRow = -1; nbCol = -1;
+                nbRow = -1;
+                nbCol = -1;
                 posStackOrAdr = iPropertyValuePositionIndex;
             }
             else
@@ -153,12 +171,13 @@ int sci_uimenu( char *fname,unsigned long fname_len )
                 GetRhsVar(iPropertyValuePositionIndex, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
                 posStackOrAdr = stkAdr;
             }
-            setStatus = callSetProperty(sciGetPointerFromHandle(GraphicHandle), posStackOrAdr, sci_matrix, nbRow, nbCol, propertyName);
+            setStatus = callSetProperty(getObjectFromHandle(GraphicHandle), posStackOrAdr, sci_matrix, nbRow, nbCol, propertyName);
             break;
         case sci_strings:
             if (isUserDataProperty)
             {
-                nbRow = -1; nbCol = -1;
+                nbRow = -1;
+                nbCol = -1;
                 posStackOrAdr = iPropertyValuePositionIndex;
             }
             else
@@ -166,12 +185,13 @@ int sci_uimenu( char *fname,unsigned long fname_len )
                 GetRhsVar(iPropertyValuePositionIndex, STRING_DATATYPE, &nbRow, &nbCol, &stkAdr);
                 posStackOrAdr = stkAdr;
             }
-            setStatus = callSetProperty(sciGetPointerFromHandle(GraphicHandle), posStackOrAdr, sci_strings, nbRow, nbCol, propertyName);
+            setStatus = callSetProperty(getObjectFromHandle(GraphicHandle), posStackOrAdr, sci_strings, nbRow, nbCol, propertyName);
             break;
         case sci_handles:
             if (isUserDataProperty)
             {
-                nbRow = -1; nbCol = -1;
+                nbRow = -1;
+                nbCol = -1;
                 posStackOrAdr = iPropertyValuePositionIndex;
             }
             else
@@ -179,12 +199,13 @@ int sci_uimenu( char *fname,unsigned long fname_len )
                 GetRhsVar(iPropertyValuePositionIndex, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
                 posStackOrAdr = stkAdr;
             }
-            setStatus = callSetProperty(sciGetPointerFromHandle(GraphicHandle), posStackOrAdr, sci_handles, nbRow, nbCol, propertyName);
+            setStatus = callSetProperty(getObjectFromHandle(GraphicHandle), posStackOrAdr, sci_handles, nbRow, nbCol, propertyName);
             break;
         case sci_list:
             if (isUserDataProperty)
             {
-                nbRow = -1; nbCol = -1;
+                nbRow = -1;
+                nbCol = -1;
                 posStackOrAdr = iPropertyValuePositionIndex;
             }
             else
@@ -192,7 +213,7 @@ int sci_uimenu( char *fname,unsigned long fname_len )
                 GetRhsVar(iPropertyValuePositionIndex, LIST_DATATYPE, &nbRow, &nbCol, &stkAdr);
                 posStackOrAdr = iPropertyValuePositionIndex;
             }
-            setStatus = callSetProperty(sciGetPointerFromHandle(GraphicHandle), posStackOrAdr, sci_list, nbRow, nbCol, propertyName);
+            setStatus = callSetProperty(getObjectFromHandle(GraphicHandle), posStackOrAdr, sci_list, nbRow, nbCol, propertyName);
             break;
         default:
             setStatus = SET_PROPERTY_ERROR;
@@ -209,19 +230,25 @@ int sci_uimenu( char *fname,unsigned long fname_len )
     if (!parentDefined && (Rhs != 0))
     {
         // Set the parent property
-        setMenuParent(sciGetPointerFromHandle(GraphicHandle), (size_t)(-1), sci_handles, nbRow, nbCol);
+        pstCurrentFigure = getCurrentFigure();
+        if (pstCurrentFigure == NULL)
+        {
+            pstCurrentFigure = createNewFigureWithAxes();
+        }
+        setGraphicObjectRelationship(pstCurrentFigure, getObjectFromHandle(GraphicHandle));
     }
 
     /* Create return variable */
     nbRow = 1;
     nbCol = 1;
-    CreateVar(Rhs+1, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
+    CreateVar(Rhs + 1, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
     *hstk(stkAdr) = GraphicHandle;
 
-    LhsVar(1)=Rhs+1;
+    LhsVar(1) = Rhs + 1;
 
     PutLhsVar();
-#endif
+
     return TRUE;
 }
+
 /*--------------------------------------------------------------------------*/
index 35106db..088b25a 100644 (file)
@@ -1,56 +1,63 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Vincent COUVERT
- * Create Java object matching Scilab uicontrol 
- * 
+ * Create Java object matching Scilab uimenu
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 
 #include "CreateUimenu.h"
+#include "graphicObjectProperties.h"
+#include "createGraphicObject.h"
 
 /**
  * CreateUimenu
  * This function creates Uimenu structure.
- * @return pointer sciPointObj if ok , NULL if not
+ * @return created uimenu UID
  */
-sciPointObj * CreateUimenu (void)
+char *CreateUimenu(void)
 {
-  sciPointObj *pobj = (sciPointObj *) NULL;
+    return createGraphicObject(__GO_UIMENU__);
+
+#if 0
+    sciPointObj *pobj = (sciPointObj *) NULL;
 
-  if ((pobj = MALLOC (sizeof (sciPointObj))) == NULL)  return (sciPointObj *) NULL;
+    if ((pobj = MALLOC(sizeof(sciPointObj))) == NULL)
+        return (sciPointObj *) NULL;
 
-  sciSetEntityType (pobj, SCI_UIMENU);
+    sciSetEntityType(pobj, SCI_UIMENU);
 
-  if ((pobj->pfeatures = MALLOC ((sizeof (sciUimenu)))) == NULL)
+    if ((pobj->pfeatures = MALLOC((sizeof(sciUimenu)))) == NULL)
     {
-      FREE(pobj);
-      return (sciPointObj *) NULL;
+        FREE(pobj);
+        return (sciPointObj *) NULL;
     }
 
-  /* Color property */
-  pUIMENU_FEATURE (pobj)->foregroundcolor = NULL;
+    /* Color property */
+    pUIMENU_FEATURE(pobj)->foregroundcolor = NULL;
+
+    /* Callback property */
+    /* Callback getter returns "" if callback is NULL */
+    pUIMENU_FEATURE(pobj)->callback = NULL;
+    pUIMENU_FEATURE(pobj)->callbackType = 0;
+
+    pUIMENU_FEATURE(pobj)->handle_visible = TRUE;
 
-  /* Callback property */
-  /* Callback getter returns "" if callback is NULL */
-  pUIMENU_FEATURE (pobj)->callback = NULL;
-  pUIMENU_FEATURE (pobj)->callbackType=0;
+    /* Initialize the tag */
+    /* NULL value is displayed as "" in tag getter */
+    pUIMENU_FEATURE(pobj)->tag = NULL;
 
-  pUIMENU_FEATURE (pobj)->handle_visible=TRUE;
+    sciStandardBuildOperations(pobj, NULL);
 
-  /* Initialize the tag */
-  /* NULL value is displayed as "" in tag getter */
-  pUIMENU_FEATURE (pobj)->tag = NULL;
+    sciInitSelectedSons(pobj);
 
-  sciStandardBuildOperations(pobj, NULL);
+    InitUIMenu((sciPointObj *) pobj);
 
-  sciInitSelectedSons(pobj);
-    
-  InitUIMenu((sciPointObj *) pobj);
-      
-  return (sciPointObj *) pobj;
+    return (sciPointObj *) pobj;
+#endif
 }
index 7d95966..6883b7f 100644 (file)
  *
  */
 
-#include "ObjectStructure.h" /* sciPointObj */
-#include "MALLOC.h" /* MALLOC */
+#include "ObjectStructure.h"    /* sciPointObj */
+#include "MALLOC.h"             /* MALLOC */
 #include "sciprint.h"
 #include "localization.h"
-#include "ObjectSelection.h" /* sciInitSelectedSons... */
-#include "HandleManagement.h" /* sciGetRelationship... */
-#include "SetProperty.h" /* sciInitVisibility... */
-#include "GetProperty.h" /* sciGetPointerToUserData */
+#include "ObjectSelection.h"    /* sciInitSelectedSons... */
+#include "HandleManagement.h"   /* sciGetRelationship... */
+#include "SetProperty.h"        /* sciInitVisibility... */
+#include "GetProperty.h"        /* sciGetPointerToUserData */
 #include "InitUIMenu.h"
 #include "BuildObjects.h"
 
 /**
  * CreateUimenu
  * This function creates Uimenu structure.
- * @return pointer sciPointObj if ok , NULL if not
+ * @return created uimenu UID
  */
-sciPointObj * CreateUimenu(void);
+char *CreateUimenu(void);
index 53ca15f..fbd5e0b 100644 (file)
@@ -1,40 +1,37 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
- * 
+ * Copyright (C) 2009-2011 - DIGITEO - Vincent COUVERT
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 
 #include "GetUimenuChecked.hxx"
 
-#ifdef _MSC_VER
-#include "strdup_Windows.h"
-#endif
+int GetUimenuChecked(char *pObjUID)
+{
+    int checked = 0;
+    int *piChecked = &checked;
 
-using namespace org_scilab_modules_gui_bridge;
+    getGraphicObjectProperty(pObjUID, const_cast < char *>(__GO_UI_CHECKED__), jni_bool, (void **)&piChecked);
 
-int GetUimenuChecked(sciPointObj* sciObj)
-{
-  if (sciGetEntityType( sciObj ) == SCI_UIMENU)
+    if (piChecked == NULL)
+    {
+        Scierror(999, const_cast < char *>(_("'%s' property does not exist for this handle.\n")), "Checked");
+
+        return FALSE;
+    }
+
+    if (checked == TRUE)
     {
-      if (CallScilabBridge::isMenuChecked(getScilabJavaVM(), pUIMENU_FEATURE(sciObj)->hashMapIndex))
-        {
-          return sciReturnString(strdup("on"));
-        }
-      else
-        {
-          return sciReturnString(strdup("off"));
-        }
+        return sciReturnString("on");
     }
-  else
+    else
     {
-      Scierror(999, const_cast<char*>(_("No '%s' property for this object.\n")), "Checked");
-      return FALSE;
+        return sciReturnString("off");
     }
 }
-
index 04e64aa..3699fb2 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
- * 
+ * Copyright (C) 2009-2011 - DIGITEO - Vincent COUVERT
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #ifndef __GET_UIMENU_CHECKED_HXX__
 #define __GET_UIMENU_CHECKED_HXX__
 
-#include "CallScilabBridge.hxx"
 extern "C"
 {
-#include "getScilabJavaVM.h"
 #include "GetProperty.h"
 #include "localization.h"
 #include "GetUimenuChecked.h"
 #include "Scierror.h"
+#include "graphicObjectProperties.h"
+#include "getGraphicObjectProperty.h"
 }
 
-#endif /* __GET_UIMENU_CHECKED_HXX__ */
+#endif                          /* __GET_UIMENU_CHECKED_HXX__ */
index f9ba7ec..50cff4c 100644 (file)
@@ -1,31 +1,35 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Vincent COUVERT
- * Get the label of an uimenu  
- * 
+ * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 
 #include "GetUimenuLabel.hxx"
 
-using namespace org_scilab_modules_gui_bridge;
-
-int GetUimenuLabel(sciPointObj* sciObj)
+/* Get the label of an uimenu */
+int GetUimenuLabel(char *pobjUID)
 {
-  if (sciGetEntityType( sciObj ) == SCI_UIMENU)
+    char *label = NULL;
+    int status = 0;
+
+    getGraphicObjectProperty(pobjUID, __GO_UI_LABEL__, jni_string, (void **)&label);
+
+    if (label == NULL)
     {
-      // Get the label from Java
-      return sciReturnString(CallScilabBridge::getWidgetText(getScilabJavaVM(), pUIMENU_FEATURE(sciObj)->hashMapIndex));
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "Label");
+        return FALSE;
     }
-  else
+    else
     {
-               Scierror(999, const_cast<char*>(_("No '%s' property for this object.\n")), "Label");
-      return FALSE;
+        status = sciReturnString(label);
+        free(label);
+        return status;
     }
 }
-
index 94baac3..a9535bb 100644 (file)
@@ -1,11 +1,12 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Vincent COUVERT
- * 
+ * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #ifndef __GET_UIMENU_LABEL_HXX__
 #define __GET_UIMENU_LABEL_HXX__
 
-#include "CallScilabBridge.hxx"
-extern "C"{
-#include "getScilabJavaVM.h"
+extern "C"
+{
 #include "GetProperty.h"
 #include "localization.h"
 #include "Scierror.h"
 #include "GetUimenuLabel.h"
-#include "UicontrolStyleToString.h"
+#include "getGraphicObjectProperty.h"
+#include "graphicObjectProperties.h"
 }
 
-#endif /* __GET_UIMENULABEL_HXX__ */
+#endif                          /* __GET_UIMENULABEL_HXX__ */
index aebfb51..4347dec 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Vincent COUVERT
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
@@ -23,4 +23,4 @@ extern "C"
 #include "getGraphicObjectProperty.h"
 }
 
-#endif /* __GET_UIOBJECT_ENABLE_HXX__ */
+#endif                          /* __GET_UIOBJECT_ENABLE_HXX__ */
index 372608b..a858ece 100644 (file)
@@ -15,7 +15,8 @@
 #include "InitUIMenu.hxx"
 #include "getHandleDrawer.h"
 #include "CallScilabBridge.hxx"
-extern "C"{
+extern "C"
+{
 #include "sci_types.h"
 #include "BOOL.h"
 #include "getScilabJavaVM.h"
@@ -25,128 +26,112 @@ extern "C"{
 #include "localization.h"
 #include "Scierror.h"
 #include "HandleManagement.h"
+#include "setGraphicObjectProperty.h"
+#include "getGraphicObjectProperty.h"
+#include "graphicObjectProperties.h"
+#include "CurrentFigure.h"
+#include "BuildObjects.h"
 }
 
 using namespace org_scilab_modules_gui_bridge;
 
-void InitUIMenu(sciPointObj* sciObj)
+void InitUIMenu(sciPointObj * sciObj)
 {
-  pUIMENU_FEATURE(sciObj)->hashMapIndex = CallScilabBridge::newMenu(getScilabJavaVM());
+    pUIMENU_FEATURE(sciObj)->hashMapIndex = CallScilabBridge::newMenu(getScilabJavaVM());
 }
 
-int setMenuParent(sciPointObj* sciObj, size_t stackPointer, int valueType, int nbRow, int nbCol)
+int setMenuParent(char *pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
 {
-// ???
-#if 0
-  int parentFigureIndex = 0;
+    char *pstCurrentFigure = NULL;
+    char *parentType = NULL;
+    char *pParentUID = NULL;
 
-  /* Special case to set current figure for parent */
-  if (stackPointer == -1)
+    /* Special case to set current figure for parent */
+    if (stackPointer == -1)
     {
-      // Get current figure index
-      parentFigureIndex = sciGetNum(sciGetCurrentFigure());
-      // Send to Java
-      CallScilabBridge::setFigureAsParent(getScilabJavaVM(), parentFigureIndex, pUIMENU_FEATURE(sciObj)->hashMapIndex);
-      // Scilab relationship
-      sciAddThisToItsParent(sciObj, sciGetCurrentFigure());
+        // Set the parent property
+        pstCurrentFigure = getCurrentFigure();
+        if (pstCurrentFigure == NULL)
+        {
+            pstCurrentFigure = createNewFigureWithAxes();
+        }
+        setGraphicObjectRelationship(pstCurrentFigure, pobjUID);
+        return SET_PROPERTY_SUCCEED;
     }
 
-  if (nbRow*nbCol != 1) {
-    // Parent must be a single value
-    return SET_PROPERTY_ERROR;
-  }
+    if (nbRow * nbCol != 1)
+    {
+        // Parent must be a single value
+        return SET_PROPERTY_ERROR;
+    }
 
-  if (valueType == sci_handles)
+    if (valueType == sci_handles)
     {
-      if (sciGetEntityType(sciGetPointerFromHandle(getHandleFromStack(stackPointer))) == SCI_FIGURE)
+        pParentUID = getObjectFromHandle(getHandleFromStack(stackPointer));
+        if (pParentUID != NULL)
         {
-
-          // If the parent is a figure
-          parentFigureIndex = sciGetNum(sciGetPointerFromHandle(getHandleFromStack(stackPointer)));
-          CallScilabBridge::setFigureAsParent(getScilabJavaVM(), parentFigureIndex, pUIMENU_FEATURE(sciObj)->hashMapIndex);
-
-          // Scilab relationship
-          sciDelThisToItsParent(sciObj, sciGetParent(sciObj));
-          sciAddThisToItsParent(sciObj, sciGetPointerFromHandle(getHandleFromStack(stackPointer)));
-
-          return SET_PROPERTY_SUCCEED;
-
+            getGraphicObjectProperty(pParentUID, __GO_TYPE__, jni_string, (void **)&parentType);
+            if ((strcmp(parentType, __GO_FIGURE__) == 0) || (strcmp(parentType, __GO_UIMENU__) == 0))   // || (strcmp(parentType, __GO_UICONTEXTMENU__) == 0) )
+            {
+                setGraphicObjectRelationship(pParentUID, pobjUID);
+                free(parentType);
+            }
+            else
+            {
+                Scierror(999, const_cast < char *>(_("%s: Wrong type for parent: Figure or uimenu expected.\n")), "SetMenuParent");
+
+                free(parentType);
+                return SET_PROPERTY_ERROR;
+            }
         }
-      else if (sciGetEntityType(sciGetPointerFromHandle(getHandleFromStack(stackPointer))) == SCI_UIMENU)
+        else
         {
+            Scierror(999, const_cast < char *>(_("%s: Wrong type for parent: Figure or uimenu expected.\n")), "SetMenuParent");
 
-          // If the parent is a menu
-          CallScilabBridge::setMenuAsParent(getScilabJavaVM(), pUIMENU_FEATURE(sciGetPointerFromHandle(getHandleFromStack(stackPointer)))->hashMapIndex, pUIMENU_FEATURE(sciObj)->hashMapIndex);
-
-          // Scilab relationship
-          sciDelThisToItsParent(sciObj, sciGetParent(sciObj));
-          sciAddThisToItsParent(sciObj, sciGetPointerFromHandle(getHandleFromStack(stackPointer)));
-
-          return SET_PROPERTY_SUCCEED;
-
-        }
-      else if (sciGetEntityType(sciGetPointerFromHandle(getHandleFromStack(stackPointer))) == SCI_UICONTEXTMENU)
-        {
-
-          // If the parent is a context menu
-          CallScilabBridge::setMenuAsParent(getScilabJavaVM(), pUICONTEXTMENU_FEATURE(sciGetPointerFromHandle(getHandleFromStack(stackPointer)))->hashMapIndex, pUIMENU_FEATURE(sciObj)->hashMapIndex);
-
-          // Scilab relationship
-          sciDelThisToItsParent(sciObj, sciGetParent(sciObj));
-          sciAddThisToItsParent(sciObj, sciGetPointerFromHandle(getHandleFromStack(stackPointer)));
-
-          return SET_PROPERTY_SUCCEED;
-
-        }
-      else
-        {
-          Scierror(999, const_cast<char*>(_("%s: Wrong type for parent: Figure or uimenu expected.\n")),"SetMenuParent");
-          return SET_PROPERTY_ERROR;
+            return SET_PROPERTY_ERROR;
         }
     }
-  else if (valueType == sci_matrix)
+    else
     {
-      // The parent is Scilab Main window (Console Tab)
-      // TODO check that value is 0
-      CallScilabBridge::setRootAsParent(getScilabJavaVM(), pUIMENU_FEATURE(sciObj)->hashMapIndex);
-      return SET_PROPERTY_SUCCEED;
+        abort;
     }
-  else
+#if 0
+    if (valueType == sci_matrix)
     {
-      Scierror(999, const_cast<char*>(_("%s: Wrong type for parent: Figure or uimenu expected.\n")),"SetMenuParent");
-      return SET_PROPERTY_ERROR;
+        // The parent is Scilab Main window (Console Tab)
+        // TODO check that value is 0
+        CallScilabBridge::setRootAsParent(getScilabJavaVM(), pUIMENU_FEATURE(sciObj)->hashMapIndex);
+        return SET_PROPERTY_SUCCEED;
     }
 #endif
-      return SET_PROPERTY_ERROR;
 }
 
-
 void EnableRootMenu(char *name, BOOL status)
 {
-  CallScilabBridge::setRootMenuEnabled(getScilabJavaVM(),  name, BOOLtobool(status));
+    CallScilabBridge::setRootMenuEnabled(getScilabJavaVM(), name, BOOLtobool(status));
 }
 
 void EnableRootSubMenu(char *name, int position, BOOL status)
 {
-  CallScilabBridge::setRootSubMenuEnabled(getScilabJavaVM(), name, position, BOOLtobool(status));
+    CallScilabBridge::setRootSubMenuEnabled(getScilabJavaVM(), name, position, BOOLtobool(status));
 }
 
 void EnableFigureMenu(int figurenum, char *name, BOOL status)
 {
-  CallScilabBridge::setFigureMenuEnabled(getScilabJavaVM(), figurenum, name, BOOLtobool(status));
+    CallScilabBridge::setFigureMenuEnabled(getScilabJavaVM(), figurenum, name, BOOLtobool(status));
 }
 
 void EnableFigureSubMenu(int figurenum, char *name, int position, BOOL status)
 {
- CallScilabBridge::setFigureSubMenuEnabled(getScilabJavaVM(), figurenum, name, position, BOOLtobool(status));
+    CallScilabBridge::setFigureSubMenuEnabled(getScilabJavaVM(), figurenum, name, position, BOOLtobool(status));
 }
 
 void DeleteRootMenu(char *name)
 {
-   CallScilabBridge::removeRootMenu(getScilabJavaVM(), name);
+    CallScilabBridge::removeRootMenu(getScilabJavaVM(), name);
 }
 
 void DeleteFigureMenu(int figurenum, char *name)
 {
-  CallScilabBridge::removeFigureMenu(getScilabJavaVM(), figurenum, name);
+    CallScilabBridge::removeFigureMenu(getScilabJavaVM(), figurenum, name);
 }
index 4d2292f..7d07c0d 100644 (file)
@@ -1,58 +1,37 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
- * 
+ * Copyright (C) 2009-2011 - DIGITEO - Vincent COUVERT
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 
 #include "SetUimenuChecked.hxx"
 
-using namespace org_scilab_modules_gui_bridge;
-
-int SetUimenuChecked(sciPointObj* sciObj, size_t stackPointer, int valueType, int nbRow, int nbCol)
+int SetUimenuChecked(char *pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
 {
-  char *status = NULL;
+    int b = (int)FALSE;
+    BOOL status;
 
-  // Label must be only one character string
-  if (valueType == sci_strings)
+    b = tryGetBooleanValueFromStack(stackPointer, valueType, nbRow, nbCol, "Checked");
+    if (b == NOT_A_BOOLEAN_VALUE)
     {
-      if (nbCol != 1) {
-        Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: '%s' or '%s' expected.\n")), "Checked", "on", "off");
         return SET_PROPERTY_ERROR;
-      }
+    }
 
-      status = getStringFromStack(stackPointer);
-      
-      if (stricmp(status, "on")!=0 && stricmp(status, "off")!=0)
-        {
-        Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: '%s' or '%s' expected.\n")), "Checked", "on", "off");
-        return SET_PROPERTY_ERROR;
+    status = setGraphicObjectProperty(pobjUID, __GO_UI_CHECKED__, &b, jni_bool, 1);
 
-        }
-    }
-  else
+    if (status == TRUE)
     {
-      Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: '%s' or '%s' expected.\n")), "Checked", "on", "off");
-      return SET_PROPERTY_ERROR;
+        return SET_PROPERTY_SUCCEED;
     }
-  
-  // Send the value to Java
-  if (sciGetEntityType( sciObj ) == SCI_UIMENU)
+    else
     {
-      CallScilabBridge::setMenuChecked(getScilabJavaVM(),
-                                       pUIMENU_FEATURE(sciObj)->hashMapIndex,
-                                       stricmp(status, "on")==0);
-      return SET_PROPERTY_SUCCEED;
-    }
-  else
-    {
-      Scierror(999, const_cast<char*>(_("No '%s' property for this object.\n")), "Checked");
-      return SET_PROPERTY_ERROR;
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "Checked");
+        return SET_PROPERTY_ERROR;
     }
 }
-
index 5555a54..0866b56 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009 - DIGITEO - Vincent COUVERT
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #ifndef __SETUIMENUCHECKED_HXX__
 #define __SETUIMENUCHECKED_HXX__
 
-#include "CallScilabBridge.hxx"
-
-extern "C"{
+extern "C"
+{
 #include "sci_types.h"
-#include "getScilabJavaVM.h"
 #include "GetProperty.h"
 #include "SetPropertyStatus.h"
 #include "getPropertyAssignedValue.h"
@@ -25,6 +23,8 @@ extern "C"{
 #include "Scierror.h"
 #include "SetUimenuChecked.h"
 #include "stricmp.h"
+#include "setGraphicObjectProperty.h"
+#include "graphicObjectProperties.h"
 }
 
-#endif /* !__SETUIMENUCHECKED_HXX__ */
+#endif                          /* !__SETUIMENUCHECKED_HXX__ */
index 3a6b9c5..37b50c3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Vincent COUVERT
- * Set the label of anuimenu
+ * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 #include "SetUimenuLabel.hxx"
 
-using namespace org_scilab_modules_gui_bridge;
-
-int SetUimenuLabel(char* sciObj, size_t stackPointer, int valueType, int nbRow, int nbCol)
+/* Set the label of an uimenu */
+int SetUimenuLabel(char *pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
 {
-#if 0
-  // Label must be only one character string
-  if (valueType != sci_strings) {
-    Scierror(999, const_cast<char*>(_("Wrong type for '%s' property: A string expected.\n")), "Label");
-    return SET_PROPERTY_ERROR;
-  }
-  if (nbCol != 1) {
-    Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: A string expected.\n")), "Label");
-    return SET_PROPERTY_ERROR;
-  }
+    BOOL status = FALSE;
+
+    if (valueType != sci_strings)
+    {
+        Scierror(999, _("Wrong type for '%s' property: A string expected.\n"), "Label");
+        return SET_PROPERTY_ERROR;
+    }
 
-  if (nbRow == 0) {
-    // This case should never happen beacause if nbRow==0 then nbCol is also 0
-    Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: A string expected.\n")), "Label");
-    return SET_PROPERTY_ERROR;
-  }
+    if (nbCol != 1)
+    {
+        Scierror(999, _("Wrong size for '%s' property: A string expected.\n"), "Label");
+        return SET_PROPERTY_ERROR;
+    }
 
-  if (sciGetEntityType( sciObj ) == SCI_UIMENU)
+    status = setGraphicObjectProperty(pobjUID, __GO_UI_LABEL__, getStringFromStack(stackPointer), jni_string, 1);
+
+    if (status == TRUE)
     {
-      // Send the label to Java
-      CallScilabBridge::setWidgetText(getScilabJavaVM(), pUIMENU_FEATURE(sciObj)->hashMapIndex, getStringFromStack(stackPointer));
-      return SET_PROPERTY_SUCCEED;
+        return SET_PROPERTY_SUCCEED;
     }
-  else
+    else
     {
-      Scierror(999, const_cast<char*>(_("No '%s' property for this object.\n")), "Label");
-      return SET_PROPERTY_ERROR;
+        Scierror(999, _("'%s' property does not exist for this handle.\n"), "Label");
+        return SET_PROPERTY_ERROR;
     }
-#endif
-  return -1;
 }
-
index a2fa419..5ef47e7 100644 (file)
@@ -1,11 +1,11 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Vincent COUVERT
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #ifndef __SET_UIMENU_LABEL_HXX__
 #define __SET_UIMENU_LABEL_HXX__
 
-#include "CallScilabBridge.hxx"
-
-extern "C"{
+extern "C"
+{
 #include "sci_types.h"
-#include "getScilabJavaVM.h"
 #include "GetProperty.h"
 #include "SetPropertyStatus.h"
 #include "getPropertyAssignedValue.h"
 #include "localization.h"
 #include "Scierror.h"
 #include "SetUimenuLabel.h"
-#include "UicontrolStyleToString.h"
+#include "graphicObjectProperties.h"
+#include "setGraphicObjectProperty.h"
 }
 
-#endif /* __SET_UIMENU_LABEL_HXX__ */
+#endif                          /* __SET_UIMENU_LABEL_HXX__ */
index 165a0d9..1674163 100644 (file)
@@ -2,7 +2,6 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Vincent COUVERT
  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
- * Set the callback of an uicontrol or uimenu
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 #include "SetUiobjectEnable.hxx"
 
+/* Set the enable property of an uicontrol or uimenu */
 int SetUiobjectEnable(char *sciObjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
 {
     int b = (int)FALSE;
     BOOL status;
 
-    b =  tryGetBooleanValueFromStack(stackPointer, valueType, nbRow, nbCol, const_cast<char*>("Enable"));
+    b = tryGetBooleanValueFromStack(stackPointer, valueType, nbRow, nbCol, const_cast < char *>("Enable"));
+
     if (b == NOT_A_BOOLEAN_VALUE)
     {
         return SET_PROPERTY_ERROR;
     }
 
-    status = setGraphicObjectProperty(sciObjUID, const_cast<char*>(__GO_UI_ENABLE__), &b, jni_bool, 1);
+    status = setGraphicObjectProperty(sciObjUID, const_cast < char *>(__GO_UI_ENABLE__), &b, jni_bool, 1);
 
     if (status == TRUE)
     {
@@ -33,8 +34,8 @@ int SetUiobjectEnable(char *sciObjUID, size_t stackPointer, int valueType, int n
     }
     else
     {
-        Scierror(999, const_cast<char*>(_("'%s' property does not exist for this handle.\n")), "Enable");
+        Scierror(999, const_cast < char *>(_("'%s' property does not exist for this handle.\n")), "Enable");
+
         return SET_PROPERTY_ERROR;
     }
 }
-
index c5326e6..c030d41 100644 (file)
 package org.scilab.modules.gui;
 
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_AXES_SIZE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CALLBACKTYPE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CALLBACK__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CHILDREN__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FIGURE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_PARENT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_SIZE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_STYLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TYPE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UICONTROL__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UIMENU__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BACKGROUNDCOLOR__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKBOX__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKED__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_EDIT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FRAME__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTANGLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTNAME__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTSIZE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTWEIGHT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FRAME__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_HORIZONTALALIGNMENT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_IMAGERENDERER__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LABEL__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LISTBOX__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_POPUPMENU__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_PUSHBUTTON__;
@@ -64,11 +70,14 @@ import org.scilab.modules.graphic_objects.figure.Figure;
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.graphicView.GraphicView;
 import org.scilab.modules.gui.bridge.checkbox.SwingScilabCheckBox;
+import org.scilab.modules.gui.bridge.checkboxmenuitem.SwingScilabCheckBoxMenuItem;
 import org.scilab.modules.gui.bridge.editbox.SwingScilabEditBox;
 import org.scilab.modules.gui.bridge.frame.SwingScilabFrame;
 import org.scilab.modules.gui.bridge.imagerenderer.SwingScilabImageRenderer;
 import org.scilab.modules.gui.bridge.label.SwingScilabLabel;
 import org.scilab.modules.gui.bridge.listbox.SwingScilabListBox;
+import org.scilab.modules.gui.bridge.menu.SwingScilabMenu;
+import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
 import org.scilab.modules.gui.bridge.popupmenu.SwingScilabPopupMenu;
 import org.scilab.modules.gui.bridge.pushbutton.SwingScilabPushButton;
 import org.scilab.modules.gui.bridge.radiobutton.SwingScilabRadioButton;
@@ -92,6 +101,10 @@ public final class SwingView implements GraphicView {
 
     private static final String SCIDIR = System.getenv("SCI");
 
+    private static final String GO_UIPARENTMENU = "UIParentMenu";
+    private static final String GO_UICHILDMENU = "UIChildMenu";
+    private static final String GO_UICHECKEDMENU = "UICheckedMenu";
+
     private static final String MENUBARXMLFILE = SCIDIR + "/modules/gui/etc/graphics_menubar.xml";
     private static final String TOOLBARXMLFILE = SCIDIR + "/modules/gui/etc/graphics_toolbar.xml";
 
@@ -134,7 +147,11 @@ public final class SwingView implements GraphicView {
         RadioButton,
         Slider,
         Table,
-        Text
+        Text,
+        Uimenu,
+        UiParentMenu,
+        UiChildMenu,
+        UiCheckedMenu
     } 
 
     private class TypedObject {
@@ -180,7 +197,7 @@ public final class SwingView implements GraphicView {
 
         String objectType = (String) GraphicController.getController().getProperty(id, __GO_TYPE__);
         DEBUG("SwingWiew", "Object Created : " + id + "with type : " + objectType);
-        if (objectType.equals(__GO_FIGURE__)) {
+        if (objectType.equals(__GO_FIGURE__) || objectType.equals(__GO_UIMENU__)) {
             allObjects.put(id, CreateObjectFromType(objectType, id));
             return;
         }
@@ -222,6 +239,14 @@ public final class SwingView implements GraphicView {
             return UielementType.Table;
         } else if (style.equals(__GO_UI_TEXT__)) {
             return UielementType.Text;
+        } else if (style.equals(__GO_UIMENU__)) {
+            return UielementType.UiChildMenu;
+        } else if (style.equals(GO_UIPARENTMENU)) {
+            return UielementType.UiParentMenu;
+        } else if (style.equals(GO_UICHILDMENU)) {
+            return UielementType.UiChildMenu;
+        } else if (style.equals(GO_UICHECKEDMENU)) {
+            return UielementType.UiCheckedMenu;
         }
         return null;
     }
@@ -334,44 +359,81 @@ public final class SwingView implements GraphicView {
             text.setId(id);
             setDefaultProperties(text, id);
             return text;
+        case Uimenu:
+            throw new UnsupportedOperationException();
+        case UiParentMenu: /* SwingView internal type */
+            SwingScilabMenu parentMenu = new SwingScilabMenu();
+            parentMenu.setId(id);
+            setMenuDefaultProperties(parentMenu, id);
+            return parentMenu;
+        case UiChildMenu: /* SwingView internal type */
+            SwingScilabMenuItem childMenu = new SwingScilabMenuItem();
+            childMenu.setId(id);
+            setMenuDefaultProperties(childMenu, id);
+            return childMenu;
+        case UiCheckedMenu: /* SwingView internal type */
+            SwingScilabCheckBoxMenuItem checkedMenu = new SwingScilabCheckBoxMenuItem(false);
+            checkedMenu.setId(id);
+            setMenuDefaultProperties(checkedMenu, id);
+            return checkedMenu;
         default:
             return null;
         }
     }
-    
+
+    /**
+     * Initialize all poperties according to model
+     * @param uiMenuObject the uimenu
+     * @param id the uimenu id
+     */
+    private void setMenuDefaultProperties(Widget uiMenuObject, String id) {
+        SwingViewMenu.update(uiMenuObject, __GO_CALLBACK__,
+                (String) GraphicController.getController().getProperty(id, __GO_CALLBACK__));
+        SwingViewMenu.update(uiMenuObject, __GO_CALLBACKTYPE__,
+                (Integer) GraphicController.getController().getProperty(id, __GO_CALLBACKTYPE__));
+        SwingViewMenu.update(uiMenuObject, __GO_UI_CHECKED__,
+                (Boolean) GraphicController.getController().getProperty(id, __GO_UI_CHECKED__));
+        SwingViewMenu.update(uiMenuObject, __GO_UI_ENABLE__,
+                (Boolean) GraphicController.getController().getProperty(id, __GO_UI_ENABLE__));
+        SwingViewMenu.update(uiMenuObject, __GO_UI_FOREGROUNDCOLOR__,
+                (Double[]) GraphicController.getController().getProperty(id, __GO_UI_FOREGROUNDCOLOR__));
+        SwingViewMenu.update(uiMenuObject, __GO_UI_LABEL__,
+                (String) GraphicController.getController().getProperty(id, __GO_UI_LABEL__));
+    }
+
     /**
      * Initialize all poperties according to model
      * @param uiControlObject the uicontrol
      * @param id the uicontrol id
      */
     private void setDefaultProperties(Widget uiControlObject, String id) {
-        SwingScilabWidget.update(uiControlObject, __GO_UI_BACKGROUNDCOLOR__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_BACKGROUNDCOLOR__,
                 (Double[]) GraphicController.getController().getProperty(id, __GO_UI_BACKGROUNDCOLOR__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_ENABLE__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_ENABLE__,
                 (Boolean) GraphicController.getController().getProperty(id, __GO_UI_ENABLE__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_ENABLE__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_ENABLE__,
                 (Boolean) GraphicController.getController().getProperty(id, __GO_UI_ENABLE__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_FONTANGLE__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_FONTANGLE__,
                 (String) GraphicController.getController().getProperty(id, __GO_UI_FONTANGLE__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_FONTNAME__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_FONTNAME__,
                 (String) GraphicController.getController().getProperty(id, __GO_UI_FONTNAME__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_FONTSIZE__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_FONTSIZE__,
                 (Double) GraphicController.getController().getProperty(id, __GO_UI_FONTSIZE__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_FONTWEIGHT__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_FONTWEIGHT__,
                 (String) GraphicController.getController().getProperty(id, __GO_UI_FONTWEIGHT__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_FOREGROUNDCOLOR__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_FOREGROUNDCOLOR__,
                 (Double[]) GraphicController.getController().getProperty(id, __GO_UI_FOREGROUNDCOLOR__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_HORIZONTALALIGNMENT__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_HORIZONTALALIGNMENT__,
                 (String) GraphicController.getController().getProperty(id, __GO_UI_HORIZONTALALIGNMENT__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_RELIEF__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_RELIEF__,
                 (String) GraphicController.getController().getProperty(id, __GO_UI_RELIEF__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_STRING__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_STRING__,
                 (String[]) GraphicController.getController().getProperty(id, __GO_UI_STRING__));
-        SwingScilabWidget.update(uiControlObject, __GO_UI_VERTICALALIGNMENT__,
+        SwingViewWidget.update(uiControlObject, __GO_UI_VERTICALALIGNMENT__,
                 (String) GraphicController.getController().getProperty(id, __GO_UI_VERTICALALIGNMENT__));
-        SwingScilabWidget.update(uiControlObject, __GO_POSITION__,
+        SwingViewWidget.update(uiControlObject, __GO_POSITION__,
                 (Double[]) GraphicController.getController().getProperty(id, __GO_POSITION__));
-        SwingScilabWidget.update(uiControlObject, __GO_VISIBLE__,
+        SwingViewWidget.update(uiControlObject, __GO_VISIBLE__,
                 (Boolean) GraphicController.getController().getProperty(id, __GO_VISIBLE__));
     }
 
@@ -397,7 +459,7 @@ public final class SwingView implements GraphicView {
     public void updateObject(String id, String property) {
         TypedObject registeredObject = allObjects.get(id);
         DEBUG("SwingView", "Update" + property);
-
+        
         /* On uicontrol style is set after object creation */
         if (registeredObject == null && property.equals(__GO_STYLE__)) {
             String style = (String) GraphicController.getController().getProperty(id, __GO_STYLE__);
@@ -409,20 +471,185 @@ public final class SwingView implements GraphicView {
             String[] newChildren = (String[]) GraphicController.getController().getProperty(id, __GO_CHILDREN__);
             String type = (String) GraphicController.getController().getProperty(id, __GO_TYPE__);
 
+            /*
+             * FIGURE CHILDREN UPDATE
+             */
             if (type.equals(__GO_FIGURE__)) {
                 TypedObject updatedObject = allObjects.get(id);
                 Container updatedComponent = null;
                 boolean needRevalidate = false;
                 // Add new children
                 for (String childId : newChildren) {
+                    if (!updatedObject.hasChild(childId)) {
+                        // Add the child
+                        updatedObject.addChild(childId);
+
+                        String childType = (String) GraphicController.getController().getProperty(childId, __GO_TYPE__);
+
+                        if (childType.equals(__GO_UICONTROL__)) {
+                            updatedComponent = (SwingScilabTab) updatedObject.getValue();
+                            Component childComponent = (Component) allObjects.get(childId).getValue();
+                            updatedComponent.add(childComponent);
+                            needRevalidate = true;
+                        }
+
+                        if (childType.equals(__GO_UIMENU__)) {
+                            TypedObject childAsTypedObject = allObjects.get(childId);
+                            switch (childAsTypedObject.getType()) {
+                            case UiChildMenu:
+                            case UiCheckedMenu:
+                                allObjects.put(childId, CreateObjectFromType(GO_UIPARENTMENU, childId));
+                                updatedComponent = (SwingScilabTab) updatedObject.getValue();
+                                ((Container) ((SwingScilabTab) updatedComponent).getMenuBar().getAsSimpleMenuBar())
+                                .add((SwingScilabMenu) allObjects.get(childId).getValue());
+                                break;
+                            default: /* UiParentMenu */
+                                Component childComponent = (Component) allObjects.get(childId).getValue();
+                                updatedComponent = (SwingScilabTab) updatedObject.getValue();
+                                ((Container) ((SwingScilabTab) updatedComponent).getMenuBar().getAsSimpleMenuBar())
+                                .add((SwingScilabMenu) childComponent);
+                                break;
+                            }
+                            needRevalidate = true;
+                        }
+                    }
+                }
+
+                // Remove children which have been deleted
+                Set<String> newChildrenSet = new HashSet<String>(Arrays.asList(newChildren));
+                for (String childId : updatedObject.getChildren()) {
+                    if (!newChildrenSet.contains(childId)) {
+
+                        // Remove the child
+                        updatedObject.removeChild(childId);
+
+                        String childType = (String) GraphicController.getController().getProperty(childId, __GO_TYPE__);
+
+                        if (childType.equals(__GO_UICONTROL__)) {
+                            updatedComponent = (SwingScilabTab) updatedObject.getValue();
+                            Component childComponent = (Component) allObjects.get(childId).getValue();
+                            updatedComponent.remove(childComponent);
+                            needRevalidate = true;
+                        }
+
+                        if (childType.equals(__GO_UIMENU__)) {
+                            Component childComponent = (Component) allObjects.get(childId).getValue();
+                            updatedComponent = (SwingScilabTab) updatedObject.getValue();
+                            ((Container) ((SwingScilabTab) updatedComponent).getMenuBar().getAsSimpleMenuBar())
+                                            .remove((SwingScilabMenu) childComponent);
+                        }
+                    }
+                }
+                if (needRevalidate && updatedComponent != null) {
+                    ((View) updatedComponent).revalidate();
+                }
+            }
+            /*
+             * MENU CHILDREN UPDATE
+             */
+            if (type.equals(__GO_UIMENU__)) {
+                TypedObject updatedObject = allObjects.get(id);
+                Container updatedComponent = null;
+                boolean needRevalidate = false;
+                String parentId = null;
+                int updatedObjectPosition = 0;
+                // Add new children
+                for (String childId : newChildren) {
                     String childType = (String) GraphicController.getController().getProperty(childId, __GO_TYPE__);
-                    if (childType.equals(__GO_UICONTROL__)) {
+                    if (childType.equals(__GO_UIMENU__)) {
                         if (!updatedObject.hasChild(childId)) {
+
                             // Add the child
                             updatedObject.addChild(childId);
-                            updatedComponent = (SwingScilabTab) updatedObject.getValue();
-                            Component childComponent = (Component) allObjects.get(childId).getValue();
-                            updatedComponent.add(childComponent);
+
+                            TypedObject childAsTypedObject = allObjects.get(childId);
+                            Object addedChild = allObjects.get(childId).getValue();
+                            switch (updatedObject.getType()) {
+                            case UiChildMenu:
+                                updatedComponent = (SwingScilabMenuItem) updatedObject.getValue();
+                                switch (childAsTypedObject.getType()) {
+                                case UiChildMenu:
+                                    /* Replace the item by a parent menu */
+                                    parentId = (String) GraphicController.getController().getProperty(id, __GO_PARENT__);
+                                    updatedObjectPosition = ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                    .getComponentZOrder((SwingScilabMenuItem) allObjects.get(id).getValue());
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                    .remove((SwingScilabMenuItem) allObjects.get(id).getValue());
+                                    allObjects.put(id, CreateObjectFromType(GO_UIPARENTMENU, id));
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                    .add((SwingScilabMenu) allObjects.get(id).getValue(), updatedObjectPosition);
+                                    /* Update the created menu */
+                                    ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabMenuItem) addedChild);
+                                    break;
+                                case UiCheckedMenu:
+                                    /* Replace the item by a parent menu */
+                                    parentId = (String) GraphicController.getController().getProperty(id, __GO_PARENT__);
+                                    updatedObjectPosition = ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .getComponentZOrder((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue());
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .remove((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue());
+                                    allObjects.put(id, CreateObjectFromType(GO_UIPARENTMENU, id));
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .add((SwingScilabMenu) allObjects.get(id).getValue(), updatedObjectPosition);
+                                    /* Update the created menu */
+                                    ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabCheckBoxMenuItem) addedChild);
+                                    break;
+                                default: /* UiParentMenu */
+                                    ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabMenu) addedChild);
+                                    break;
+                                }
+                                break;
+                            case UiCheckedMenu:
+                                updatedComponent = (SwingScilabCheckBoxMenuItem) updatedObject.getValue();
+                                switch (childAsTypedObject.getType()) {
+                                case UiChildMenu:
+                                    /* Replace the item by a parent menu */
+                                    parentId = (String) GraphicController.getController().getProperty(id, __GO_PARENT__);
+                                    updatedObjectPosition = ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .getComponentZOrder((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue());
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .remove((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue());
+                                    allObjects.put(id, CreateObjectFromType(GO_UIPARENTMENU, id));
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .add((SwingScilabMenu) allObjects.get(id).getValue(), updatedObjectPosition);
+                                    /* Update the created menu */
+                                    ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabMenuItem) allObjects.get(childId).getValue());
+                                    break;
+                                case UiCheckedMenu:
+                                    /* Replace the item by a parent menu */
+                                    parentId = (String) GraphicController.getController().getProperty(id, __GO_PARENT__);
+                                    updatedObjectPosition = ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .getComponentZOrder((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue());
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .remove((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue());
+                                    allObjects.put(id, CreateObjectFromType(GO_UIPARENTMENU, id));
+                                    ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                                .add((SwingScilabMenu) allObjects.get(id).getValue(), updatedObjectPosition);
+                                    /* Update the created menu */
+                                    ((SwingScilabMenu) allObjects.get(id).getValue())
+                                                                .add((SwingScilabCheckBoxMenuItem) allObjects.get(childId).getValue());
+                                    break;
+                                default: /* UiParentMenu */
+                                    ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabMenu) allObjects.get(childId).getValue());
+                                    break;
+                                }
+                                break;
+                            default: /* UiParentMenu */
+                                SwingScilabMenu updatedMenu = (SwingScilabMenu) updatedObject.getValue();
+                                updatedComponent = updatedMenu;
+                                switch (childAsTypedObject.getType()) {
+                                case UiChildMenu:
+                                    updatedMenu.add((SwingScilabMenuItem) allObjects.get(childId).getValue());
+                                    break;
+                                case UiCheckedMenu:
+                                    updatedMenu.add((SwingScilabCheckBoxMenuItem) allObjects.get(childId).getValue());
+                                    break;
+                                default: /* UiParentMenu */
+                                    updatedMenu.add((SwingScilabMenu) allObjects.get(childId).getValue());
+                                    break;
+                                }
+                                break;
+                            }
                             needRevalidate = true;
                         }
                     }
@@ -431,16 +658,58 @@ public final class SwingView implements GraphicView {
                 Set<String> newChildrenSet = new HashSet<String>(Arrays.asList(newChildren));
                 for (String childId : updatedObject.getChildren()) {
                     if (!newChildrenSet.contains(childId)) {
-                        // Add the child
+                        // Remove the child
                         updatedObject.removeChild(childId);
-                        updatedComponent = (SwingScilabTab) updatedObject.getValue();
-                        Component childComponent = (Component) allObjects.get(childId).getValue();
-                        updatedComponent.remove(childComponent);
+                        updatedComponent = (SwingScilabMenu) updatedObject.getValue();
+
+                        TypedObject childAsTypedObject = allObjects.get(childId);
+                        SwingScilabMenu updatedMenu = (SwingScilabMenu) allObjects.get(id).getValue();
+                        Object removedMenu = allObjects.get(childId).getValue();
+                        
+                        switch (childAsTypedObject.getType()) {
+                        case UiChildMenu:
+                            updatedMenu.remove((SwingScilabMenuItem) removedMenu);
+                            break;
+                        case UiCheckedMenu:
+                            updatedMenu.remove((SwingScilabCheckBoxMenuItem) removedMenu);
+                            break;
+                        default:
+                            updatedMenu.remove((SwingScilabMenu) removedMenu);
+                            break;
+                        }
                         needRevalidate = true;
                     }
                 }
                 if (needRevalidate && updatedComponent != null) {
-                    ((View) updatedComponent).revalidate();
+                    updatedComponent.validate();
+                }
+            }
+        }
+
+        /*
+         * When the CHECKED property is updated for a UIMENU,
+         * the object is converted to a SwingScilabCheckBoxMenuItem is not already of this type 
+         */
+        if (registeredObject != null && property.equals(__GO_UI_CHECKED__)) {
+            String type = (String) GraphicController.getController().getProperty(id, __GO_TYPE__);
+            if (type.equals(__GO_UIMENU__)) {
+                TypedObject updatedObject = allObjects.get(id);
+                switch (updatedObject.getType()) {
+                case UiParentMenu:
+                    allObjects.put(id, CreateObjectFromType(GO_UICHECKEDMENU, id));
+                    registeredObject = allObjects.get(id);
+                    break;
+                case UiChildMenu:
+                    String parentId = (String) GraphicController.getController().getProperty(id, __GO_PARENT__);
+                    int index = ((SwingScilabMenu) allObjects.get(parentId).getValue())
+                                                            .getComponentZOrder((SwingScilabMenuItem) allObjects.get(id).getValue());
+                    ((SwingScilabMenu) allObjects.get(parentId).getValue()).remove((SwingScilabMenuItem) allObjects.get(id).getValue());
+                    allObjects.put(id, CreateObjectFromType(GO_UICHECKEDMENU, id));
+                    registeredObject = allObjects.get(id);
+                    ((SwingScilabMenu) allObjects.get(parentId).getValue()).add((SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue(), index);
+                    return;
+                default:
+                    break;
                 }
             }
         }
diff --git a/scilab/modules/gui/src/java/org/scilab/modules/gui/SwingViewMenu.java b/scilab/modules/gui/src/java/org/scilab/modules/gui/SwingViewMenu.java
new file mode 100644 (file)
index 0000000..a8d8467
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+package org.scilab.modules.gui;
+
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CALLBACKTYPE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_CALLBACK__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_CHECKED__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_LABEL__;
+
+import java.awt.Color;
+
+import org.scilab.modules.graphic_objects.graphicController.GraphicController;
+import org.scilab.modules.gui.bridge.checkboxmenuitem.SwingScilabCheckBoxMenuItem;
+import org.scilab.modules.gui.events.callback.ScilabCallBack;
+import org.scilab.modules.gui.widget.Widget;
+
+/**
+ * @author Vincent COUVERT
+ */
+public final class SwingViewMenu {
+
+    private static final int COLORS_COEFF = 255;
+
+    /**
+     * Constructor
+     */
+    private SwingViewMenu() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Update the component in the view
+     * @param uimenu the component
+     * @param property the property name
+     * @param value the property value
+     */
+    public static void update(Widget uimenu, String property, Object value) {
+        String uid = ((SwingViewObject) uimenu).getId();
+        if (property.equals(__GO_CALLBACK__)) {
+            int cbType = (Integer) GraphicController.getController().getProperty(uid, __GO_CALLBACKTYPE__);
+            uimenu.setCallback(ScilabCallBack.createCallback((String) value, cbType));
+        } else if (property.equals(__GO_CALLBACKTYPE__)) {
+            String cbString = (String) GraphicController.getController().getProperty(uid, __GO_CALLBACK__);
+            uimenu.setCallback(ScilabCallBack.createCallback(cbString, (Integer) value));
+        } else if (property.equals(__GO_UI_CHECKED__)) {
+            if (uimenu instanceof SwingScilabCheckBoxMenuItem) { 
+                ((SwingScilabCheckBoxMenuItem) uimenu).setChecked((Boolean) value);
+            }
+        } else if (property.equals(__GO_UI_ENABLE__)) {
+            uimenu.setEnabled((Boolean) value);
+        } else if (property.equals(__GO_UI_FOREGROUNDCOLOR__)) {
+            Double[] allColors = ((Double[]) value);
+            uimenu.setForeground(new Color((int) (allColors[0] * COLORS_COEFF),
+                    (int) (allColors[1] * COLORS_COEFF),
+                    (int) (allColors[2] * COLORS_COEFF)));
+        } else if (property.equals(__GO_UI_LABEL__)) {
+            uimenu.setText((String) value);
+        }
+    }
+}
+
@@ -66,7 +66,7 @@ import org.scilab.modules.gui.widget.Widget;
  * @author Bruno JOFRET
  * @author Vincent COUVERT
  */
-public final class SwingScilabWidget {
+public final class SwingViewWidget {
 
     private static final String OBLIQUEFONT = "oblique";
     private static final String ITALICFONT = "italic";
@@ -80,7 +80,7 @@ public final class SwingScilabWidget {
     /**
      * Constructor
      */
-    private SwingScilabWidget() {
+    private SwingViewWidget() {
         throw new UnsupportedOperationException();
     }
 
@@ -311,7 +311,7 @@ public final class SwingScilabWidget {
             uiControl.setVisible(((Boolean) value).booleanValue());
         } else if (property.equals(__GO_PARENT__)) {
             /* Update position */
-            SwingScilabWidget.update(uiControl, __GO_POSITION__,
+            SwingViewWidget.update(uiControl, __GO_POSITION__,
                     (Double[]) GraphicController.getController()
                     .getProperty(uid, __GO_POSITION__));
         } else {
index 0e55f84..9892351 100644 (file)
@@ -15,7 +15,7 @@ package org.scilab.modules.gui.bridge.checkbox;
 
 import javax.swing.JCheckBox;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.checkbox.SimpleCheckBox;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
@@ -243,6 +243,6 @@ public class SwingScilabCheckBox extends JCheckBox implements SwingViewObject, S
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 }
index 7a790db..e9be808 100644 (file)
@@ -20,6 +20,8 @@ import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JToggleButton.ToggleButtonModel;
 
 import org.scilab.modules.console.utils.ScilabSpecialTextUtilities;
+import org.scilab.modules.gui.SwingViewMenu;
+import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.bridge.menu.SwingScilabMenu;
 import org.scilab.modules.gui.checkboxmenuitem.CheckBoxMenuItem;
 import org.scilab.modules.gui.checkboxmenuitem.SimpleCheckBoxMenuItem;
@@ -41,350 +43,377 @@ import org.scilab.modules.gui.utils.Size;
  * Swing implementation for Scilab MenuBars in GUIs
  * @author Vincent COUVERT
  */
-public class SwingScilabCheckBoxMenuItem extends JCheckBoxMenuItem implements SimpleCheckBoxMenuItem {
-
-        private static final long serialVersionUID = 1L;
-        private CommonCallBack callback;
-        private Menu meAsAMenu;
-        private boolean autoCheckedMode = true;
-        private String text = "";
-
-        /**
-         * Constructor
-         */
-        public SwingScilabCheckBoxMenuItem() {
-                this(true);
+public class SwingScilabCheckBoxMenuItem extends JCheckBoxMenuItem implements SwingViewObject, SimpleCheckBoxMenuItem {
+
+    private static final long serialVersionUID = 1L;
+    private CommonCallBack callback;
+    private Menu meAsAMenu;
+    private boolean autoCheckedMode = true;
+    private String text = "";
+
+    private String uid;
+
+    /**
+     * Constructor
+     */
+    public SwingScilabCheckBoxMenuItem() {
+        this(true);
+    }
+
+    /**
+     * Constructor
+     * @param autoCheckedMode if false, menu checking is managed by the user (and not automatically by Java)
+     */
+    public SwingScilabCheckBoxMenuItem(boolean autoCheckedMode) {
+        super();
+        addActionListener(new ActionListener() {
+            /**
+             * Action performed ? What do I have to do ?
+             * @param arg0 the action
+             */
+            public void actionPerformed(ActionEvent arg0) {
+                BlockingResult.getInstance().setResult(((SwingScilabCheckBoxMenuItem) arg0.getSource()).getText());
+            }
+        });
+        this.autoCheckedMode = autoCheckedMode;
+        if (!autoCheckedMode) {
+            setModel(new ScilabCheckBoxMenuItemModel());
         }
-
-        /**
-         * Constructor
-         * @param autoCheckedMode if false, menu checking is managed by the user (and not automatically by Java)
-         */
-        public SwingScilabCheckBoxMenuItem(boolean autoCheckedMode) {
-                super();
-                addActionListener(new ActionListener() {
-                        /**
-                         * Action performed ? What do I have to do ?
-                         * @param arg0 the action
-                         */
-                        public void actionPerformed(ActionEvent arg0) {
-                                BlockingResult.getInstance().setResult(((SwingScilabCheckBoxMenuItem) arg0.getSource()).getText());
-                        }
-                });
-                this.autoCheckedMode = autoCheckedMode;
-                if (!autoCheckedMode) {
-                        setModel(new ScilabCheckBoxMenuItemModel());
-                }
+    }
+
+    /**
+     * Get the base text used for the Menu
+     * @return the text
+     */
+    public String getBaseText() {
+        return this.text;
+    }
+
+    /**
+     * @param text to use for the menu, if it's enclosed between '$' then it's interpreted as
+     * a LaTeX string, in this case the setIcon method of this object is used.
+     */
+    public void setText(String text) {
+        this.text = text;
+        if (ScilabSpecialTextUtilities.setText(this, text)) {
+            super.setText("");
+        } else {
+            super.setText(text);
         }
-
-        /**
-         * Get the base text used for the Menu
-         * @return the text
-         */
-        public String getBaseText() {
-            return this.text;
+    }
+
+    /**
+     * Add a callback to the MenuItem, this callback is a Scilab command
+     * @param callback the callback to set.
+     */
+    public void setCallback(CommonCallBack callback) {
+        this.callback = callback;
+        addActionListener(this.callback);
+    }
+
+    /**
+     * set a mnemonic to a MenuItem
+     * @param mnemonic the mnemonic to add to the MenuItem
+     * @see org.scilab.modules.gui.widget.MenuItem#setMnemonic(org.scilab.modules.gui.widget.int)
+     */
+    public void setMnemonic(int mnemonic) {
+        super.setMnemonic(mnemonic);
+    }
+
+    /**
+     * Add a Scilab MenuItemBar to a Scilab MenuItem
+     * @param menuBarToAdd the Scilab MenuBar to add to the Scilab MenuItem
+     * @see org.scilab.modules.gui.window.Window#setMenuBar(org.scilab.modules.gui.menubar.MenuBar)
+     */
+    public void addMenuBar(MenuBar menuBarToAdd) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Add a Scilab Toolbar to a Scilab MenuItem
+     * @param toolBarToAdd the Scilab ToolBar to add to the Scilab MenuItem
+     * @see org.scilab.modules.gui.window.Window#setToolBar(org.scilab.modules.gui.menubar.ToolBar)
+     */
+    public void addToolBar(ToolBar toolBarToAdd) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Draws a swing Scilab MenuItem
+     * @see org.scilab.modules.gui.UIElement#draw()
+     */
+    public void draw() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Gets the dimensions (width and height) of a swing Scilab MenuItem
+     * @return the dimensions of the menu
+     * @see org.scilab.modules.gui.UIElement#getDims()
+     */
+    public Size getDims() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Gets the position (X-coordinate and Y-coordinate) of a swing Scilab MenuItem
+     * @return the position of the menu
+     * @see org.scilab.modules.gui.UIElement#getPosition()
+     */
+    public Position getPosition() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Sets the dimensions (width and height) of a swing Scilab MenuItem
+     * @param newSize the dimensions to set to the menu
+     * @see org.scilab.modules.gui.UIElement#setDims(org.scilab.modules.gui.utils.Size)
+     */
+    public void setDims(Size newSize) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Sets the position (X-coordinate and Y-coordinate) of a swing Scilab MenuItem
+     * @param newPosition the position to set to the menu
+     * @see org.scilab.modules.gui.UIElement#setPosition(org.scilab.modules.gui.utils.Position)
+     */
+    public void setPosition(Position newPosition) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Get the id of the menu bar associated to the menu (not the parent menubar)
+     * @return the menubar
+     * @see org.scilab.modules.gui.uielement.UIElement#getMenuBarId()
+     */
+    public MenuBar getMenuBar() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Get the id of the tool bar associated to the menu
+     * @return the toolbar
+     * @see org.scilab.modules.gui.uielement.UIElement#getToolBarId()
+     */
+    public ToolBar getToolBar() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Set the horizontal alignment for the Menu text
+     * @param alignment the value for the alignment (See ScilabAlignment.java)
+     */
+    public void setHorizontalAlignment(String alignment) {
+        setHorizontalAlignment(ScilabAlignment.toSwingAlignment(alignment));
+    }
+
+    /**
+     * Set the vertical alignment for the Menu text
+     * @param alignment the value for the alignment (See ScilabAlignment.java)
+     */
+    public void setVerticalAlignment(String alignment) {
+        setVerticalAlignment(ScilabAlignment.toSwingAlignment(alignment));
+    }
+
+    /**
+     * Set the Relief of the Menu
+     * @param reliefType the type of the relief to set (See ScilabRelief.java)
+     */
+    public void setRelief(String reliefType) {
+        setBorder(ScilabRelief.getBorderFromRelief(reliefType));
+    }
+
+    /**
+     * Add a MenuItem to this MenuItem
+     * @param childMenuItem the MenuItem we want to add
+     */
+    public void add(MenuItem childMenuItem) {
+        if (meAsAMenu == null) {
+            meAsAMenu = ScilabMenu.createMenu();
+            meAsAMenu.setText(getText());
+            meAsAMenu.add(childMenuItem);
+            Container parent = getParent();
+            int index = parent.getComponentZOrder(this);
+            parent.remove(this.getComponent());
+            parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
+        } else {
+            meAsAMenu.add(childMenuItem);
         }
-
-        /**
-         * @param text to use for the menu, if it's enclosed between '$' then it's interpreted as
-         * a LaTeX string, in this case the setIcon method of this object is used.
-         */
-        public void setText(String text) {
-            this.text = text;
-            if (ScilabSpecialTextUtilities.setText(this, text)) {
-                super.setText("");
+    }
+
+    /**
+     * Destroy the MenuItem
+     */
+    public void destroy() {
+        ScilabSwingUtilities.removeFromParent(this);
+    }
+
+    /**
+     * Set if the menu item is enabled or not
+     * @param status true if the menu item is enabled
+     */
+    public void setEnabled(boolean status) {
+        super.setEnabled(status);
+        /* (Des)Activate the callback */
+        if (callback != null) {
+            if (status) {
+                removeActionListener(callback); /* To be sure the callback is not added two times */
+                addActionListener(callback);
             } else {
-                super.setText(text);
+                removeActionListener(callback);
             }
         }
-
-        /**
-         * Add a callback to the MenuItem, this callback is a Scilab command
-         * @param callback the callback to set.
-         */
-        public void setCallback(CommonCallBack callback) {
-                this.callback = callback;
-                addActionListener(this.callback);
-        }
-
-        /**
-         * set a mnemonic to a MenuItem
-         * @param mnemonic the mnemonic to add to the MenuItem
-         * @see org.scilab.modules.gui.widget.MenuItem#setMnemonic(org.scilab.modules.gui.widget.int)
-         */
-        public void setMnemonic(int mnemonic) {
-                super.setMnemonic(mnemonic);
-        }
-
-        /**
-         * Add a Scilab MenuItemBar to a Scilab MenuItem
-         * @param menuBarToAdd the Scilab MenuBar to add to the Scilab MenuItem
-         * @see org.scilab.modules.gui.window.Window#setMenuBar(org.scilab.modules.gui.menubar.MenuBar)
-         */
-        public void addMenuBar(MenuBar menuBarToAdd) {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Add a Scilab Toolbar to a Scilab MenuItem
-         * @param toolBarToAdd the Scilab ToolBar to add to the Scilab MenuItem
-         * @see org.scilab.modules.gui.window.Window#setToolBar(org.scilab.modules.gui.menubar.ToolBar)
-         */
-        public void addToolBar(ToolBar toolBarToAdd) {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Draws a swing Scilab MenuItem
-         * @see org.scilab.modules.gui.UIElement#draw()
-         */
-        public void draw() {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Gets the dimensions (width and height) of a swing Scilab MenuItem
-         * @return the dimensions of the menu
-         * @see org.scilab.modules.gui.UIElement#getDims()
-         */
-        public Size getDims() {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Gets the position (X-coordinate and Y-coordinate) of a swing Scilab MenuItem
-         * @return the position of the menu
-         * @see org.scilab.modules.gui.UIElement#getPosition()
-         */
-        public Position getPosition() {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Sets the dimensions (width and height) of a swing Scilab MenuItem
-         * @param newSize the dimensions to set to the menu
-         * @see org.scilab.modules.gui.UIElement#setDims(org.scilab.modules.gui.utils.Size)
-         */
-        public void setDims(Size newSize) {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Sets the position (X-coordinate and Y-coordinate) of a swing Scilab MenuItem
-         * @param newPosition the position to set to the menu
-         * @see org.scilab.modules.gui.UIElement#setPosition(org.scilab.modules.gui.utils.Position)
-         */
-        public void setPosition(Position newPosition) {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Get the id of the menu bar associated to the menu (not the parent menubar)
-         * @return the menubar
-         * @see org.scilab.modules.gui.uielement.UIElement#getMenuBarId()
-         */
-        public MenuBar getMenuBar() {
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Get the id of the tool bar associated to the menu
-         * @return the toolbar
-         * @see org.scilab.modules.gui.uielement.UIElement#getToolBarId()
-         */
-        public ToolBar getToolBar() {
-                throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Add a Menu to this MenuItem
+     * @param childMenu the Menu we want to add
+     */
+    public void add(Menu childMenu) {
+        if (meAsAMenu == null) {
+            meAsAMenu = ScilabMenu.createMenu();
+            meAsAMenu.setText(getText());
+            meAsAMenu.add(childMenu);
+            Container parent = getParent();
+            int index = parent.getComponentZOrder(this);
+            parent.remove(this.getComponent());
+            parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
+        } else {
+            meAsAMenu.add(childMenu);
         }
-
-        /**
-         * Set the horizontal alignment for the Menu text
-         * @param alignment the value for the alignment (See ScilabAlignment.java)
-         */
-        public void setHorizontalAlignment(String alignment) {
-                setHorizontalAlignment(ScilabAlignment.toSwingAlignment(alignment));
+    }
+
+    /**
+     * Setter for InfoBar
+     * @param infoBarToAdd the InfoBar associated to the MenuItem.
+     */
+    public void addInfoBar(TextBox infoBarToAdd) {
+        /* Unimplemented for MenuItems */
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Getter for InfoBar
+     * @return the InfoBar associated to the MenuItem.
+     */
+    public TextBox getInfoBar() {
+        /* Unimplemented for MenuItems */
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Retrieve the CallBack associated to this MenuItem
+     * @return the CallBack
+     */
+    public CommonCallBack getCallback() {
+        return callback;
+    }
+    /**
+     * Set if the menu item is checked or not
+     * @param status true if the menu item is checked
+     */
+    public void setChecked(boolean status) {
+        if (autoCheckedMode) {
+            setSelected(status);
+        } else {
+            ((ScilabCheckBoxMenuItemModel) getModel()).forceSelected(status);
         }
-
-        /**
-         * Set the vertical alignment for the Menu text
-         * @param alignment the value for the alignment (See ScilabAlignment.java)
-         */
-        public void setVerticalAlignment(String alignment) {
-                setVerticalAlignment(ScilabAlignment.toSwingAlignment(alignment));
+    }
+
+    /**
+     * Get if the menu item is checked or not
+     * @return true if the menu item is checked
+     */
+    public boolean isChecked() {
+        return isSelected();
+    }
+
+    /**
+     * Append a CheckBoxMenuItem to a Scilab CheckBoxMenuItem
+     * @param newCheckBoxMenuItem the CheckBoxMenuItem to add to the CheckBoxMenuItem
+     * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.CheckBoxMenuItem)
+     */
+    public void add(CheckBoxMenuItem newCheckBoxMenuItem) {
+        if (meAsAMenu == null) {
+            meAsAMenu = ScilabMenu.createMenu();
+            meAsAMenu.setText(getText());
+            meAsAMenu.add(newCheckBoxMenuItem);
+            Container parent = getParent();
+            int index = parent.getComponentZOrder(this);
+            parent.remove(this.getComponent());
+            parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
+        } else {
+            meAsAMenu.add(newCheckBoxMenuItem);
         }
+    }
+
+    /**
+     * Add a separator
+     * @see org.scilab.modules.gui.menu.SimpleMenu#addSeparator()
+     */
+    public void addSeparator() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Set the UID
+     * @param id the UID
+     */
+    public void setId(String id) {
+        uid = id;
+    }
+
+    /**
+     * Get the UID
+     * @return the UID
+     */
+    public String getId() {
+        return uid;
+    }
+
+    /**
+     * Generic update method
+     * @param property property name
+     * @param value property value
+     */
+    public void update(String property, Object value) {
+        SwingViewMenu.update(this, property, value);
+    }
+
+    /**
+     * Overload default Model so that automatic check/uncheck is disabled
+     * Checking is only managed by the user
+     * See bug #7364
+     * @author Vincent COUVERT
+     */
+    private class ScilabCheckBoxMenuItemModel extends ToggleButtonModel {
 
-        /**
-         * Set the Relief of the Menu
-         * @param reliefType the type of the relief to set (See ScilabRelief.java)
-         */
-        public void setRelief(String reliefType) {
-                setBorder(ScilabRelief.getBorderFromRelief(reliefType));
-        }
-
-        /**
-         * Add a MenuItem to this MenuItem
-         * @param childMenuItem the MenuItem we want to add
-         */
-        public void add(MenuItem childMenuItem) {
-                if (meAsAMenu == null) {
-                        meAsAMenu = ScilabMenu.createMenu();
-                        meAsAMenu.setText(getText());
-                        meAsAMenu.add(childMenuItem);
-                        Container parent = getParent();
-                        int index = parent.getComponentZOrder(this);
-                        parent.remove(this.getComponent());
-                        parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
-                } else {
-                        meAsAMenu.add(childMenuItem);
-                }
-        }
-
-        /**
-         * Destroy the MenuItem
-         */
-        public void destroy() {
-                ScilabSwingUtilities.removeFromParent(this);
-        }
-
-        /**
-         * Set if the menu item is enabled or not
-         * @param status true if the menu item is enabled
-         */
-        public void setEnabled(boolean status) {
-                super.setEnabled(status);
-                /* (Des)Activate the callback */
-                if (callback != null) {
-                        if (status) {
-                                removeActionListener(callback); /* To be sure the callback is not added two times */
-                                addActionListener(callback);
-                        } else {
-                                removeActionListener(callback);
-                        }
-                }
-        }
-
-        /**
-         * Add a Menu to this MenuItem
-         * @param childMenu the Menu we want to add
-         */
-        public void add(Menu childMenu) {
-                if (meAsAMenu == null) {
-                        meAsAMenu = ScilabMenu.createMenu();
-                        meAsAMenu.setText(getText());
-                        meAsAMenu.add(childMenu);
-                        Container parent = getParent();
-                        int index = parent.getComponentZOrder(this);
-                        parent.remove(this.getComponent());
-                        parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
-                } else {
-                        meAsAMenu.add(childMenu);
-                }
-        }
-
-        /**
-         * Setter for InfoBar
-         * @param infoBarToAdd the InfoBar associated to the MenuItem.
-         */
-        public void addInfoBar(TextBox infoBarToAdd) {
-                /* Unimplemented for MenuItems */
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Getter for InfoBar
-         * @return the InfoBar associated to the MenuItem.
-         */
-        public TextBox getInfoBar() {
-                /* Unimplemented for MenuItems */
-                throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Retrieve the CallBack associated to this MenuItem
-         * @return the CallBack
-         */
-        public CommonCallBack getCallback() {
-                return callback;
-        }
-        /**
-         * Set if the menu item is checked or not
-         * @param status true if the menu item is checked
-         */
-        public void setChecked(boolean status) {
-                if (autoCheckedMode) {
-                        setSelected(status);
-                } else {
-                        ((ScilabCheckBoxMenuItemModel) getModel()).forceSelected(status);
-                }
-        }
-
-        /**
-         * Get if the menu item is checked or not
-         * @return true if the menu item is checked
-         */
-        public boolean isChecked() {
-                return isSelected();
-        }
+        private static final long serialVersionUID = 1L;
 
         /**
-         * Append a CheckBoxMenuItem to a Scilab CheckBoxMenuItem
-         * @param newCheckBoxMenuItem the CheckBoxMenuItem to add to the CheckBoxMenuItem
-         * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.CheckBoxMenuItem)
+         * Constructor
          */
-        public void add(CheckBoxMenuItem newCheckBoxMenuItem) {
-                if (meAsAMenu == null) {
-                        meAsAMenu = ScilabMenu.createMenu();
-                        meAsAMenu.setText(getText());
-                        meAsAMenu.add(newCheckBoxMenuItem);
-                        Container parent = getParent();
-                        int index = parent.getComponentZOrder(this);
-                        parent.remove(this.getComponent());
-                        parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
-                } else {
-                        meAsAMenu.add(newCheckBoxMenuItem);
-                }
+        public ScilabCheckBoxMenuItemModel() {
+            super();
         }
 
         /**
-         * Add a separator
-         * @see org.scilab.modules.gui.menu.SimpleMenu#addSeparator()
+         * Using this method is forbidden
+         * Use forceSelected instead
+         * @param status the new selection status
+         * @see javax.swing.JToggleButton.ToggleButtonModel#setSelected(boolean)
          */
-        public void addSeparator() {
-                throw new UnsupportedOperationException();
+        public void setSelected(boolean status) {
+            // Does nothing
         }
 
         /**
-         * Overload default Model so that automatic check/uncheck is disabled
-         * Checking is only managed by the user
-         * See bug #7364
-         * @author Vincent COUVERT
+         * Set checked status
+         * @param status the new selection status
          */
-        private class ScilabCheckBoxMenuItemModel extends ToggleButtonModel {
-
-                private static final long serialVersionUID = 1L;
-
-                /**
-                 * Constructor
-                 */
-                public ScilabCheckBoxMenuItemModel() {
-                        super();
-                }
-
-                /**
-                 * Using this method is forbidden
-                 * Use forceSelected instead
-                 * @param status the new selection status
-                 * @see javax.swing.JToggleButton.ToggleButtonModel#setSelected(boolean)
-                 */
-                public void setSelected(boolean status) {
-                        // Does nothing
-                }
-
-                /**
-                 * Set checked status
-                 * @param status the new selection status
-                 */
-                public void forceSelected(boolean status) {
-                        super.setSelected(status);
-                }
+        public void forceSelected(boolean status) {
+            super.setSelected(status);
         }
+    }
 }
index 243e711..a27ff50 100644 (file)
@@ -21,7 +21,7 @@ import java.awt.event.FocusListener;
 
 import javax.swing.JTextField;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.editbox.SimpleEditBox;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
@@ -271,6 +271,6 @@ public class SwingScilabEditBox extends JTextField implements SwingViewObject, S
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 }
index 2a2e659..d5e0d93 100644 (file)
@@ -15,7 +15,7 @@ package org.scilab.modules.gui.bridge.frame;
 
 import javax.swing.JPanel;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.bridge.canvas.SwingScilabCanvas;
 import org.scilab.modules.gui.bridge.checkbox.SwingScilabCheckBox;
index 7c5cdc0..72b7319 100644 (file)
@@ -24,7 +24,7 @@ import javax.swing.ImageIcon;
 import javax.swing.JLabel;
 import javax.swing.JScrollPane;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.imagerenderer.SimpleImageRenderer;
@@ -370,6 +370,6 @@ public class SwingScilabImageRenderer extends JScrollPane implements SwingViewOb
         * @param value property value
         */
        public void update(String property, Object value) {
-               SwingScilabWidget.update(this, property, value);
+               SwingViewWidget.update(this, property, value);
        }
 }
index 8786df9..8f8de21 100644 (file)
@@ -33,7 +33,7 @@ import javax.swing.text.Document;
 import javax.swing.text.html.HTMLEditorKit;
 import javax.swing.text.html.StyleSheet;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.label.SimpleLabel;
@@ -458,7 +458,7 @@ public class SwingScilabLabel extends JScrollPane implements SwingViewObject, Si
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 
     /**
index 4a80773..c0e6252 100644 (file)
@@ -28,7 +28,7 @@ import javax.swing.JScrollPane;
 import javax.swing.ListSelectionModel;
 
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.listbox.SimpleListBox;
@@ -504,6 +504,6 @@ public class SwingScilabListBox extends JScrollPane implements SwingViewObject,
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 }
index 12ace0f..0ca9c9d 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2007 - INRIA - Vincent Couvert
  * Copyright (C) 2007 - INRIA - Marouane BEN JELLOUL
+ * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
  * 
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -15,8 +16,12 @@ package org.scilab.modules.gui.bridge.menu;
 
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+
 import javax.swing.JMenu;
 
+import org.scilab.modules.console.utils.ScilabSpecialTextUtilities;
+import org.scilab.modules.gui.SwingViewMenu;
+import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.bridge.checkboxmenuitem.SwingScilabCheckBoxMenuItem;
 import org.scilab.modules.gui.bridge.menuitem.SwingScilabMenuItem;
 import org.scilab.modules.gui.checkboxmenuitem.CheckBoxMenuItem;
@@ -32,28 +37,32 @@ import org.scilab.modules.gui.utils.ScilabAlignment;
 import org.scilab.modules.gui.utils.ScilabRelief;
 import org.scilab.modules.gui.utils.ScilabSwingUtilities;
 import org.scilab.modules.gui.utils.Size;
-import org.scilab.modules.console.utils.ScilabSpecialTextUtilities;
 
 /**
  * Swing implementation for Scilab Menus in GUIs
  * @author Vincent COUVERT
  * @author Marouane BEN JELLOUL
  */
-public class SwingScilabMenu extends JMenu implements SimpleMenu {
+public class SwingScilabMenu extends JMenu implements SwingViewObject, SimpleMenu {
 
     private static final long serialVersionUID = 1L;
+    
+    private static final int COLORS_COEFF = 255;
+    
     private CommonCallBack callback;
     private MouseListener[] nativeMouseListeners;
     private MouseListener customedMouseListener;
-    private boolean checkedState = false;
+    private boolean checkedState;
     private String text = "";
-       
+
+    private String uid;
+
     /**
      * Constructor
      */
     public SwingScilabMenu() {
-       super();
-       this.setFocusable(false);
+        super();
+        this.setFocusable(false);
     }
 
     /**
@@ -61,7 +70,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @return the text
      */
     public String getBaseText() {
-       return this.text;
+        return this.text;
     }
 
     /**
@@ -69,75 +78,117 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * a LaTeX string, in this case the setIcon method of this object is used.
      */ 
     public void setText(String text) {
-       this.text = text;
-       if (ScilabSpecialTextUtilities.setText(this, text)) {
-           super.setText("");
-       } else {
-           super.setText(text);
-       }
+        this.text = text;
+        if (ScilabSpecialTextUtilities.setText(this, text)) {
+            super.setText("");
+        } else {
+            super.setText(text);
+        }
     }
-       
+
     /**
      * Append a CheckBoxMenuItem to a Scilab Menu
      * @param newCheckBoxMenuItem the CheckBoxMenuItem to add to the Menu
      * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.CheckBoxMenuItem)
      */
     public void add(CheckBoxMenuItem newCheckBoxMenuItem) {
-       /* Back to Java Mouse Listeners */
-       if (customedMouseListener != null) {
-           removeMouseListener(customedMouseListener);
-       }
-       if (nativeMouseListeners != null) {
-           for (int i = 0; i < nativeMouseListeners.length; i++) {
-               addMouseListener(nativeMouseListeners[i]);
-           }
-           nativeMouseListeners = null;
-       }
-
-       super.add((SwingScilabCheckBoxMenuItem) newCheckBoxMenuItem.getAsSimpleCheckBoxMenuItem());
-       super.repaint();
+        /* Back to Java Mouse Listeners */
+        if (customedMouseListener != null) {
+            removeMouseListener(customedMouseListener);
+        }
+        if (nativeMouseListeners != null) {
+            for (int i = 0; i < nativeMouseListeners.length; i++) {
+                addMouseListener(nativeMouseListeners[i]);
+            }
+            nativeMouseListeners = null;
+        }
+
+        super.add((SwingScilabCheckBoxMenuItem) newCheckBoxMenuItem.getAsSimpleCheckBoxMenuItem());
+        super.repaint();
     }
-       
+
+    /**
+     * Append a CheckBoxMenuItem to a Scilab Menu
+     * @param newCheckBoxMenuItem the CheckBoxMenuItem to add to the Menu
+     * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.CheckBoxMenuItem)
+     */
+    public void add(SwingScilabCheckBoxMenuItem newCheckBoxMenuItem) {
+        /* Back to Java Mouse Listeners */
+        if (customedMouseListener != null) {
+            removeMouseListener(customedMouseListener);
+        }
+        if (nativeMouseListeners != null) {
+            for (int i = 0; i < nativeMouseListeners.length; i++) {
+                addMouseListener(nativeMouseListeners[i]);
+            }
+            nativeMouseListeners = null;
+        }
+
+        super.add(newCheckBoxMenuItem);
+        super.repaint();
+    }
+
     /**
      * Append a MenuItem to a Scilab Menu
      * @param newMenuItem the MenuItem to add to the Menu
      * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.MenuItem)
      */
     public void add(MenuItem newMenuItem) {
-       /* Back to Java Mouse Listeners */
-       if (customedMouseListener != null) {
-           removeMouseListener(customedMouseListener);
-       }
-       if (nativeMouseListeners != null) {
-           for (int i = 0; i < nativeMouseListeners.length; i++) {
-               addMouseListener(nativeMouseListeners[i]);
-           }
-           nativeMouseListeners = null;
-       }
-
-       super.add((SwingScilabMenuItem) newMenuItem.getAsSimpleMenuItem());
-       super.repaint();
+        /* Back to Java Mouse Listeners */
+        if (customedMouseListener != null) {
+            removeMouseListener(customedMouseListener);
+        }
+        if (nativeMouseListeners != null) {
+            for (int i = 0; i < nativeMouseListeners.length; i++) {
+                addMouseListener(nativeMouseListeners[i]);
+            }
+            nativeMouseListeners = null;
+        }
+
+        super.add((SwingScilabMenuItem) newMenuItem.getAsSimpleMenuItem());
+        super.repaint();
     }
-       
+
+    /**
+     * Append a MenuItem to a Scilab Menu
+     * @param newMenuItem the MenuItem to add to the Menu
+     * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.MenuItem)
+     */
+    public void add(SwingScilabMenuItem newMenuItem) {
+        /* Back to Java Mouse Listeners */
+        if (customedMouseListener != null) {
+            removeMouseListener(customedMouseListener);
+        }
+        if (nativeMouseListeners != null) {
+            for (int i = 0; i < nativeMouseListeners.length; i++) {
+                addMouseListener(nativeMouseListeners[i]);
+            }
+            nativeMouseListeners = null;
+        }
+
+        super.add(newMenuItem);
+        super.repaint();
+    }
+
     /**
      * Append a subMenu to a Scilab Menu
      * @param newSubMenu the subMenu to append to the Menu
      * @see org.scilab.modules.gui.menu.Menu#add(org.scilab.modules.gui.ContextMenu)
      */
     public void add(Menu newSubMenu) {
-       /* Back to Java Mouse Listeners */
-       if (customedMouseListener != null) {
-           removeMouseListener(customedMouseListener);
-       }
-       if (nativeMouseListeners != null) {
-           for (int i = 0; i < nativeMouseListeners.length; i++) {
-               addMouseListener(nativeMouseListeners[i]);
-           }
-           nativeMouseListeners = null;
-       }
-               
-       super.add((SwingScilabMenu) newSubMenu.getAsSimpleMenu());
-       super.repaint();
+        /* Back to Java Mouse Listeners */
+        if (customedMouseListener != null) {
+            removeMouseListener(customedMouseListener);
+        }
+        if (nativeMouseListeners != null) {
+            for (int i = 0; i < nativeMouseListeners.length; i++) {
+                addMouseListener(nativeMouseListeners[i]);
+            }
+            nativeMouseListeners = null;
+        }
+
+        super.add((SwingScilabMenu) newSubMenu.getAsSimpleMenu());
+        super.repaint();
     }
 
     /**
@@ -146,7 +197,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.window.Window#setMenuBar(org.scilab.modules.gui.menubar.MenuBar)
      */
     public void addMenuBar(MenuBar menuBarToAdd) {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -155,7 +206,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.window.Window#setToolBar(org.scilab.modules.gui.menubar.ToolBar)
      */
     public void addToolBar(ToolBar toolBarToAdd) {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -163,7 +214,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.UIElement#draw()
      */
     public void draw() {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -172,7 +223,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.UIElement#getDims()
      */
     public Size getDims() {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -181,7 +232,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.UIElement#getPosition()
      */
     public Position getPosition() {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -190,7 +241,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.UIElement#setDims(org.scilab.modules.gui.utils.Size)
      */
     public void setDims(Size newSize) {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -199,7 +250,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.UIElement#setPosition(org.scilab.modules.gui.utils.Position)
      */
     public void setPosition(Position newPosition) {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -208,7 +259,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.uielement.UIElement#getMenuBarId()
      */
     public MenuBar getMenuBar() {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -217,7 +268,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @see org.scilab.modules.gui.uielement.UIElement#getToolBarId()
      */
     public ToolBar getToolBar() {
-       throw new UnsupportedOperationException();
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -225,57 +276,57 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @param cb the callback to set.
      */
     public void setCallback(CommonCallBack cb) {
-       this.callback = cb;
-               
-       /* Remove Java MouseListeners if not already done */
-       /* Save them so that they can be put back */
-       if (nativeMouseListeners == null) {
-           nativeMouseListeners = getMouseListeners();
-           for (int i = 0; i < nativeMouseListeners.length; i++) {
-               removeMouseListener(nativeMouseListeners[i]);
-           }
-       }
-               
-       /* Remove previous listener */
-       if (customedMouseListener != null) {
-           removeMouseListener(customedMouseListener);
-       }
-
-       /* Create a customed MouseListener */
-       customedMouseListener = new MouseListener() {
-
-               public void mouseClicked(MouseEvent arg0) {
-                   /* Mouse button released over the menu */
-                   /* Deselect the menu and execute the callback */
-                   setSelected(false);
-                   if (callback != null) {
-                       callback.actionPerformed(null);
-                   }
-               }
-
-               public void mouseEntered(MouseEvent arg0) {
-                   /* Nothing to do */
-               }
-
-               public void mouseExited(MouseEvent arg0) {
-                   /* Nothing to do */
-               }
-
-               public void mousePressed(MouseEvent arg0) {
-                   /* Select the menu */
-                   setSelected(true);
-               }
-
-               public void mouseReleased(MouseEvent arg0) {
-                   /* Mouse button released out of the menu */
-                   /* Deselect the menu */
-                   setSelected(false);
-               }
-                       
-           };
-               
-       /* Add the mouse listener */
-       addMouseListener(customedMouseListener);
+        this.callback = cb;
+
+        /* Remove Java MouseListeners if not already done */
+        /* Save them so that they can be put back */
+        if (nativeMouseListeners == null) {
+            nativeMouseListeners = getMouseListeners();
+            for (int i = 0; i < nativeMouseListeners.length; i++) {
+                removeMouseListener(nativeMouseListeners[i]);
+            }
+        }
+
+        /* Remove previous listener */
+        if (customedMouseListener != null) {
+            removeMouseListener(customedMouseListener);
+        }
+
+        /* Create a customed MouseListener */
+        customedMouseListener = new MouseListener() {
+
+            public void mouseClicked(MouseEvent arg0) {
+                /* Mouse button released over the menu */
+                /* Deselect the menu and execute the callback */
+                setSelected(false);
+                if (callback != null) {
+                    callback.actionPerformed(null);
+                }
+            }
+
+            public void mouseEntered(MouseEvent arg0) {
+                /* Nothing to do */
+            }
+
+            public void mouseExited(MouseEvent arg0) {
+                /* Nothing to do */
+            }
+
+            public void mousePressed(MouseEvent arg0) {
+                /* Select the menu */
+                setSelected(true);
+            }
+
+            public void mouseReleased(MouseEvent arg0) {
+                /* Mouse button released out of the menu */
+                /* Deselect the menu */
+                setSelected(false);
+            }
+
+        };
+
+        /* Add the mouse listener */
+        addMouseListener(customedMouseListener);
     }
 
     /**
@@ -283,7 +334,7 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @param alignment the value for the alignment (See ScilabAlignment.java)
      */
     public void setHorizontalAlignment(String alignment) {
-       setHorizontalAlignment(ScilabAlignment.toSwingAlignment(alignment));
+        setHorizontalAlignment(ScilabAlignment.toSwingAlignment(alignment));
     }
 
     /**
@@ -291,23 +342,23 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @param alignment the value for the alignment (See ScilabAlignment.java)
      */
     public void setVerticalAlignment(String alignment) {
-       setVerticalAlignment(ScilabAlignment.toSwingAlignment(alignment));
+        setVerticalAlignment(ScilabAlignment.toSwingAlignment(alignment));
     }
-       
+
     /**
      * Set the Relief of the Menu
      * @param reliefType the type of the relief to set (See ScilabRelief.java)
      */
     public void setRelief(String reliefType) {
-       setBorder(ScilabRelief.getBorderFromRelief(reliefType));
+        setBorder(ScilabRelief.getBorderFromRelief(reliefType));
     }
-       
+
     /**
      * Destroy the Menu
      * @see org.scilab.modules.gui.menuitem.SimpleMenuItem#destroy()
      */
     public void destroy() {
-       ScilabSwingUtilities.removeFromParent(this);
+        ScilabSwingUtilities.removeFromParent(this);
     }
 
     /**
@@ -315,25 +366,25 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @param status true if the menu is enabled
      */
     public void setEnabled(boolean status) {
-       super.setEnabled(status);
-       /* (Des)Activate the callback */ 
-       if (callback != null) {
-           if (status) {
-               removeMouseListener(customedMouseListener); /* To be sure the callback is not added two times */
-               addMouseListener(customedMouseListener);
-           } else {
-               removeMouseListener(customedMouseListener);
-           }
-       }
+        super.setEnabled(status);
+        /* (Des)Activate the callback */ 
+        if (callback != null) {
+            if (status) {
+                removeMouseListener(customedMouseListener); /* To be sure the callback is not added two times */
+                addMouseListener(customedMouseListener);
+            } else {
+                removeMouseListener(customedMouseListener);
+            }
+        }
     }
-       
+
     /**
      * Setter for InfoBar
      * @param infoBarToAdd the InfoBar associated to the Menu.
      */
     public void addInfoBar(TextBox infoBarToAdd) {
-       /* Unimplemented for Menus */
-       throw new UnsupportedOperationException();
+        /* Unimplemented for Menus */
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -341,8 +392,8 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @return the InfoBar associated to the Menu.
      */
     public TextBox getInfoBar() {
-       /* Unimplemented for Menus */
-       throw new UnsupportedOperationException();
+        /* Unimplemented for Menus */
+        throw new UnsupportedOperationException();
     }
 
     /**
@@ -350,22 +401,47 @@ public class SwingScilabMenu extends JMenu implements SimpleMenu {
      * @param status true if the Menu is checked
      */
     public void setChecked(boolean status) {
-       checkedState = status;
+        checkedState = status;
     }
-       
+
     /**
      * Get if the Menu is checked or not
      * @return true if the Menu is checked
      */
     public boolean isChecked() {
-       return checkedState;
+        return checkedState;
     }
-       
+
     /**
      * Retrieve the CallBack associated to this MenuItem
      * @return the CallBack
      */
     public CommonCallBack getCallback() {
-       return callback;
+        return callback;
+    }
+
+    /**
+     * Set the UID
+     * @param id the UID
+     */
+    public void setId(String id) {
+        uid = id;
+    }
+
+    /**
+     * Get the UID
+     * @return the UID
+     */
+    public String getId() {
+        return uid;
+    }
+
+    /**
+     * Generic update method
+     * @param property property name
+     * @param value property value
+     */
+    public void update(String property, Object value) {
+        SwingViewMenu.update(this, property, value);
     }
 }
index 7b95b68..3eb5f09 100644 (file)
@@ -20,6 +20,8 @@ import java.awt.event.ActionListener;
 
 import javax.swing.JMenuItem;
 
+import org.scilab.modules.gui.SwingViewMenu;
+import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.bridge.checkboxmenuitem.SwingScilabCheckBoxMenuItem;
 import org.scilab.modules.gui.bridge.menu.SwingScilabMenu;
 import org.scilab.modules.gui.checkboxmenuitem.CheckBoxMenuItem;
@@ -45,7 +47,7 @@ import org.scilab.modules.console.utils.ScilabSpecialTextUtilities;
  * @author Vincent COUVERT
  * @author Marouane BEN JELLOUL
  */
-public class SwingScilabMenuItem extends JMenuItem implements SimpleMenuItem {
+public class SwingScilabMenuItem extends JMenuItem implements SwingViewObject, SimpleMenuItem {
 
     private static final long serialVersionUID = 1L;
     private CommonCallBack callback;
@@ -54,6 +56,8 @@ public class SwingScilabMenuItem extends JMenuItem implements SimpleMenuItem {
     private boolean checkedState;
     private boolean autoCheckedMode = true;
     private String text = "";
+    
+    private String uid;
 
     /**
      * Constructor
@@ -251,6 +255,32 @@ public class SwingScilabMenuItem extends JMenuItem implements SimpleMenuItem {
             meAsAMenu.add(childMenuItem);
         }
     }
+    
+    /**
+     * Add a MenuItem to this MenuItem
+     * @param childMenuItem the MenuItem we want to add
+     */
+    public void add(SwingScilabMenuItem childMenuItem) {
+        System.out.println("SwingScilabMenuItem.add(SwingScilabMenuItem childMenuItem)");
+        if (meAsAMenu == null) {
+            meAsAMenu = ScilabMenu.createMenu();
+            meAsAMenu.setText(getText());
+            ((SwingScilabMenu) meAsAMenu.getAsSimpleMenu()).add(childMenuItem);
+            if (meAsACheckBoxMenuItem == null) {
+                Container parent = getParent();
+                int index = parent.getComponentZOrder(this);
+                parent.remove(this.getComponent());
+                parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
+            } else {
+                Container parent = ((SwingScilabCheckBoxMenuItem) meAsACheckBoxMenuItem.getAsSimpleCheckBoxMenuItem()).getParent();
+                int index = parent.getComponentZOrder(((SwingScilabCheckBoxMenuItem) meAsACheckBoxMenuItem.getAsSimpleCheckBoxMenuItem()));
+                parent.remove(((SwingScilabCheckBoxMenuItem) meAsACheckBoxMenuItem.getAsSimpleCheckBoxMenuItem()).getComponent());
+                parent.add((SwingScilabMenu) meAsAMenu.getAsSimpleMenu(), index);
+            }
+        } else {
+            ((SwingScilabMenu) meAsAMenu.getAsSimpleMenu()).add(childMenuItem);
+        }
+    }
 
     /**
      * Destroy the MenuItem
@@ -393,4 +423,28 @@ public class SwingScilabMenuItem extends JMenuItem implements SimpleMenuItem {
         }
     }
 
+    /**
+     * Set the UID
+     * @param id the UID
+     */
+    public void setId(String id) {
+        uid = id;
+    }
+
+    /**
+     * Get the UID
+     * @return the UID
+     */
+    public String getId() {
+        return uid;
+    }
+
+    /**
+     * Generic update method
+     * @param property property name
+     * @param value property value
+     */
+    public void update(String property, Object value) {
+        SwingViewMenu.update(this, property, value);
+    }
 }
index b245e17..d0216c9 100644 (file)
@@ -21,7 +21,7 @@ import java.util.StringTokenizer;
 import javax.swing.JComboBox;
 
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.menubar.MenuBar;
@@ -390,7 +390,7 @@ public class SwingScilabPopupMenu extends JComboBox implements SwingViewObject,
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 }
 
index 8639491..ad3a8cf 100644 (file)
@@ -24,7 +24,7 @@ import javax.swing.ImageIcon;
 import javax.swing.JButton;
 
 import org.scilab.modules.console.utils.ScilabSpecialTextUtilities;
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.menubar.MenuBar;
@@ -299,6 +299,6 @@ public class SwingScilabPushButton extends JButton implements SwingViewObject, S
         * @param value property value
         */
        public void update(String property, Object value) {
-               SwingScilabWidget.update(this, property, value);
+               SwingViewWidget.update(this, property, value);
        }
 }
index 911e726..9b64b73 100644 (file)
@@ -15,7 +15,7 @@ package org.scilab.modules.gui.bridge.radiobutton;
 
 import javax.swing.JRadioButton;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.menubar.MenuBar;
@@ -243,6 +243,6 @@ public class SwingScilabRadioButton extends JRadioButton implements SwingViewObj
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 }
index c23067b..8f4c445 100644 (file)
@@ -18,7 +18,7 @@ import java.awt.event.AdjustmentListener;
 
 import javax.swing.JScrollBar;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.menubar.MenuBar;
@@ -360,6 +360,6 @@ public class SwingScilabSlider extends JScrollBar implements SwingViewObject, Si
      * @param value property value
      */
     public void update(String property, Object value) {
-        SwingScilabWidget.update(this, property, value);
+        SwingViewWidget.update(this, property, value);
     }
 }
index 54b3bd2..c7c8d1d 100644 (file)
@@ -20,7 +20,7 @@ import javax.swing.JTable;
 import javax.swing.JLabel;
 import javax.swing.JScrollPane;
 
-import org.scilab.modules.gui.SwingScilabWidget;
+import org.scilab.modules.gui.SwingViewWidget;
 import org.scilab.modules.gui.SwingViewObject;
 import org.scilab.modules.gui.events.callback.CommonCallBack;
 import org.scilab.modules.gui.uitable.SimpleUiTable;
@@ -409,7 +409,7 @@ public class SwingScilabUiTable extends JScrollPane implements SwingViewObject,
         * @param value property value
         */
        public void update(String property, Object value) {
-               SwingScilabWidget.update(this, property, value);
+               SwingViewWidget.update(this, property, value);
        }
 
 }
index 2d63aa5..382826e 100644 (file)
@@ -1,10 +1,10 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2009 - DIGITEO - Vincent COUVERT 
-// 
+// Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 // <-- TEST WITH GRAPHIC -->
 // Simple example with Checked menu
@@ -15,17 +15,17 @@ h2 = uimenu("parent", h, "label", "child2");
 h = uimenu("parent", gcf(), "label", "parent");
 h1 = uimenu("parent", h, "label", "child1");
 h2 = uimenu("parent", h, "label", "child2", "checked", "off");
-h3 = uimenu("parent", h1, "label", "subchild1", "checked", "off");
-h4 = uimenu("parent", h2, "label", "subchild1", "checked", "on");
+h3 = uimenu("parent", h1, "label", "subchild11", "checked", "off");
+h4 = uimenu("parent", h2, "label", "subchild21", "checked", "on");
 h = uimenu("label","test");
-if h.parent<>gcf() then bugmes();quit;end
-if h.enable<>"on" then bugmes();quit;end
-if h.label<>"test" then bugmes();quit;end
-if h.visible<>"on" then bugmes();quit;end
-if h.callback<>"" then bugmes();quit;end
-if h.callback_type<>0 then bugmes();quit;end
-if h.checked<>"off" then bugmes();quit;end
-if h.tag<>"" then bugmes();quit;end
+assert_checkequal(h.parent, gcf());
+assert_checkequal(h.enable, "on");
+assert_checkequal(h.label, "test");
+assert_checkequal(h.visible, "on");
+assert_checkequal(h.callback, "");
+assert_checkequal(h.callback_type, 0);
+assert_checkequal(h.checked, "off");
+assert_checkequal(h.tag, "");
 f=scf();
 h = uimenu("Parent", f, ..
     "Enable","off",..
@@ -34,11 +34,11 @@ h = uimenu("Parent", f, ..
     "Callback","disp(1)",..
     "Checked", "on", ..
     "Tag", "hello");
-if h.parent<>f then bugmes();quit;end
-if h.enable<>"off" then bugmes();quit;end
-if h.label<>"test" then bugmes();quit;end
-if h.visible<>"off" then bugmes();quit;end
-if h.callback<>"disp(1)" then bugmes();quit;end
-if h.callback_type<>0 then bugmes();quit;end
-if h.checked<>"on" then bugmes();quit;end
-if h.tag<>"hello" then bugmes();quit;end
+assert_checkequal(h.parent, f);
+assert_checkequal(h.enable, "off");
+assert_checkequal(h.label, "test");
+assert_checkequal(h.visible, "off");
+assert_checkequal(h.callback, "disp(1)");
+assert_checkequal(h.callback_type, 0);
+assert_checkequal(h.checked, "on");
+assert_checkequal(h.tag, "hello");
index a95b465..b9c4a1d 100644 (file)
@@ -1,10 +1,10 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2009 - DIGITEO - Vincent COUVERT 
-// 
+// Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
 // <-- TEST WITH GRAPHIC -->
@@ -18,18 +18,18 @@ h2 = uimenu("parent", h, "label", "child2");
 h = uimenu("parent", gcf(), "label", "parent");
 h1 = uimenu("parent", h, "label", "child1");
 h2 = uimenu("parent", h, "label", "child2", "checked", "off");
-h3 = uimenu("parent", h1, "label", "subchild1", "checked", "off");
-h4 = uimenu("parent", h2, "label", "subchild1", "checked", "on");
+h3 = uimenu("parent", h1, "label", "subchild11", "checked", "off");
+h4 = uimenu("parent", h2, "label", "subchild21", "checked", "on");
 
 h = uimenu("label","test");
-if h.parent<>gcf() then pause,end
-if h.enable<>"on" then pause,end
-if h.label<>"test" then pause,end
-if h.visible<>"on" then pause,end
-if h.callback<>"" then pause,end
-if h.callback_type<>0 then pause,end
-if h.checked<>"off" then pause,end
-if h.tag<>"" then pause,end
+assert_checkequal(h.parent, gcf());
+assert_checkequal(h.enable, "on");
+assert_checkequal(h.label, "test");
+assert_checkequal(h.visible, "on");
+assert_checkequal(h.callback, "");
+assert_checkequal(h.callback_type, 0);
+assert_checkequal(h.checked, "off");
+assert_checkequal(h.tag, "");
 
 f=scf();
 h = uimenu("Parent", f, ..
@@ -39,12 +39,12 @@ h = uimenu("Parent", f, ..
     "Callback","disp(1)",..
     "Checked", "on", ..
     "Tag", "hello");
-if h.parent<>f then pause,end
-if h.enable<>"off" then pause,end
-if h.label<>"test" then pause,end
-if h.visible<>"off" then pause,end
-if h.callback<>"disp(1)" then pause,end
-if h.callback_type<>0 then pause,end
-if h.checked<>"on" then pause,end
-if h.tag<>"hello" then pause,end
+assert_checkequal(h.parent, f);
+assert_checkequal(h.enable, "off");
+assert_checkequal(h.label, "test");
+assert_checkequal(h.visible, "off");
+assert_checkequal(h.callback, "disp(1)");
+assert_checkequal(h.callback_type, 0);
+assert_checkequal(h.checked, "on");
+assert_checkequal(h.tag, "hello");