fix bug 12305 : Legends could not be loaded from SOD file 79/10679/8
Antoine ELIAS [Mon, 4 Mar 2013 11:12:46 +0000 (12:12 +0100)]
Change-Id: I2e95a2a53c6ea3588714a92483a2b7c4fc407ac4

scilab/CHANGES_5.4.X
scilab/modules/io/macros/%_sodload.sci
scilab/modules/io/tests/nonreg_tests/bug_12305.tst [new file with mode: 0644]

index 50b4fe6..0856d95 100644 (file)
@@ -559,6 +559,8 @@ Bug fixes
 
 * Bug #12304 fixed - Undocking, redocking and undocking a graphic figure led to an exception.
 
+* Bug #12305 fixed - Legends could not be loaded from SOD files.
+
 * Bug #12307 fixed - ftp addresses were not handled in help browser.
 
 * Bug #12317 fixed - eventhandler functions no more reported keyboard events.
index ff6f7c4..5c82846 100644 (file)
@@ -74,7 +74,13 @@ function %_sodload(%__filename__, varargin)
         end
 
         for i = prod(matrixHandle.dims):-1:1
-            h($+1) = createSingleHandle(matrixHandle.values(i));
+
+            newItem = createSingleHandle(matrixHandle.values(i));
+            if newItem == [] then
+                continue;
+            end
+
+            h($+1) = newItem;
             if or(fieldnames(matrixHandle.values(i))=="user_data") then // TODO Remove after graphic branch merge
                 if isList(matrixHandle.values(i).user_data) then
                     set(h($), "user_data", parseList(matrixHandle.values(i).user_data));
@@ -83,7 +89,6 @@ function %_sodload(%__filename__, varargin)
                 end
             end
         end
-        h = matrix(h, matrixHandle.dims);
     endfunction
 
     function h = createSingleHandle(item)
@@ -211,6 +216,7 @@ function %_sodload(%__filename__, varargin)
     function h = createAxes(axesProperties)
         // Hack to determine whether %h_load has been called by the %h_copy macro
         // in which case a new Axes object is created
+
         [lnums, fnames] = where();
         ind = grep(fnames, '%h_copy');
         if ~isempty(ind) then
@@ -237,7 +243,7 @@ function %_sodload(%__filename__, varargin)
             if or(fields(i) == ["title","x_label","y_label","z_label"]) then
                 createLabel(axesProperties(fields(i)), h(fields(i)));
             elseif or(fields(i) == ["x_ticks", "y_ticks", "z_ticks"]) then
-                h(fields(i)) = createTicks(axesProperties(fields(i)));
+                set(h, fields(i), createTicks(axesProperties(fields(i))));
             elseif fields(i) == "children" then
                 createMatrixHandle(axesProperties(fields(i)));
             elseif fields(i) == "clip_state" then
@@ -290,6 +296,7 @@ function %_sodload(%__filename__, varargin)
             end
         end
         clearglobal %LEG
+
     endfunction
 
     //
@@ -627,12 +634,13 @@ function %_sodload(%__filename__, varargin)
     function h = createLegend(legendProperties)
         global %LEG
         %LEG = legendProperties;
-        endfunction
+        h = [];
+    endfunction
 
-        //
-        // TEXT
-        //
-        function h = createText(textProperties)
+    //
+    // TEXT
+    //
+    function h = createText(textProperties)
         fields = fieldnames(textProperties);
         fields(1) = [];
 
diff --git a/scilab/modules/io/tests/nonreg_tests/bug_12305.tst b/scilab/modules/io/tests/nonreg_tests/bug_12305.tst
new file mode 100644 (file)
index 0000000..344b653
--- /dev/null
@@ -0,0 +1,42 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Antoine ELIAS
+// Copyright (C) 2013 - Test case - Luc GABRIEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- TEST WITH GRAPHIC -->
+//
+// <-- INTERACTIVE TEST -->
+//
+// <-- Non-regression test for bug 12305 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12305
+//
+// <-- Short Description -->
+//  Legends could not be loaded from SOD file.
+//  Test : both graphics must have legends.
+
+// curve 1 => blue
+// curve 2 => red
+// curve 3 => green
+plot([1,2], [1,10], "b");
+plot([1,2], [1,20], "r");
+plot([1,2], [1,30], "g");
+labels = ["1", "2", "3"];
+legend(labels);
+
+// save and reload figure
+a = gca();
+save(fullfile(TMPDIR, "bug_12305.dat"), "a");
+clear a;
+f1 = scf(0);
+f2 = scf(1);
+load(fullfile(TMPDIR, "bug_12305.dat"), "a");
+
+xs2bmp(f1, TMPDIR + "/original.bmp");
+xs2bmp(f2, TMPDIR + "/restored.bmp");
+
+assert_checkequal(getmd5(TMPDIR + "/original.bmp"), getmd5(TMPDIR + "/restored.bmp"));