Fix user_data for gda() + add test 85/14385/4
Vincent COUVERT [Thu, 10 Apr 2014 07:32:44 +0000 (09:32 +0200)]
Change-Id: I74b7069736f39e7b07e68d884a86155ecf3250f8

scilab/modules/graphic_objects/src/cpp/createGraphicObject.cpp
scilab/modules/graphics/tests/unit_tests/gda.dia.ref
scilab/modules/graphics/tests/unit_tests/gda.tst

index 87ff10b..f03007a 100644 (file)
@@ -125,6 +125,7 @@ int createFigure(int iDockable, int iMenubarType, int iToolbarType, int iDefault
     int* piUserDataSize = &iUserDataSize;
 
     id = Builder::createFigure(getScilabJavaVM(), iDockable != 0, iMenubarType, iToolbarType, iDefaultAxes != 0, iVisible != 0);
+
     //clone gdf user_data is needed
     getGraphicObjectProperty(getFigureModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
     if (iUserDataSize != 0)
@@ -153,7 +154,20 @@ void cloneMenus(int model, int newParent)
 
 int cloneAxesModel(int parent)
 {
-    return Builder::cloneAxesModel(getScilabJavaVM(), parent);
+    int id = Builder::cloneAxesModel(getScilabJavaVM(), parent);
+    int iUserDataSize = 0;
+    int* piUserDataSize = &iUserDataSize;
+
+    //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 createSubWin(int parent)
index 587dea7..c280920 100644 (file)
@@ -55,3 +55,8 @@ assert_checkequal(a.arc_drawing_method, "lines");
 assert_checkequal(a.clip_state, "off");
 assert_checkequal(a.clip_box, []);
 assert_checkequal(a.user_data, []);
+delete(gcf());
+set(gda(), "user_data", "test");
+clf();
+a=gca();
+assert_checkequal(a.user_data, "test");
index 62fabc2..41afe0d 100644 (file)
@@ -59,3 +59,9 @@ assert_checkequal(a.arc_drawing_method, "lines");
 assert_checkequal(a.clip_state, "off");
 assert_checkequal(a.clip_box, []);
 assert_checkequal(a.user_data, []);
+
+delete(gcf());
+set(gda(), "user_data", "test");
+clf();
+a=gca();
+assert_checkequal(a.user_data, "test");
\ No newline at end of file