clone gda().user_data on clone axes 58/14158/4
Antoine ELIAS [Thu, 27 Mar 2014 10:39:10 +0000 (11:39 +0100)]
Change-Id: Ia31e07a03a4f0dc47fc2cbd3864809f7c37b7305

scilab/modules/graphic_objects/src/cpp/createGraphicObject.cpp
scilab/modules/graphics/sci_gateway/c/sci_newaxes.c

index c220001..98a865d 100644 (file)
@@ -17,6 +17,8 @@ extern "C"
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "FigureModel.h"
+#include "AxesModel.h"
+#include "CurrentSubwin.h"
 }
 
 #include "CallGraphicController.hxx"
@@ -94,6 +96,15 @@ int createNewFigureWithAxes()
         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
     }
 
+    //clone gda user_data is needed
+    getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
+    if (iUserDataSize != 0)
+    {
+        int* pUserData = NULL;
+        getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
+        setGraphicObjectProperty(getCurrentSubWin(), __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
+    }
+
     return id;
 }
 
@@ -111,7 +122,7 @@ int createFigure(int iDockable, int iMenubarType, int iToolbarType, int iDefault
                                iMenuBar != 0,
                                iToolBar != 0,
                                iInfoBar != 0);
-    //clone user_data is needed
+    //clone gdf user_data is needed
     getGraphicObjectProperty(getFigureModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
     if (iUserDataSize != 0)
     {
@@ -120,6 +131,15 @@ int createFigure(int iDockable, int iMenubarType, int iToolbarType, int iDefault
         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
     }
 
+    //clone gda user_data is needed
+    getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
+    if (iUserDataSize != 0)
+    {
+        int* pUserData = NULL;
+        getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
+        setGraphicObjectProperty(getCurrentSubWin(), __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
+    }
+
     return id;
 }
 
@@ -135,7 +155,22 @@ int cloneAxesModel(int parent)
 
 int createSubWin(int parent)
 {
-    return Builder::createSubWin(getScilabJavaVM(), parent);
+    int id = 0;
+    int iUserDataSize = 0;
+    int* piUserDataSize = &iUserDataSize;
+
+    id = Builder::createSubWin(getScilabJavaVM(), parent);
+
+    //clone user_data is needed
+    getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
+    if (iUserDataSize != 0)
+    {
+        int* pUserData = NULL;
+        getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
+        setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
+    }
+
+    return id;
 }
 
 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)
index ac9529a..47f6505 100644 (file)
@@ -49,17 +49,18 @@ int sci_newaxes(char * fname, unsigned long fname_len)
     int iParentStyle = -1;
     int *piParentStyle = &iParentStyle;
 
+    int iRhs = nbInputArgument(pvApiCtx);
 
     CheckInputArgument(pvApiCtx, 0, 1);
     CheckOutputArgument(pvApiCtx, 0, 1);
 
-    if (nbInputArgument(pvApiCtx) == 0)
+    if (iRhs == 0)
     {
         getOrCreateDefaultSubwin();
 
         if ((iSubwinUID = createSubWin (getCurrentFigure())) != 0)
         {
-            if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, getHandle(iSubwinUID)))
+            if (createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iSubwinUID)))
             {
                 printError(&sciErr, 0);
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
@@ -77,7 +78,7 @@ int sci_newaxes(char * fname, unsigned long fname_len)
     }
     else
     {
-        // NbInput Argument == 1
+        // iRhs == 1
         int* piAddr = NULL;
         int iType = 0;
 
@@ -114,14 +115,14 @@ int sci_newaxes(char * fname, unsigned long fname_len)
 
             if ((iSubwinUID = createSubWin(iParentUID)) != 0)
             {
-                if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, getHandle(iSubwinUID)))
+                if (createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iSubwinUID)))
                 {
                     printError(&sciErr, 0);
                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
                     return 1;
                 }
 
-                AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
+                AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
                 ReturnArguments(pvApiCtx);
             }
             else