fix trouble on figure_id with non axes windows 44/13844/3
Antoine ELIAS [Wed, 26 Feb 2014 16:06:54 +0000 (17:06 +0100)]
Change-Id: I964ad60cf7e19b01e0aea7bef11499f321413a7e

scilab/modules/graphic_objects/includes/FigureList.h
scilab/modules/graphic_objects/src/cpp/FigureList.cpp
scilab/modules/graphics/src/c/BuildObjects.c
scilab/modules/graphics/src/c/getHandleProperty/get_current_axes_property.c
scilab/modules/gui/sci_gateway/c/sci_figure.c

index 211416d..a65f850 100644 (file)
 GRAPHIC_OBJECTS_IMPEXP int sciGetNbFigure(void);
 
 /**
+ * @return the next free figure id.
+ */
+GRAPHIC_OBJECTS_IMPEXP int getValidDefaultFigureId();
+
+/**
  * Fill the array Ids with all the figure ids currently used by Scilab.
  * @param ids should be as long as there are figures.
  */
index 950db78..8feaf78 100644 (file)
@@ -33,6 +33,11 @@ void sciGetFiguresId(int ids[])
     return ScilabView::getFiguresId(ids);
 }
 
+int getValidDefaultFigureId()
+{
+    return ScilabView::getValidDefaultFigureId();
+}
+
 BOOL sciIsExistingFigure(int id)
 {
     return (ScilabView::existsFigureId(id) == true ? TRUE : FALSE);
index fa86a0e..8f806bc 100644 (file)
@@ -73,7 +73,10 @@ GRAPHICS_IMPEXP int getOrCreateDefaultSubwin(void)
 
     if (iSubWinUID == 0)
     {
-        createNewFigureWithAxes();
+        int iNewId = getValidDefaultFigureId();
+        int iFig = createNewFigureWithAxes();
+        //set new figure id
+        setGraphicObjectProperty(iFig, __GO_ID__, &iNewId, jni_int, 1);
         // the current figure,
         iSubWinUID = getCurrentSubWin();
     }
index ce09350..379719f 100644 (file)
@@ -45,15 +45,7 @@ int get_current_axes_property(void* _pvCtx, int iObjUID)
         return -1;
     }
 
-    iSubWinUID = getCurrentSubWin();
-
-    if (iSubWinUID == 0)
-    {
-        iFigureUID = createNewFigureWithAxes();
-        setCurrentFigure(iFigureUID);
-    }
-
-
+    iSubWinUID = getOrCreateDefaultSubwin();
     return sciReturnHandle(_pvCtx, getHandle(getCurrentSubWin()));
 }
 /*------------------------------------------------------------------------*/
index d084ce2..e7d493b 100644 (file)
@@ -37,7 +37,6 @@
 /*--------------------------------------------------------------------------*/
 void setDefaultProperties(int _iFig);
 int addColor(int _iFig, double* _pdblColor);
-int cloneGDFWithId(int _iId);
 /*--------------------------------------------------------------------------*/
 int sci_figure(char * fname, unsigned long fname_len)
 {
@@ -68,32 +67,8 @@ int sci_figure(char * fname, unsigned long fname_len)
     // figure()
     if (iRhs == 0) // Auto ID
     {
-        //get highest value of winsid to create the new windows @ + 1
-        int nbFigure = sciGetNbFigure();
-
-        if (nbFigure)
-        {
-            int * ids = (int*)MALLOC(nbFigure * sizeof(int));
-
-            if (ids == NULL)
-            {
-                Scierror(999, _("%s: No more memory.\n"), fname);
-                return 0;
-            }
-            sciGetFiguresId(ids);
-
-            //find highest value
-            for (i = 0 ; i < nbFigure ; i++)
-            {
-                if (ids[i] > iNewId)
-                {
-                    iNewId = ids[i];
-                }
-            }
-        }
-        //use next value
-        iNewId = iNewId + 1;
-        iFig = cloneGDFWithId(iNewId);
+        iFig = createNewFigureWithAxes();
+        setDefaultProperties(iFig);
         createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iFig));
         AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
         ReturnArguments(pvApiCtx);
@@ -102,9 +77,6 @@ int sci_figure(char * fname, unsigned long fname_len)
 
     if (iRhs == 1)
     {
-        int iNewId = -1;
-        int iAxes = 0;
-        int* piAxes = &iAxes;
         //figure(x);
         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
         if (sciErr.iErr)
@@ -132,11 +104,11 @@ int sci_figure(char * fname, unsigned long fname_len)
         iFig = getFigureFromIndex(iId);
         if (iFig == 0) // Figure does not exists, create a new one
         {
-            iFig = cloneGDFWithId(iId);
+            iFig = createNewFigureWithAxes();
+            setGraphicObjectProperty(iFig, __GO_ID__, &iId, jni_int,  1);
+            setDefaultProperties(iFig);
         }
-        setCurrentFigure(iFig);
-        getGraphicObjectProperty(iFig, __GO_SELECTED_CHILD__, jni_int,  (void**)&piAxes);
-        setCurrentSubWin(iAxes);
+
         createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iFig));
         AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
         ReturnArguments(pvApiCtx);
@@ -147,31 +119,8 @@ int sci_figure(char * fname, unsigned long fname_len)
     if (iRhs % 2 == 0)
     {
         //get highest value of winsid to create the new windows @ + 1
-        int nbFigure = sciGetNbFigure();
+        iNewId = getValidDefaultFigureId();
         iPos = 0;
-
-        if (nbFigure)
-        {
-            int * ids = (int*)MALLOC(nbFigure * sizeof(int));
-
-            if (ids == NULL)
-            {
-                Scierror(999, _("%s: No more memory.\n"), fname);
-                return 0;
-            }
-            sciGetFiguresId(ids);
-
-            //find highest value
-            for (i = 0 ; i < nbFigure ; i++)
-            {
-                if (ids[i] > iNewId)
-                {
-                    iNewId = ids[i];
-                }
-            }
-        }
-        //use next value
-        iNewId = iNewId + 1;
     }
     else
     {
@@ -481,24 +430,6 @@ int sci_figure(char * fname, unsigned long fname_len)
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-int cloneGDFWithId(int _iID)
-{
-    int iAxes;
-    int *piAxes = &iAxes;
-    //create a new window with id = iNewId
-    int iFig = createNewFigureWithAxes();
-    setGraphicObjectProperty(iFig, __GO_ID__, &_iID, jni_int, 1);
-    setCurrentFigure(iFig);
-
-    getGraphicObjectProperty(iFig, __GO_SELECTED_CHILD__, jni_int,  (void**)&piAxes);
-    setCurrentSubWin(iAxes);
-
-    //setting up new figure
-    setDefaultProperties(iFig);
-
-    return iFig;
-}
-/*--------------------------------------------------------------------------*/
 void setDefaultProperties(int _iFig)
 {
     //get figure axes