improve management of axes_size and figure_size 18/14118/3
Antoine ELIAS [Tue, 25 Mar 2014 10:01:48 +0000 (11:01 +0100)]
Change-Id: Id70d8e6dfb640a26b90b3f490b3e110e64561212

scilab/modules/graphic_objects/includes/createGraphicObject.h
scilab/modules/graphic_objects/src/cpp/createGraphicObject.cpp
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/builder/Builder.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/xmlloader/GOBuilder.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/xmlloader/XMLDomLoader.java
scilab/modules/graphic_objects/src/jni/Builder.cpp
scilab/modules/graphic_objects/src/jni/Builder.hxx
scilab/modules/graphic_objects/src/jni/builder.giws.xml
scilab/modules/gui/sci_gateway/c/sci_figure.c
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/tab/SwingScilabCommonPanel.java

index 2340058..112411a 100644 (file)
@@ -50,7 +50,7 @@ GRAPHIC_OBJECTS_IMPEXP int cloneAxesModel(int iParent);
 GRAPHIC_OBJECTS_IMPEXP int createHiddenLabel(int iParent);
 GRAPHIC_OBJECTS_IMPEXP int createLabel(int iParent, int type);
 GRAPHIC_OBJECTS_IMPEXP int createNewFigureWithAxes();
-GRAPHIC_OBJECTS_IMPEXP int createFigure(int _bDockable, int _iMenubarType, int _iToolbarType, int _bDefaultAxes, int _bVisible);
+GRAPHIC_OBJECTS_IMPEXP int createFigure(int _bDockable, int _iMenubarType, int _iToolbarType, int _bDefaultAxes, int _bVisible, double* figureSize, double* axesSize, double* position, int iMenuBar, int iToolBar, int iInfoBar);
 GRAPHIC_OBJECTS_IMPEXP int createSubWin(int iParent);
 GRAPHIC_OBJECTS_IMPEXP int createText(int iParentsubwinUID, char** text, int nbRow, int nbCol, double x, double y, BOOL autoSize, double* userSize, int  centerPos, int *foreground, int *background, BOOL isboxed, BOOL isline, BOOL isfilled, int align);
 GRAPHIC_OBJECTS_IMPEXP int createRect(int iParentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline);
index b9e0bad..2be30f2 100644 (file)
@@ -79,9 +79,16 @@ int createNewFigureWithAxes()
     return Builder::createNewFigureWithAxes(getScilabJavaVM());
 }
 
-int createFigure(int iDockable, int iMenubarType, int iToolbarType, int iDefaultAxes, int iVisible)
-{
-    return Builder::createFigure(getScilabJavaVM(), iDockable != 0, iMenubarType, iToolbarType, iDefaultAxes != 0, iVisible != 0);
+int createFigure(int iDockable, int iMenubarType, int iToolbarType, int iDefaultAxes, int iVisible,
+                 double* figureSize, double* axesSize, double* position, int iMenuBar, int iToolBar, int iInfoBar)
+{
+    return Builder::createFigure(getScilabJavaVM(), iDockable != 0, iMenubarType, iToolbarType, iDefaultAxes != 0, iVisible != 0,
+                                 figureSize, figureSize == NULL ? 0 : 2,
+                                 axesSize, axesSize == NULL ? 0 : 2,
+                                 position, position == NULL ? 0 : 2,
+                                 iMenuBar != 0,
+                                 iToolBar != 0,
+                                 iInfoBar != 0);
 }
 
 void cloneMenus(int model, int newParent)
index 8900d15..c09f4ed 100644 (file)
@@ -42,11 +42,9 @@ import org.scilab.modules.graphic_objects.vectfield.Champ;
 import org.scilab.modules.graphic_objects.vectfield.Segs;
 
 public final class Builder {
-    public final static int createRect(int parentSubwin, double x, double y,
-                                       double height, double width, int foreground,
-                                       int background, int isfilled, int isline) {
+    public final static int createRect(int parentSubwin, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline) {
         GraphicController controller = GraphicController.getController();
-        Axes axes = (Axes)controller.getObjectFromId(parentSubwin);
+        Axes axes = (Axes) controller.getObjectFromId(parentSubwin);
 
         if (height < 0 || width < 0) {
             return 0;
@@ -55,12 +53,13 @@ public final class Builder {
         Integer iRect = controller.askObject(Type.RECTANGLE, false);
 
         /*
-         * Sets the rectangle's parent in order to initialize the former's Contoured properties
-         * with the latter's values (cloneGraphicContext call below)
+         * Sets the rectangle's parent in order to initialize the former's
+         * Contoured properties with the latter's values (cloneGraphicContext
+         * call below)
          */
 
         Rectangle rect = (Rectangle) controller.getObjectFromId(iRect);
-        rect.setUpperLeftPoint(new Double[] {x, y, 0.0});
+        rect.setUpperLeftPoint(new Double[] { x, y, 0.0 });
         rect.setHeight(height);
         rect.setWidth(width);
 
@@ -75,8 +74,8 @@ public final class Builder {
         rect.setMarkMode(axes.getMarkMode());
 
         /*
-         * Initializes the contour properties (background, foreground, etc)
-         * to the default values (those of the parent Axes).
+         * Initializes the contour properties (background, foreground, etc) to
+         * the default values (those of the parent Axes).
          */
         cloneGraphicContext(parentSubwin, iRect);
 
@@ -95,8 +94,8 @@ public final class Builder {
         controller.objectCreated(iRect);
 
         /*
-         * Sets the Axes as the rectangle's parent and adds the rectangle to
-         * its parent's list of children.
+         * Sets the Axes as the rectangle's parent and adds the rectangle to its
+         * parent's list of children.
          */
         //setGraphicObjectRelationship(pparentsubwinUID, pobjUID);
 
@@ -117,8 +116,8 @@ public final class Builder {
         Double lineThickness = 0.;
 
         /*
-         * All these properties are passed by value thus do not care to release them
-         * and do not call releaseGraphicObjectProperty on purpose.
+         * All these properties are passed by value thus do not care to release
+         * them and do not call releaseGraphicObjectProperty on purpose.
          */
 
         lineMode = (Boolean) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_LINE_MODE__);
@@ -235,7 +234,7 @@ public final class Builder {
 
     public static boolean isAxesRedrawing(int subWin) {
         GraphicController controller = GraphicController.getController();
-        Axes axes = (Axes)controller.getObjectFromId(subWin);
+        Axes axes = (Axes) controller.getObjectFromId(subWin);
 
         if (axes.getAutoClear()) {
             reinitSubWin(subWin);
@@ -267,7 +266,7 @@ public final class Builder {
         Integer newLabel = controller.cloneObject(labelSource);
         controller.setProperty(newLabel, GraphicObjectProperties.__GO_POSITION__, position);
         // Auto position must be reset as setting the position has set it to false
-        Boolean autoPosition = (Boolean ) controller.getProperty(labelSource, GraphicObjectProperties.__GO_AUTO_POSITION__);
+        Boolean autoPosition = (Boolean) controller.getProperty(labelSource, GraphicObjectProperties.__GO_AUTO_POSITION__);
         controller.setProperty(newLabel, GraphicObjectProperties.__GO_AUTO_POSITION__, autoPosition);
 
         // Set relation between newLabel and parent
@@ -304,7 +303,7 @@ public final class Builder {
 
         Integer[] children = model.getChildren();
 
-        for (int i = children.length - 1 ; i >= 0 ; i--) {
+        for (int i = children.length - 1; i >= 0; i--) {
             GraphicObject child = controller.getObjectFromId(children[i]);
             if (child.getType() == GraphicObjectProperties.__GO_UIMENU__) {
                 Integer newMenu = controller.cloneObject(children[i]);
@@ -315,8 +314,9 @@ public final class Builder {
         }
     }
 
-    public final static int createFigure(boolean dockable, int menubarType, int toolbarType, boolean defaultAxes, boolean visible) {
-        GraphicController controller =  GraphicController.getController();
+    public final static int createFigure(boolean dockable, int menubarType, int toolbarType, boolean defaultAxes, boolean visible, double[] figureSize, double[] axesSize, double[] position,
+                                         boolean menubar, boolean toolbar, boolean infobar) {
+        GraphicController controller = GraphicController.getController();
         Integer figModel = GraphicModel.getFigureModel().getIdentifier();
         Integer figId = controller.cloneObject(figModel, false);
         Figure figure = (Figure) controller.getObjectFromId(figId);
@@ -326,7 +326,21 @@ public final class Builder {
         figure.setVisible(visible);
         figure.setDefaultAxes(defaultAxes);
 
+        //set figure size only if axes size is not set too
+        if (figureSize != null && figureSize.length == 2 && axesSize.length == 0) {
+            figure.setSize(new Integer[] { (int) figureSize[0], (int) figureSize[1] });
+        }
+
+        if (position != null && position.length == 2) {
+            figure.setPosition(new Integer[] { (int) position[0], (int) position[1] });
+        }
+
+        figure.setMenubarVisible(menubar);
+        figure.setToolbarVisible(toolbar);
+        figure.setInfobarVisible(infobar);
+
         controller.objectCreated(figId);
+
         ScilabNativeView.ScilabNativeView__setCurrentFigure(figId);
 
         if (menubarType == BarType.FIGURE.ordinal()) {
@@ -338,12 +352,16 @@ public final class Builder {
             cloneAxesModel(figId);
         }
 
+        if (axesSize != null && axesSize.length == 2) {
+            controller.setProperty(figId, GraphicObjectProperties.__GO_AXES_SIZE__, new Integer[] { (int) axesSize[0], (int) axesSize[1] });
+        }
+
         return figId;
     }
 
     public final static int createNewFigureWithAxes() {
         GraphicController controller = GraphicController.getController();
-        Integer figModel  = GraphicModel.getFigureModel().getIdentifier();
+        Integer figModel = GraphicModel.getFigureModel().getIdentifier();
 
         //clone default figure
         Integer newFigure = createFigureFromModel();
@@ -364,7 +382,6 @@ public final class Builder {
 
         controller.setProperty(newFigure, GraphicObjectProperties.__GO_VALID__, true);
 
-
         return newFigure;
     }
 
@@ -378,11 +395,8 @@ public final class Builder {
         return cloneAxesModel(parentFigure);
     }
 
-    public final static int createText(int iParentsubwinUID, String[] str, int nbRow, int nbCol,
-                                       double x, double y, boolean autoSize, double[] userSize, int centerPos,
-                                       int foreground, boolean isForeground, int background, boolean isBackground,
-                                       boolean isBoxed, boolean isLine,
-                                       boolean isFilled, int align) {
+    public final static int createText(int iParentsubwinUID, String[] str, int nbRow, int nbCol, double x, double y, boolean autoSize, double[] userSize, int centerPos, int foreground,
+                                       boolean isForeground, int background, boolean isBackground, boolean isBoxed, boolean isLine, boolean isFilled, int align) {
 
         GraphicController controller = GraphicController.getController();
         int iText = controller.askObject(Type.TEXT, false);
@@ -450,10 +464,8 @@ public final class Builder {
         return iText;
     }
 
-    public final static int createArc(int parent, double x, double y, double h, double w,
-                                      double startAngle, double endAngle,
-                                      int foreground, boolean isForeground, int background, boolean isBackground,
-                                      boolean filled, boolean line) {
+    public final static int createArc(int parent, double x, double y, double h, double w, double startAngle, double endAngle, int foreground, boolean isForeground, int background,
+                                      boolean isBackground, boolean filled, boolean line) {
 
         GraphicController controller = GraphicController.getController();
         int iArc = controller.askObject(Type.ARC, false);
@@ -500,8 +512,7 @@ public final class Builder {
         return iArc;
     }
 
-    public final static int createAxis(int parent, int dir, int tics, double[] vx, double[] vy, int subint, String format,
-                                       int fontSize, int textColor, int ticsColor, boolean seg) {
+    public final static int createAxis(int parent, int dir, int tics, double[] vx, double[] vy, int subint, String format, int fontSize, int textColor, int ticsColor, boolean seg) {
 
         GraphicController controller = GraphicController.getController();
         int iAxis = controller.askObject(Type.AXIS, false);
@@ -543,7 +554,7 @@ public final class Builder {
         int iCompound = controller.askObject(Type.COMPOUND);
 
         GraphicObject obj = controller.getObjectFromId(parent);
-        for (int i = 0 ; i < children.length ; i++) {
+        for (int i = 0; i < children.length; i++) {
             controller.setGraphicObjectRelationship(iCompound, children[i]);
         }
 
@@ -560,14 +571,15 @@ public final class Builder {
         Integer[] children = axes.getChildren();
 
         /*
-         * Remove the last "number" created objects (located at the children list's head)
-         * and add them to the compound in the same order
+         * Remove the last "number" created objects (located at the children
+         * list's head) and add them to the compound in the same order
          */
-        for (int i = 0 ; i < childrenCount ; i++) {
+        for (int i = 0; i < childrenCount; i++) {
             /*
-             * Set the parent-child relationship between the Compound and each aggregated object.
-             * Children are added to the Compound from the least recent to the most recent, to
-             * preserve their former ordering.
+             * Set the parent-child relationship between the Compound and each
+             * aggregated object. Children are added to the Compound from the
+             * least recent to the most recent, to preserve their former
+             * ordering.
              */
             controller.setGraphicObjectRelationship(iCompound, children[childrenCount - i - 1]);
         }
@@ -575,11 +587,11 @@ public final class Builder {
         controller.setGraphicObjectRelationship(parent, iCompound);
 
         /*
-         * visibility is obtained from the parent Figure, whereas it is retrieved from the
-         * parent Axes in ConstructCompound.
-         * To be made consistent.
+         * visibility is obtained from the parent Figure, whereas it is
+         * retrieved from the parent Axes in ConstructCompound. To be made
+         * consistent.
          */
-        Figure fig = (Figure)controller.getObjectFromId(axes.getParentFigure());
+        Figure fig = (Figure) controller.getObjectFromId(axes.getParentFigure());
         controller.setProperty(iCompound, GraphicObjectProperties.__GO_VISIBLE__, fig.getVisible());
         return iCompound;
     }
@@ -591,7 +603,6 @@ public final class Builder {
         Axes axes = (Axes) controller.getObjectFromId(parent);
         Fec fec = (Fec) controller.getObjectFromId(iFec);
 
-
         fec.setZBounds(toDouble(zminmax));
         fec.setColorRange(toInteger(colminmax));
         fec.setOutsideColor(toInteger(colout));
@@ -613,7 +624,7 @@ public final class Builder {
 
     public static int createGrayplot(int parent, int type, double[] pvecx, int n1, int n2) {
 
-        int[] objectTypes = new int[] {GraphicObjectProperties.__GO_GRAYPLOT__, GraphicObjectProperties.__GO_MATPLOT__, GraphicObjectProperties.__GO_MATPLOT__};
+        int[] objectTypes = new int[] { GraphicObjectProperties.__GO_GRAYPLOT__, GraphicObjectProperties.__GO_MATPLOT__, GraphicObjectProperties.__GO_MATPLOT__ };
 
         GraphicController controller = GraphicController.getController();
         int iPlot = controller.askObject(GraphicObject.getTypeFromName(objectTypes[type]), false);
@@ -622,7 +633,7 @@ public final class Builder {
 
         if (type == 2) { //Matplot1
             Double[] data = new Double[pvecx.length];
-            for (int i = 0 ; i < pvecx.length ; i++) {
+            for (int i = 0; i < pvecx.length; i++) {
                 data[i] = pvecx[i];
             }
             plot.setTranslate(data);
@@ -645,12 +656,8 @@ public final class Builder {
         return iPlot;
     }
 
-
-    public static int createPolyline(int parent, boolean closed, int plot,
-                                     int foreground, boolean isForeground, int[] background, int mark_style, boolean isMarkStyle,
-                                     int mark_foreground, boolean isMarkForeground,
-                                     int mark_background, boolean isMarkBackground,
-                                     boolean isline, boolean isfilled, boolean ismark, boolean isinterp) {
+    public static int createPolyline(int parent, boolean closed, int plot, int foreground, boolean isForeground, int[] background, int mark_style, boolean isMarkStyle, int mark_foreground,
+                                     boolean isMarkForeground, int mark_background, boolean isMarkBackground, boolean isline, boolean isfilled, boolean ismark, boolean isinterp) {
 
         GraphicController controller = GraphicController.getController();
         int iPoly = controller.askObject(Type.POLYLINE, false);
@@ -682,7 +689,7 @@ public final class Builder {
             if (isinterp) {
                 /* 3 or 4 values to store */
                 Integer[] color = new Integer[background.length];
-                for (int i = 0 ; i < background.length ; i++) {
+                for (int i = 0; i < background.length; i++) {
                     color[i] = background[i];
                 }
 
@@ -717,9 +724,8 @@ public final class Builder {
             controller.removeRelationShipAndDelete(axes.getLegendChild());
         }
 
-
         int iLeg = controller.askObject(Type.LEGEND, false);
-        Legend leg = (Legend)controller.getObjectFromId(iLeg);
+        Legend leg = (Legend) controller.getObjectFromId(iLeg);
 
         leg.setParent(parent);
         leg.setVisible(axes.getVisible());
@@ -733,12 +739,12 @@ public final class Builder {
         leg.setTextStrings(text);
 
         /*
-         * Links are ordered from most recent to least recent,
-         * as their referred-to Polylines in the latter's parent Compound object.
+         * Links are ordered from most recent to least recent, as their
+         * referred-to Polylines in the latter's parent Compound object.
          */
 
         ArrayList<Integer> links = new ArrayList<Integer>();
-        for (int i = count - 1 ; i >= 0 ; i--) {
+        for (int i = count - 1; i >= 0; i--) {
             links.add(count - i - 1, handles[i]);
         }
 
@@ -748,7 +754,7 @@ public final class Builder {
         leg.setClipState(0); //OFF
         leg.setClipBox(axes.getClipBox());
 
-        cloneGraphicContext(parent,  iLeg);
+        cloneGraphicContext(parent, iLeg);
         cloneFontContext(parent, iLeg);
 
         leg.setFillMode(true);
@@ -759,12 +765,11 @@ public final class Builder {
         return iLeg;
     }
 
-    public static int createSegs(int parent, double[] vx, double[] vy, double[] vz, boolean isVZ,
-                                 int[] style, double arsize) {
+    public static int createSegs(int parent, double[] vx, double[] vy, double[] vz, boolean isVZ, int[] style, double arsize) {
         GraphicController controller = GraphicController.getController();
         Axes axes = (Axes) controller.getObjectFromId(parent);
         int iSegs = controller.askObject(Type.SEGS, false);
-        Segs segs = (Segs)controller.getObjectFromId(iSegs);
+        Segs segs = (Segs) controller.getObjectFromId(iSegs);
 
         segs.setVisible(axes.getVisible());
 
@@ -780,7 +785,7 @@ public final class Builder {
         segs.setArrowSize(arsize);
 
         Double[] arrowCoords = new Double[3 * numberArrows];
-        for (int i = 0 ; i < numberArrows ; i++) {
+        for (int i = 0; i < numberArrows; i++) {
             arrowCoords[3 * i] = vx[2 * i];
             arrowCoords[3 * i + 1] = vy[2 * i];
             if (isVZ) {
@@ -792,7 +797,7 @@ public final class Builder {
 
         segs.setBase(arrowCoords);
 
-        for (int i = 0 ; i < numberArrows ; i++) {
+        for (int i = 0; i < numberArrows; i++) {
             arrowCoords[3 * i] = vx[2 * i + 1];
             arrowCoords[3 * i + 1] = vy[2 * i + 1];
             if (isVZ) {
@@ -811,14 +816,13 @@ public final class Builder {
         return iSegs;
     }
 
-    public static int createChamp(int parent, double[] vx, double[] vy,
-                                  double[] vfx, double[] vfy, double arsize, boolean typeofchamp) {
+    public static int createChamp(int parent, double[] vx, double[] vy, double[] vfx, double[] vfy, double arsize, boolean typeofchamp) {
 
         GraphicController controller = GraphicController.getController();
         Axes axes = (Axes) controller.getObjectFromId(parent);
 
         int iChamp = controller.askObject(Type.CHAMP, false);
-        Champ champ = (Champ)controller.getObjectFromId(iChamp);
+        Champ champ = (Champ) controller.getObjectFromId(iChamp);
 
         champ.setVisible(axes.getVisible());
 
@@ -830,7 +834,7 @@ public final class Builder {
         int numberArrows = vx.length * vy.length;
         champ.setNumberArrows(numberArrows);
 
-        Integer[] dimensions = new Integer[] {vx.length, vy.length};
+        Integer[] dimensions = new Integer[] { vx.length, vy.length };
         champ.setDimensions(dimensions);
 
         champ.setArrowSize(arsize);
@@ -839,19 +843,19 @@ public final class Builder {
 
         //convert vx Double
         Double[] temp = new Double[vx.length];
-        for (int i =  0 ; i < vx.length ; i++) {
+        for (int i = 0; i < vx.length; i++) {
             temp[i] = vx[i];
         }
         champ.setBaseX(temp);
 
         //convert vy Double
         temp = new Double[vy.length];
-        for (int i =  0 ; i < vy.length ; i++) {
+        for (int i = 0; i < vy.length; i++) {
             temp[i] = vy[i];
         }
         champ.setBaseY(temp);
 
-        for (int i = 0 ; i < numberArrows ; i++) {
+        for (int i = 0; i < numberArrows; i++) {
             arrowCoords[3 * i] = vfx[i];
             arrowCoords[3 * i + 1] = vfy[i];
             arrowCoords[3 * i + 2] = 0.0;
@@ -895,40 +899,38 @@ public final class Builder {
         return iSurf;
     }
 
-    public static void initSubWinTo3d(int iSubwin, String legend, boolean isLegend,
-                                      int[] flag, double alpha, double theta,
-                                      double[] ebox, double[] x, double[] y, double[] z) {
+    public static void initSubWinTo3d(int iSubwin, String legend, boolean isLegend, int[] flag, double alpha, double theta, double[] ebox, double[] x, double[] y, double[] z) {
         GraphicController controller = GraphicController.getController();
 
         // Force 3d view
         controller.setProperty(iSubwin, GraphicObjectProperties.__GO_VIEW__, 1);
 
         if (isLegend) {
-            StringTokenizer strTok =  new StringTokenizer(legend, "@");
+            StringTokenizer strTok = new StringTokenizer(legend, "@");
             int iToken = strTok.countTokens();
             if (iToken > 0) {
                 //X
-                String str[] = new String[] {strTok.nextToken()};
+                String str[] = new String[] { strTok.nextToken() };
                 Integer label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
-                Integer[] dims = new Integer[] {1, 1};
+                Integer[] dims = new Integer[] { 1, 1 };
                 controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__, dims);
                 controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_STRINGS__, str);
             }
 
             if (iToken > 1) {
                 //Y
-                String str[] = new String[] {strTok.nextToken()};
+                String str[] = new String[] { strTok.nextToken() };
                 Integer label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
-                Integer[] dims = new Integer[] {1, 1};
+                Integer[] dims = new Integer[] { 1, 1 };
                 controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__, dims);
                 controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_STRINGS__, str);
             }
 
             if (iToken > 2) {
                 //Z
-                String str[] = new String[] {strTok.nextToken()};
+                String str[] = new String[] { strTok.nextToken() };
                 Integer label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
-                Integer[] dims = new Integer[] {1, 1};
+                Integer[] dims = new Integer[] { 1, 1 };
                 controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__, dims);
                 controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_STRINGS__, str);
             }
@@ -1011,22 +1013,22 @@ public final class Builder {
             }
         }
 
-        Double[] rotationAngles = new Double[] {alpha, theta};
+        Double[] rotationAngles = new Double[] { alpha, theta };
         controller.setProperty(iSubwin, GraphicObjectProperties.__GO_ROTATION_ANGLES__, rotationAngles);
 
         Double[] dataBounds = (Double[]) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_DATA_BOUNDS__);
         Boolean autoScale = (Boolean) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_AUTO_SCALE__);
 
-        Double rect[] = new Double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+        Double rect[] = new Double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
         if (autoScale) {
             // compute and merge new specified bounds with data bounds
             switch (flag[1]) {
-                case 0 :
+                case 0:
                     break;
-                case 1 :
-                case 3 :
-                case 5 :
-                case 7 :
+                case 1:
+                case 3:
+                case 5:
+                case 7:
                     rect[0] = ebox[0]; // xmin
                     rect[1] = ebox[1]; // xmax
                     rect[2] = ebox[2]; // ymin
@@ -1034,10 +1036,10 @@ public final class Builder {
                     rect[4] = ebox[4]; // zmin
                     rect[5] = ebox[5]; // zmax
                     break;
-                case 2 :
-                case 4 :
-                case 6 :
-                case 8 :
+                case 2:
+                case 4:
+                case 6:
+                case 8:
                     double[] res = getDrect(x, rect[0], rect[1], dataBounds[0], dataBounds[1]);
                     rect[0] = res[0];
                     rect[1] = res[1];
@@ -1077,7 +1079,7 @@ public final class Builder {
         double refMin = Double.POSITIVE_INFINITY;
         boolean isInfinite = true;
 
-        for (int i = 0 ; i < x.length ; i++) {
+        for (int i = 0; i < x.length; i++) {
             Double tmp = x[i];
             if (tmp.isInfinite() == false && tmp.isNaN() == false) {
                 refMin = Math.min(refMin, tmp);
@@ -1091,21 +1093,18 @@ public final class Builder {
             refMax = defaultMax;
         }
 
-        return new double[] {refMin, refMax};
+        return new double[] { refMin, refMax };
     }
 
-    private static boolean  isValidType(int type) {
+    private static boolean isValidType(int type) {
         return type >= 0 && type <= 1;
     }
 
     private static boolean isValidColor(double[] color) {
-        return (color[0] >= 0.0 && color[0] <= 1.0)
-               && (color[1] >= 0.0 && color[1] <= 1.0)
-               && (color[2] >= 0.0 && color[2] <= 1.0);
+        return (color[0] >= 0.0 && color[0] <= 1.0) && (color[1] >= 0.0 && color[1] <= 1.0) && (color[2] >= 0.0 && color[2] <= 1.0);
     }
 
-    public static int createLight(int parent, int type, boolean visible, double[] pos,
-                                  double[] dir, double[] ambient, double[] diffuse, double[] specular) {
+    public static int createLight(int parent, int type, boolean visible, double[] pos, double[] dir, double[] ambient, double[] diffuse, double[] specular) {
         GraphicController controller = GraphicController.getController();
 
         int iLight = controller.askObject(Type.LIGHT, false);
@@ -1147,7 +1146,7 @@ public final class Builder {
 
     private static Double[] toDouble(double[] var) {
         Double[] ret = new Double[var.length];
-        for (int i = 0 ; i < var.length ; i++) {
+        for (int i = 0; i < var.length; i++) {
             ret[i] = var[i];
         }
 
@@ -1156,11 +1155,10 @@ public final class Builder {
 
     private static Integer[] toInteger(int[] var) {
         Integer[] ret = new Integer[var.length];
-        for (int i = 0 ; i < var.length ; i++) {
+        for (int i = 0; i < var.length; i++) {
             ret[i] = var[i];
         }
 
         return ret;
     }
 }
-
index 6f30e44..8bf7a75 100644 (file)
@@ -1,18 +1,13 @@
 package org.scilab.modules.graphic_objects.xmlloader;
 
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_AXES_SIZE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_BORDER_OPT_PADDING__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_IMAGE__;
-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_CLOSEREQUESTFCN__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_DOCKABLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FIGURE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_GRID_OPT_GRID__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_GRID_OPT_PADDING__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_HIDDEN__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_INFOBAR_VISIBLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_LAYOUT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_LINE_THICKNESS__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_MARGINS__;
@@ -24,7 +19,6 @@ import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProp
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_STYLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TAG__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TITLE__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TOOLBAR_VISIBLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TYPE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UIMENU__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_BACKGROUNDCOLOR__;
@@ -63,6 +57,7 @@ import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProp
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_GROUP_NAME__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_HORIZONTALALIGNMENT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ICON__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_IMAGE__;
 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_MAX__;
@@ -95,22 +90,10 @@ import org.xml.sax.Attributes;
 
 public class GOBuilder {
     public static Integer figureBuilder(GraphicController controller, Attributes attributes) {
-        Integer fig = Builder.createFigure(false, 0, 0, false, false);
+        Integer fig = Builder.createFigure(false, 0, 0, false, false, null, null, null, false, false, false);
         //Integer fig = Builder.createNewFigureWithAxes();
         String item = null;
 
-        // hide toolbar
-        controller.setProperty(fig, __GO_TOOLBAR_VISIBLE__, false);
-
-        // hide menubar
-        controller.setProperty(fig, __GO_MENUBAR_VISIBLE__, false);
-
-        // hide infobar
-        controller.setProperty(fig, __GO_INFOBAR_VISIBLE__, false);
-
-        // remove docking bar
-        controller.setProperty(fig, __GO_DOCKABLE__, false);
-
         // id
         XmlTools.setPropAsString(fig, __GO_TAG__, attributes.getValue("id"));
 
@@ -151,10 +134,6 @@ public class GOBuilder {
         // title
         XmlTools.setPropAsString(fig, __GO_NAME__, attributes.getValue("title"));
 
-        // icon
-        // XmlTools.setPropAsString(fig, __GO_ICON__,
-        // attributes.getValue("icon"));
-
         // resizable
         XmlTools.setPropAsBoolean(fig, __GO_RESIZE__, attributes.getValue("resizable"));
 
@@ -573,6 +552,21 @@ public class GOBuilder {
                         Double[] val = new Double[] {(double) color.getRed() / 255, (double) color.getGreen() / 255, (double) color.getBlue() / 255};
                         controller.setProperty(uic, __GO_UI_FOREGROUNDCOLOR__, val);
                     }
+
+                    item = xmlAttributes.get("ui-style");
+                    if (item != null) {
+                        map = CSSParser.parseLine(item);
+                        item = XmlTools.getFromMap(map, "bold", "false");
+                        if (item.equals("true")) {
+                            controller.setProperty(uic, __GO_UI_FONTWEIGHT__, "bold");
+                        }
+
+                        item = XmlTools.getFromMap(map, "italic", "false");
+                        if (item.equals("true")) {
+                            controller.setProperty(uic, __GO_UI_FONTANGLE__, "italic");
+                        }
+                    }
+
                     break;
                 }
                 case __GO_UI_EDIT__ : {
index 35fe28b..703888b 100644 (file)
@@ -11,6 +11,7 @@ import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.scilab.modules.commons.CommonFileUtils;
 import org.scilab.modules.commons.gui.FindIconHelper;
+import org.scilab.modules.graphic_objects.ScilabNativeView;
 import org.scilab.modules.graphic_objects.builder.Builder;
 import org.scilab.modules.graphic_objects.console.Console;
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
@@ -507,6 +508,11 @@ public class XMLDomLoader {
         Integer menubar = 1;
         Integer toolbar = 1;
         Boolean default_axes = true;
+        double[] figureSize = null;
+        double[] axesSize = null;
+        boolean menubarVisisble = true;
+        boolean toolbarVisisble = true;
+        boolean infobarVisisble = true;
 
         NamedNodeMap attr = node.getAttributes();
         //dockable
@@ -540,8 +546,47 @@ public class XMLDomLoader {
             attr.removeNamedItem("visible");
         }
 
-        Integer fig = Builder.createFigure(dockable, menubar, toolbar, default_axes, false);
+        //axesSize
+        tempnode = attr.getNamedItem("axes_size");
+        if (tempnode != null) {
+            Double[] size = getAttributeAsDoubleArray(tempnode.getNodeValue());
+            axesSize = new double[] {size[0], size[1]};
+            attr.removeNamedItem("axes_size");
+        }
+
+        //figureSize
+        tempnode = attr.getNamedItem("figure_size");
+        if (axesSize == null && tempnode != null) {
+            Double[] size = getAttributeAsDoubleArray(tempnode.getNodeValue());
+            figureSize = new double[] {size[0], size[1]};
+            attr.removeNamedItem("figure_size");
+        }
+
+        //menubar
+        tempnode = attr.getNamedItem("menubar_visible");
+        if (tempnode != null) {
+            menubarVisisble = getAttributeAsBoolean(tempnode.getNodeValue());
+            attr.removeNamedItem("menubar_visible");
+        }
+        //toolbar
+        tempnode = attr.getNamedItem("toolbar_visible");
+        if (tempnode != null) {
+            toolbarVisisble = getAttributeAsBoolean(tempnode.getNodeValue());
+            attr.removeNamedItem("toolbar_visible");
+        }
+        //infobar
+        tempnode = attr.getNamedItem("infobar_visible");
+        if (tempnode != null) {
+            infobarVisisble = getAttributeAsBoolean(tempnode.getNodeValue());
+            attr.removeNamedItem("infobar_visible");
+        }
+
+        Integer fig = Builder.createFigure(dockable, menubar, toolbar, default_axes, false, figureSize, axesSize, null, menubarVisisble, toolbarVisisble, infobarVisisble);
+        //set new id
+        int newId = ScilabNativeView.ScilabNativeView__getValidDefaultFigureId();
 
+        controller.setProperty(fig,  __GO_ID__, newId);
+        System.out.println("setId : " + newId);
         for (int i = 0 ; i < attr.getLength() ; i++) {
             Node prop = attr.item(i);
             Pair<Integer, ModelType> pair = figPropToGO.get(prop.getNodeName());
index fdb957e..20b0b9d 100644 (file)
@@ -1,6 +1,6 @@
 #include "Builder.hxx"
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/builder.giws.xml
+giws --disable-return-size-array --output-dir src\jni\ --throws-exception-on-error --description-file src\jni\builder.giws.xml
 */
 /*
 
@@ -110,7 +110,7 @@ jintcreateHiddenLabeljintintID=NULL;
 jbooleanisAxesRedrawingjintintID=NULL;
 jintcreateLabeljintintjintintID=NULL;
 jintcreateNewFigureWithAxesID=NULL;
-jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanID=NULL;
+jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjbooleanbooleanjbooleanbooleanID=NULL;
 voidcloneMenusjintintjintintID=NULL;
 jintcloneAxesModeljintintID=NULL;
 jintcreateSubWinjintintID=NULL;
@@ -157,7 +157,7 @@ jintcreateHiddenLabeljintintID=NULL;
 jbooleanisAxesRedrawingjintintID=NULL;
 jintcreateLabeljintintjintintID=NULL;
 jintcreateNewFigureWithAxesID=NULL;
-jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanID=NULL;
+jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjbooleanbooleanjbooleanbooleanID=NULL;
 voidcloneMenusjintintjintintID=NULL;
 jintcloneAxesModeljintintID=NULL;
 jintcreateSubWinjintintID=NULL;
@@ -348,7 +348,7 @@ return res;
 
 }
 
-int Builder::createFigure (JavaVM * jvm_, bool dockable, int menubarType, int toolbarType, bool defaultAxes, bool visible){
+int Builder::createFigure (JavaVM * jvm_, bool dockable, int menubarType, int toolbarType, bool defaultAxes, bool visible, double const* figureSize, int figureSizeSize, double const* axesSize, int axesSizeSize, double const* position, int positionSize, bool menubar, bool toolbar, bool infobar){
 
 JNIEnv * curEnv = NULL;
 jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
@@ -357,8 +357,8 @@ if ( cls == NULL) {
 throw GiwsException::JniCallMethodException(curEnv);
 }
 
-static jmethodID jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createFigure", "(ZIIZZ)I" ) ;
-if (jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanID == NULL) {
+static jmethodID jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjbooleanbooleanjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createFigure", "(ZIIZZ[D[D[DZZZ)I" ) ;
+if (jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjbooleanbooleanjbooleanbooleanID == NULL) {
 throw GiwsException::JniMethodNotFoundException(curEnv, "createFigure");
 }
 
@@ -368,8 +368,50 @@ jboolean defaultAxes_ = (static_cast<bool>(defaultAxes) ? JNI_TRUE : JNI_FALSE);
 
 jboolean visible_ = (static_cast<bool>(visible) ? JNI_TRUE : JNI_FALSE);
 
-                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanID ,dockable_, menubarType, toolbarType, defaultAxes_, visible_));
-                        if (curEnv->ExceptionCheck()) {
+jdoubleArray figureSize_ = curEnv->NewDoubleArray( figureSizeSize ) ;
+
+if (figureSize_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( figureSize_, 0, figureSizeSize, (jdouble*)(figureSize) ) ;
+
+
+jdoubleArray axesSize_ = curEnv->NewDoubleArray( axesSizeSize ) ;
+
+if (axesSize_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( axesSize_, 0, axesSizeSize, (jdouble*)(axesSize) ) ;
+
+
+jdoubleArray position_ = curEnv->NewDoubleArray( positionSize ) ;
+
+if (position_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( position_, 0, positionSize, (jdouble*)(position) ) ;
+
+
+jboolean menubar_ = (static_cast<bool>(menubar) ? JNI_TRUE : JNI_FALSE);
+
+jboolean toolbar_ = (static_cast<bool>(toolbar) ? JNI_TRUE : JNI_FALSE);
+
+jboolean infobar_ = (static_cast<bool>(infobar) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjbooleanbooleanjbooleanbooleanID ,dockable_, menubarType, toolbarType, defaultAxes_, visible_, figureSize_, axesSize_, position_, menubar_, toolbar_, infobar_));
+                        curEnv->DeleteLocalRef(figureSize_);
+curEnv->DeleteLocalRef(axesSize_);
+curEnv->DeleteLocalRef(position_);
+if (curEnv->ExceptionCheck()) {
 throw GiwsException::JniCallMethodException(curEnv);
 }
 return res;
index 86f673c..01978b5 100644 (file)
@@ -1,5 +1,5 @@
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/builder.giws.xml
+giws --disable-return-size-array --output-dir src\jni\ --throws-exception-on-error --description-file src\jni\builder.giws.xml
 */
 /*
 
@@ -83,7 +83,7 @@ jmethodID jintcreateHiddenLabeljintintID; // cache method id
 jmethodID jbooleanisAxesRedrawingjintintID; // cache method id
 jmethodID jintcreateLabeljintintjintintID; // cache method id
 jmethodID jintcreateNewFigureWithAxesID; // cache method id
-jmethodID jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanID; // cache method id
+jmethodID jintcreateFigurejbooleanbooleanjintintjintintjbooleanbooleanjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjbooleanbooleanjbooleanbooleanID; // cache method id
 jmethodID voidcloneMenusjintintjintintID; // cache method id
 jmethodID jintcloneAxesModeljintintID; // cache method id
 jmethodID jintcreateSubWinjintintID; // cache method id
@@ -175,7 +175,7 @@ static int createLabel(JavaVM * jvm_, int parent, int type);
 
 static int createNewFigureWithAxes(JavaVM * jvm_);
 
-static int createFigure(JavaVM * jvm_, bool dockable, int menubarType, int toolbarType, bool defaultAxes, bool visible);
+static int createFigure(JavaVM * jvm_, bool dockable, int menubarType, int toolbarType, bool defaultAxes, bool visible, double const* figureSize, int figureSizeSize, double const* axesSize, int axesSizeSize, double const* position, int positionSize, bool menubar, bool toolbar, bool infobar);
 
 static void cloneMenus(JavaVM * jvm_, int model, int newParent);
 
index 23c3ab9..a1acb2e 100644 (file)
           <parameter name="toolbarType" type="int" />
           <parameter name="defaultAxes" type="boolean" />
           <parameter name="visible" type="boolean" />
+          <parameter name="figureSize" type="double[]" />
+          <parameter name="axesSize" type="double[]" />
+          <parameter name="position" type="double[]" />
+          <parameter name="menubar" type="boolean" />
+          <parameter name="toolbar" type="boolean" />
+          <parameter name="infobar" type="boolean" />
         </method>
         <method name="cloneMenus" returnType="void" modifier="static">
             <parameter name="model" type="int"/>
index 306f404..aa34212 100644 (file)
@@ -36,7 +36,8 @@
 #include "addColor.h"
 
 /*--------------------------------------------------------------------------*/
-int setDefaultProperties(int _iFig, BOOL bDefaultAxes);
+int setDefaultProperties(int _iFig, BOOL bDefaultAxes, BOOL _axesSize);
+int getStackArgumentAsBoolean(void* _pvCtx, int* _piAddr);
 /*--------------------------------------------------------------------------*/
 int sci_figure(char * fname, unsigned long fname_len)
 {
@@ -54,6 +55,12 @@ int sci_figure(char * fname, unsigned long fname_len)
     BOOL bVisible = TRUE; // Create a visible figure by default
     BOOL bDockable = TRUE; // Create a dockable figure by default
     BOOL bDefaultAxes = TRUE; // Create an Axes by default
+    double* figureSize = NULL;
+    double* axesSize = NULL;
+    double* position = NULL;
+    BOOL bMenuBar = TRUE;
+    BOOL bToolBar = TRUE;
+    BOOL bInfoBar = TRUE;
     int iMenubarType = 1; // Create a 'figure' menubar by default
     int iToolbarType = 1; // Create a 'figure' toolbar by default
     double dblId = 0;
@@ -68,7 +75,7 @@ int sci_figure(char * fname, unsigned long fname_len)
     if (iRhs == 0) // Auto ID
     {
         iFig = createNewFigureWithAxes();
-        iAxes = setDefaultProperties(iFig, TRUE);
+        iAxes = setDefaultProperties(iFig, TRUE, TRUE);
         createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iFig));
         AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
         ReturnArguments(pvApiCtx);
@@ -106,7 +113,7 @@ int sci_figure(char * fname, unsigned long fname_len)
         {
             iFig = createNewFigureWithAxes();
             setGraphicObjectProperty(iFig, __GO_ID__, &iId, jni_int,  1);
-            iAxes = setDefaultProperties(iFig, TRUE);
+            iAxes = setDefaultProperties(iFig, TRUE, TRUE);
         }
 
         createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iFig));
@@ -151,7 +158,7 @@ int sci_figure(char * fname, unsigned long fname_len)
         iFig = getFigureFromIndex(iId);
         if (iFig != 0) // Figure already exists
         {
-            bDoCreation = TRUE;
+            bDoCreation = FALSE;
         }
     }
 
@@ -160,7 +167,6 @@ int sci_figure(char * fname, unsigned long fname_len)
         int* piAddrProp = NULL;
         char* pstProName = NULL;
         int* piAddrData = NULL;
-        char* pstPropVal = NULL;
         for (i = iPos + 1 ; i <= iRhs ; i += 2)
         {
             //get property name
@@ -176,15 +182,23 @@ int sci_figure(char * fname, unsigned long fname_len)
                 Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, i);
                 return 1;
             }
-            if (stricmp(pstProName, "dockable") != 0
-                    && stricmp(pstProName, "toolbar") != 0
-                    && stricmp(pstProName, "menubar") != 0
-                    && stricmp(pstProName, "default_axes") != 0
-                    && stricmp(pstProName, "visible") != 0 )
+
+            if (stricmp(pstProName, "dockable") != 0 &&
+                    stricmp(pstProName, "toolbar") != 0 &&
+                    stricmp(pstProName, "menubar") != 0 &&
+                    stricmp(pstProName, "default_axes") != 0 &&
+                    stricmp(pstProName, "visible") != 0 &&
+                    stricmp(pstProName, "figure_size") != 0 &&
+                    stricmp(pstProName, "axes_size") != 0 &&
+                    stricmp(pstProName, "position") != 0 &&
+                    stricmp(pstProName, "menubar_visible") != 0 &&
+                    stricmp(pstProName, "toolbar_visible") != 0 &&
+                    stricmp(pstProName, "infobar_visible") != 0)
             {
                 freeAllocatedSingleString(pstProName);
                 continue;
             }
+
             //get address of value on stack
             sciErr = getVarAddressFromPosition(pvApiCtx, i + 1, &piAddrData);
             if (sciErr.iErr)
@@ -192,37 +206,34 @@ int sci_figure(char * fname, unsigned long fname_len)
                 Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i + 1);
                 return 1;
             }
-            if (getAllocatedSingleString(pvApiCtx, piAddrData, (char**)&pstPropVal))
-            {
-                Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, 3);
-                return 1;
-            }
+
             //check property value to compatibility
             if (stricmp(pstProName, "dockable") == 0)
             {
-                if (stricmp(pstPropVal, "on") == 0)
-                {
-                    bDockable = TRUE;
-                }
-                else if (stricmp(pstPropVal, "off") == 0)
-                {
-                    bDockable = FALSE;
-                }
-                else
+                bDockable = getStackArgumentAsBoolean(pvApiCtx, piAddrData);
+                if (bDockable == -1)
                 {
                     Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "dockable", "on", "off");
                     freeAllocatedSingleString(pstProName);
-                    freeAllocatedSingleString(pstPropVal);
                     return 1;
                 }
             }
             else if (stricmp(pstProName, "toolbar") == 0)
             {
-                if (stricmp(pstPropVal, "none") == 0)
+                char* pstVal = NULL;
+                if (isStringType(pvApiCtx, piAddrData) == FALSE || isScalar(pvApiCtx, piAddrData) == FALSE)
+                {
+                    Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, i);
+                    freeAllocatedSingleString(pstProName);
+                }
+
+                getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal);
+
+                if (stricmp(pstVal, "none") == 0)
                 {
                     iToolbarType = 0;
                 }
-                else if (stricmp(pstPropVal, "figure") == 0)
+                else if (stricmp(pstVal, "figure") == 0)
                 {
                     iToolbarType = 1;
                 }
@@ -230,17 +241,28 @@ int sci_figure(char * fname, unsigned long fname_len)
                 {
                     Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "toolbar", "none", "figure");
                     freeAllocatedSingleString(pstProName);
-                    freeAllocatedSingleString(pstPropVal);
+                    freeAllocatedSingleString(pstVal);
                     return 1;
                 }
+
+                freeAllocatedSingleString(pstVal);
             }
             else if (stricmp(pstProName, "menubar") == 0)
             {
-                if (stricmp(pstPropVal, "none") == 0)
+                char* pstVal = NULL;
+                if (isStringType(pvApiCtx, piAddrData) == FALSE || isScalar(pvApiCtx, piAddrData) == FALSE)
+                {
+                    Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, i + 1);
+                    freeAllocatedSingleString(pstProName);
+                }
+
+                getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal);
+
+                if (stricmp(pstVal, "none") == 0)
                 {
                     iMenubarType = 0;
                 }
-                else if (stricmp(pstPropVal, "figure") == 0)
+                else if (stricmp(pstVal, "figure") == 0)
                 {
                     iMenubarType = 1;
                 }
@@ -248,51 +270,123 @@ int sci_figure(char * fname, unsigned long fname_len)
                 {
                     Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "menubar", "none", "figure");
                     freeAllocatedSingleString(pstProName);
-                    freeAllocatedSingleString(pstPropVal);
+                    freeAllocatedSingleString(pstVal);
                     return 1;
                 }
+
+                freeAllocatedSingleString(pstVal);
             }
             else if (stricmp(pstProName, "default_axes") == 0)
             {
-                if (stricmp(pstPropVal, "on") == 0)
+                bDefaultAxes = getStackArgumentAsBoolean(pvApiCtx, piAddrData);
+                if (bDefaultAxes == -1)
                 {
-                    bDefaultAxes = TRUE;
+                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "default_axes", "on", "off");
+                    freeAllocatedSingleString(pstProName);
+                    return 1;
                 }
-                else if (stricmp(pstPropVal, "off") == 0)
+            }
+            else if (stricmp(pstProName, "visible") == 0)
+            {
+                bVisible = getStackArgumentAsBoolean(pvApiCtx, piAddrData);
+                if (bVisible == -1)
                 {
-                    bDefaultAxes = FALSE;
+                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "visible", "on", "off");
+                    freeAllocatedSingleString(pstProName);
+                    return 1;
                 }
-                else
+            }
+            else if (stricmp(pstProName, "figure_size") == 0)
+            {
+                int iRows = 0;
+                int iCols = 0;
+                if (isDoubleType(pvApiCtx, piAddrData) == FALSE)
                 {
-                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "default_axes", "on", "off");
-                    freeAllocatedSingleString(pstProName);
-                    freeAllocatedSingleString(pstPropVal);
+                    Scierror(999, _("%s: Wrong type for input argument #%d: A double vector expected.\n"), fname, i + 1);
+                    return 1;
+                }
+
+                getMatrixOfDouble(pvApiCtx, piAddrData, &iRows, &iCols, &figureSize);
+                if (iRows * iCols != 2)
+                {
+                    Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "figure_size", 2);
                     return 1;
                 }
             }
-            else if (stricmp(pstProName, "visible") == 0)
+            else if (stricmp(pstProName, "axes_size") == 0)
             {
-                if (stricmp(pstPropVal, "on") == 0)
+                int iRows = 0;
+                int iCols = 0;
+                if (isDoubleType(pvApiCtx, piAddrData) == FALSE)
                 {
-                    bVisible = TRUE;
+                    Scierror(999, _("%s: Wrong type for input argument #%d: A double vector expected.\n"), fname, i + 1);
+                    return 1;
                 }
-                else if (stricmp(pstPropVal, "off") == 0)
+
+                getMatrixOfDouble(pvApiCtx, piAddrData, &iRows, &iCols, &axesSize);
+                if (iRows * iCols != 2)
                 {
-                    bVisible = FALSE;
+                    Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "axes_size", 2);
+                    return 1;
                 }
-                else
+            }
+            else if (stricmp(pstProName, "position") == 0)
+            {
+                int iRows = 0;
+                int iCols = 0;
+                double* pdbl = NULL;
+                if (isDoubleType(pvApiCtx, piAddrData) == FALSE)
                 {
-                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "visible", "on", "off");
+                    Scierror(999, _("%s: Wrong type for input argument #%d: A double vector expected.\n"), fname, i + 1);
+                    return 1;
+                }
+
+                getMatrixOfDouble(pvApiCtx, piAddrData, &iRows, &iCols, &pdbl);
+                if (iRows * iCols != 4)
+                {
+                    Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "position", 4);
+                    return 1;
+                }
+
+                position = pdbl;
+                axesSize = (pdbl + 2);
+            }
+            else if (stricmp(pstProName, "menubar_visible") == 0)
+            {
+                bMenuBar = getStackArgumentAsBoolean(pvApiCtx, piAddrData);
+                if (bMenuBar == -1)
+                {
+                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "menubar_visible", "on", "off");
                     freeAllocatedSingleString(pstProName);
-                    freeAllocatedSingleString(pstPropVal);
                     return 1;
                 }
             }
-            freeAllocatedSingleString(pstPropVal);
+            else if (stricmp(pstProName, "toolbar_visible") == 0)
+            {
+                bToolBar = getStackArgumentAsBoolean(pvApiCtx, piAddrData);
+                if (bToolBar == -1)
+                {
+                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "toolbar_visible", "on", "off");
+                    freeAllocatedSingleString(pstProName);
+                    return 1;
+                }
+            }
+            else if (stricmp(pstProName, "infobar_visible") == 0)
+            {
+                bInfoBar = getStackArgumentAsBoolean(pvApiCtx, piAddrData);
+                if (bInfoBar == -1)
+                {
+                    Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected."), "infobar_visible", "on", "off");
+                    freeAllocatedSingleString(pstProName);
+                    return 1;
+                }
+            }
+
         }
-        iFig = createFigure(bDockable, iMenubarType, iToolbarType, bDefaultAxes, bVisible);
+
+        iFig = createFigure(bDockable, iMenubarType, iToolbarType, bDefaultAxes, bVisible, figureSize, axesSize, position, bMenuBar, bToolBar, bInfoBar);
         setGraphicObjectProperty(iFig, __GO_ID__, &iNewId, jni_int, 1);
-        iAxes = setDefaultProperties(iFig, bDefaultAxes);
+        iAxes = setDefaultProperties(iFig, bDefaultAxes, figureSize || axesSize ? FALSE : TRUE);
     }
 
     //set(iFig, iPos, iPos + 1)
@@ -321,16 +415,25 @@ int sci_figure(char * fname, unsigned long fname_len)
             return 1;
         }
 
-        if (bDoCreation &&
-                (stricmp(pstProName, "dockable") == 0 ||
-                 stricmp(pstProName, "menubar") == 0 ||
-                 stricmp(pstProName, "toolbar") == 0))
+        if (bDoCreation && (
+                    stricmp(pstProName, "dockable") == 0 ||
+                    stricmp(pstProName, "toolbar") == 0 ||
+                    stricmp(pstProName, "menubar") == 0 ||
+                    stricmp(pstProName, "default_axes") == 0 ||
+                    stricmp(pstProName, "visible") == 0 ||
+                    stricmp(pstProName, "figure_size") == 0 ||
+                    stricmp(pstProName, "axes_size") == 0 ||
+                    stricmp(pstProName, "position") == 0 ||
+                    stricmp(pstProName, "menubar_visible") == 0 ||
+                    stricmp(pstProName, "toolbar_visible") == 0 ||
+                    stricmp(pstProName, "infobar_visible") == 0))
         {
             // Already set creating new figure
             // but let the set_ function fail if figure already exists
             continue;
         }
 
+        sciprint("prop : %s\n", pstProName);
         //get address of value on stack
         sciErr = getVarAddressFromPosition(pvApiCtx, i + 1, &piAddrData);
         if (sciErr.iErr)
@@ -432,7 +535,42 @@ int sci_figure(char * fname, unsigned long fname_len)
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-int setDefaultProperties(int _iFig, BOOL _bDefaultAxes)
+int getStackArgumentAsBoolean(void* _pvCtx, int* _piAddr)
+{
+    if (isScalar(_pvCtx, _piAddr))
+    {
+        if (isDoubleType(_pvCtx, _piAddr))
+        {
+            double dbl = 0;
+            getScalarDouble(_pvCtx, _piAddr, &dbl);
+            return ((int)dbl == 0 ? FALSE : TRUE);
+        }
+        else if (isBooleanType(_pvCtx, _piAddr))
+        {
+            int i = 0;
+            getScalarBoolean(_pvCtx, _piAddr, &i);
+            return (i == 0 ? FALSE : TRUE);
+        }
+        else if (isStringType(_pvCtx, _piAddr))
+        {
+            int ret = 0;
+            char* pst = NULL;
+            getAllocatedSingleString(_pvCtx, _piAddr, &pst);
+
+            if (stricmp(pst, "on") == 0)
+            {
+                ret = TRUE;
+            }
+
+            freeAllocatedSingleString(pst);
+
+            return ret;
+        }
+    }
+    return -1;
+}
+/*--------------------------------------------------------------------------*/
+int setDefaultProperties(int _iFig, BOOL _bDefaultAxes, BOOL _axesSize)
 {
     //get figure axes
     int iAxes = -1;
@@ -464,8 +602,11 @@ int setDefaultProperties(int _iFig, BOOL _bDefaultAxes)
     }
 
     // axes_size
-    getGraphicObjectProperty(getFigureModel(), __GO_AXES_SIZE__, jni_int_vector, (void **)&piAxesSize);
-    setGraphicObjectProperty(_iFig, __GO_AXES_SIZE__, piAxesSize, jni_int_vector, 2);
+    if (_axesSize)
+    {
+        getGraphicObjectProperty(getFigureModel(), __GO_AXES_SIZE__, jni_int_vector, (void **)&piAxesSize);
+        setGraphicObjectProperty(_iFig, __GO_AXES_SIZE__, piAxesSize, jni_int_vector, 2);
+    }
 
     //f.immediate_drawing = "on"
     iDrawing = 1;
index c116b97..54853e4 100644 (file)
@@ -469,6 +469,7 @@ public final class SwingView implements GraphicView {
                 } else {
                     infoBar.setText(infoMessage);
                 }
+
                 tab.update(__GO_POSITION__, GraphicController.getController().getProperty(id, __GO_POSITION__));
 
                 String icon = (String)GraphicController.getController().getProperty(id, __GO_UI_ICON__);
index c38f364..1efb650 100644 (file)
@@ -105,8 +105,13 @@ public class SwingScilabCommonPanel {
                 if (localFigure.getToolbarAsEnum() == BarType.FIGURE) {
                     SwingScilabWindow parentWindow = SwingScilabWindow.allScilabWindows.get(component.getParentWindowId());
 
-                    //keep current delta between figure size and axes size
-                    component.storeSizeDelta();
+                    boolean currentVisible = localFigure.getToolbarVisible();
+
+                    //only if toolbar is visible
+                    if (currentVisible) {
+                        //keep current delta between figure size and axes size
+                        component.storeSizeDelta();
+                    }
 
                     ToolBar toolbar = ToolBarBuilder.buildToolBar(GRAPHICS_TOOLBAR_DESCRIPTOR, figureId);
                     toolbar.setVisible(localFigure.getToolbarVisible());
@@ -115,18 +120,16 @@ public class SwingScilabCommonPanel {
                     //force redraw to get good value on contentpane.getHeight
                     parentWindow.validate();
 
-                    //apply stored delta to new axes size
-                    component.applyDeltaSize();
+                    if (currentVisible) {
+                        //apply stored delta to new axes size
+                        component.applyDeltaSize();
+                    }
                 }
 
                 /* Update callback */
-                String closingCommand =
-                    "if (get_figure_handle(" + figureId + ") <> []) then"
-                    + "  if (get(get_figure_handle(" + figureId + "), 'event_handler_enable') == 'on') then"
-                    + "    execstr(get(get_figure_handle(" + figureId + "), 'event_handler')+'(" + figureId + ", -1, -1, -1000)', 'errcatch', 'm');"
-                    + "  end;"
-                    + "  delete(get_figure_handle(" + figureId + "));"
-                    + "end;";
+                String closingCommand = "if (get_figure_handle(" + figureId + ") <> []) then" + "  if (get(get_figure_handle(" + figureId + "), 'event_handler_enable') == 'on') then"
+                                        + "    execstr(get(get_figure_handle(" + figureId + "), 'event_handler')+'(" + figureId + ", -1, -1, -1000)', 'errcatch', 'm');" + "  end;" + "  delete(get_figure_handle("
+                                        + figureId + "));" + "end;";
                 component.setCallback(null);
                 component.setCallback(ScilabCloseCallBack.create(component.getId(), closingCommand));
                 /* Update menus callback */
@@ -140,6 +143,9 @@ public class SwingScilabCommonPanel {
                 if (oldFigureSize.getWidth() != 0 && oldFigureSize.getHeight() != 0 && ((oldFigureSize.getWidth() != size[0]) || (oldFigureSize.getHeight() != size[1]))
                         && ((Boolean) GraphicController.getController().getProperty(component.getId(), __GO_AUTORESIZE__))) {
                     figure.setDims(new Size(size[0], size[1]));
+                    figure.validate();
+                    GraphicController.getController().setProperty(component.getId(), __GO_AXES_SIZE__, new Integer[] { figure.getContentPane().getWidth(), figure.getContentPane().getHeight() });
+
                 }
                 break;
             }