* Avoid the figure function to add new functions in Scilab scope (create internal... 62/9262/3
Vincent COUVERT [Tue, 25 Sep 2012 11:15:47 +0000 (13:15 +0200)]
 * Fixes test for bug #3675. To test: test_run("gui", "bug_3675");

Change-Id: Ibf64e290427c434ec179117bc11cc77f7b408c66

scilab/modules/gui/macros/figure.sci
scilab/modules/gui/tests/nonreg_tests/bug_3675.dia.ref
scilab/modules/gui/tests/nonreg_tests/bug_3675.tst

index f898b0e..ac29313 100644 (file)
@@ -1,64 +1,14 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2005 - INRIA - Allan CORNET
 // Copyright (C) 2008 - INRIA - Vincent COUVERT (Java version of uicontrols)
-// 
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
 function h=figure(varargin)
-
-Rhs=length(varargin);
-
-if (Rhs == 0) then
-  // Create a new graphic window
-  h = scf();
-  setFigDefaultProperties(%f);
-else
-  if (Rhs == 1) then
-    
-    if size(varargin(1), "*")==1 then
-      // Create a new graphic window or set it (if already exists)
-      h = createOrSetFigure(varargin(1));
-    else
-      error(msprintf(gettext("%s: Wrong size for input argument #%d: A ''Figure'' handle or a real expected.\n")), "figure", 1);
-    end
-    
-  else
-    
-    if (modulo(Rhs,2)==0) then
-      // Even number of input arguments
-
-      // Create a new graphic window or set it (if already exists)
-      h = createOrSetFigure([]);
-       
-      // Set all properties
-      for i=1:2:Rhs
-       set(h, getFigureProperty(varargin(i)), getPropertyValue(varargin(i),varargin(i+1)));
-      end
-
-    else
-      // Odd number of input arguments
-      if size(varargin(1), "*")==1 then
-       // Create a new graphic window or set it (if already exists)
-       h = createOrSetFigure(varargin(1));
-
-       // Set all properties
-       for i=2:2:Rhs
-         set(h, getFigureProperty(varargin(i)), getPropertyValue(varargin(i),varargin(i+1)));
-       end
-      else
-       error(msprintf(gettext("%s: Wrong size for input argument #%d: A ''Figure'' handle or a real expected.\n")), "figure", 1);
-      end
-    end
-  end
-end
-
-endfunction
-// -----------------------------------------------------------
-
 // -----------------------------------------------------------
 function h = createOrSetFigure(numOrHandle)
 // Vincent COUVERT - INRIA 2008
@@ -66,17 +16,17 @@ function h = createOrSetFigure(numOrHandle)
 // The figure background is set to default for new figures
 
 if isempty(numOrHandle)
-  alreadyExists = %F;
+    alreadyExists = %F;
 elseif type(numOrHandle)==1 // Single value
-  alreadyExists = ~isempty(find(winsid()==numOrHandle));
+    alreadyExists = ~isempty(find(winsid()==numOrHandle));
 else // Handle
-  alreadyExists = ~isempty(find(winsid()==get(numOrHandle,"figure_id")));
+    alreadyExists = ~isempty(find(winsid()==get(numOrHandle,"figure_id")));
 end
 
 if isempty(numOrHandle)
-  h = scf();
+    h = scf();
 else
-  h=scf(numOrHandle);
+    h=scf(numOrHandle);
 end
 
 setFigDefaultProperties(alreadyExists);
@@ -90,11 +40,11 @@ function sciFigProperty = getFigureProperty(tkFigProperty)
 // Get the Java figure property corresponding to the TK figure property
 
 if strcmpi(tkFigProperty, "backgroundcolor") == 0 then
-  sciFigProperty = "background";
+    sciFigProperty = "background";
 elseif strcmpi(tkFigProperty, "foregroundcolor") == 0 then
-  sciFigProperty = "foreground";
+    sciFigProperty = "foreground";
 else
-  sciFigProperty = tkFigProperty;
+    sciFigProperty = tkFigProperty;
 end
 endfunction
 // -----------------------------------------------------------
@@ -105,11 +55,11 @@ function sciPropertyValue = getPropertyValue(tkFigProperty, tkPropertyValue)
 // Get the Java property value corresponding to the TK property value
 
 if strcmpi(tkFigProperty, "backgroundcolor") == 0 then
-  sciPropertyValue = addcolor(tkPropertyValue);
+    sciPropertyValue = addcolor(tkPropertyValue);
 elseif strcmpi(tkFigProperty, "foregroundcolor") == 0 then
-  sciPropertyValue = addcolor(tkPropertyValue);
+    sciPropertyValue = addcolor(tkPropertyValue);
 else
-  sciPropertyValue = tkPropertyValue;
+    sciPropertyValue = tkPropertyValue;
 end
 endfunction
 // -----------------------------------------------------------
@@ -128,9 +78,9 @@ axes = gca();
 set(curFig, "immediate_drawing", "off"); // to avoid canvas creation
 
 if ~alreadyExists
-  // Set the default background if figure has just been created (compatibility with versions < 5.0)
-  set(curFig,"background", addcolor(defaultColor));
-  set(axes, "background", addcolor(defaultColor)); // same as figure
+    // Set the default background if figure has just been created (compatibility with versions < 5.0)
+    set(curFig,"background", addcolor(defaultColor));
+    set(axes, "background", addcolor(defaultColor)); // same as figure
 end
 
 set(axes, "filled", "off"); // transparent axes so no need to display them
@@ -140,3 +90,53 @@ set(curFig, "immediate_drawing", "on"); // we can draw now
 
 endfunction
 // -----------------------------------------------------------
+
+Rhs=length(varargin);
+
+if (Rhs == 0) then
+    // Create a new graphic window
+    h = scf();
+    setFigDefaultProperties(%f);
+else
+    if (Rhs == 1) then
+        
+        if size(varargin(1), "*")==1 then
+            // Create a new graphic window or set it (if already exists)
+            h = createOrSetFigure(varargin(1));
+        else
+            error(msprintf(gettext("%s: Wrong size for input argument #%d: A ''Figure'' handle or a real expected.\n")), "figure", 1);
+        end
+        
+    else
+        
+        if (modulo(Rhs,2)==0) then
+            // Even number of input arguments
+
+            // Create a new graphic window or set it (if already exists)
+            h = createOrSetFigure([]);
+            
+            // Set all properties
+            for i=1:2:Rhs
+                set(h, getFigureProperty(varargin(i)), getPropertyValue(varargin(i),varargin(i+1)));
+            end
+
+        else
+            // Odd number of input arguments
+            if size(varargin(1), "*")==1 then
+                // Create a new graphic window or set it (if already exists)
+                h = createOrSetFigure(varargin(1));
+
+                // Set all properties
+                for i=2:2:Rhs
+                    set(h, getFigureProperty(varargin(i)), getPropertyValue(varargin(i),varargin(i+1)));
+                end
+            else
+                error(msprintf(gettext("%s: Wrong size for input argument #%d: A ''Figure'' handle or a real expected.\n")), "figure", 1);
+            end
+        end
+    end
+end
+
+endfunction
+// -----------------------------------------------------------
+
index 2d7dea1..8779787 100644 (file)
@@ -13,7 +13,6 @@
 //
 // <-- Short Description -->
 //    Scilab 5.0.2 has issues when saving/loading gui (uicontrols,figure...)
-warning("off");
 f=figure();
 h = uicontrol(f,"style","listbox", ..
     "position", [10 10 150 160],..
@@ -29,10 +28,12 @@ set(h, "string", "un|mot|accentué");
 // select item 1 and 3 in the list
 set(h, "value", [1 3]);
 // save
-save(TMPDIR + filesep() + "bug_3675.bin")
+save(TMPDIR + filesep() + "bug_3675.bin", "f", "h", "h2", "figure")
 // close the figure
 delete(f);
+assert_checkequal(size(winsid(), "*"), 0); // Check that saving the 'figure' function does not open a figure.
 // load and redisplay
+warning("off"); // Avoid warning about 'figure' function redefinition
 load(TMPDIR + filesep() + "bug_3675.bin");
 listbox = findobj("tag", "listbox_bug_3675");
-if or(get(listbox, "string") <> ["un","mot","accentué"]) then bugmes();quit;end
+assert_checkequal(get(listbox, "string"), ["un","mot","accentué"]);
index 45ac26c..2460237 100644 (file)
@@ -16,8 +16,6 @@
 // <-- Short Description -->
 //    Scilab 5.0.2 has issues when saving/loading gui (uicontrols,figure...)
 
-warning("off");
-
 f=figure();
 
 h = uicontrol(f,"style","listbox", ..
@@ -37,17 +35,16 @@ set(h, "string", "un|mot|accentué");
 set(h, "value", [1 3]);
 
 // save
-save(TMPDIR + filesep() + "bug_3675.bin")
+save(TMPDIR + filesep() + "bug_3675.bin", "f", "h", "h2", "figure")
 
 // close the figure
 delete(f);
 
+assert_checkequal(size(winsid(), "*"), 0); // Check that saving the 'figure' function does not open a figure.
+
 // load and redisplay
+warning("off"); // Avoid warning about 'figure' function redefinition
 load(TMPDIR + filesep() + "bug_3675.bin");
 
 listbox = findobj("tag", "listbox_bug_3675");
-if or(get(listbox, "string") <> ["un","mot","accentué"]) then pause; end
-
-
-
-
+assert_checkequal(get(listbox, "string"), ["un","mot","accentué"]);