Fix some bugs about menus, their order and their parents. 02/9102/3
Vincent COUVERT [Fri, 21 Sep 2012 14:19:13 +0000 (16:19 +0200)]
To test:
test_run("gui", ["bug_4782_v5" "bug_4782" "uimenu"])
test_run("graphics", ["save_load", "save_load_v5"])

Change-Id: Id338f36fb6ab94aca601e648d685ce4ab6052e46

scilab/modules/graphics/macros/%h_save.sci
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java
scilab/modules/gui/tests/nonreg_tests/bug_4782.dia.ref
scilab/modules/gui/tests/nonreg_tests/bug_4782.tst
scilab/modules/gui/tests/nonreg_tests/bug_4782_v5.dia.ref
scilab/modules/gui/tests/nonreg_tests/bug_4782_v5.tst
scilab/modules/io/macros/%_save.sci

index 8d6743f..d7961ef 100644 (file)
@@ -634,7 +634,7 @@ function save_graphichandle(h,fd)
     c=h.children;
     n=size(c,"*")
     mput(n,"il",fd)
-    for k=1:n
+    for k=n:-1:1
       save_graphichandle(c(k),fd)
     end
     
@@ -644,7 +644,7 @@ function save_graphichandle(h,fd)
     c=h.children;
     n=size(c,"*")
     mput(n,"il",fd)
-    for k=1:n
+    for k=n:-1:1
       save_graphichandle(c(k),fd)
     end
     
index bce37ce..5e85521 100644 (file)
@@ -36,8 +36,8 @@ import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProp
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_ENABLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTANGLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTNAME__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTUNITS__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTSIZE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTUNITS__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FONTWEIGHT__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FOREGROUNDCOLOR__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_UI_FRAME__;
@@ -641,7 +641,12 @@ public final class SwingView implements GraphicView {
                 TypedObject updatedObject = allObjects.get(id);
                 switch (updatedObject.getType()) {
                     case UiParentMenu:
+                        SwingScilabMenu meAsAMenu = (SwingScilabMenu) updatedObject.getValue();
+                        Container parent = meAsAMenu.getParent();
+                        parent.remove(meAsAMenu);
                         allObjects.put(id, CreateObjectFromType(__GO_UICHECKEDMENU__, id));
+                        SwingScilabCheckBoxMenuItem meAsAMenuItem = (SwingScilabCheckBoxMenuItem) allObjects.get(id).getValue();
+                        parent.add(meAsAMenuItem);
                         registeredObject = allObjects.get(id);
                         break;
                     case UiChildMenu:
@@ -731,6 +736,7 @@ public final class SwingView implements GraphicView {
                     switch (childAsTypedObject.getType()) {
                         case UiChildMenu:
                         case UiCheckedMenu:
+                            allObjects.remove(childId);
                             allObjects.put(childId, CreateObjectFromType(__GO_UIPARENTMENU__, childId));
                             ((Container) ((SwingScilabTab) updatedComponent).getMenuBar().getAsSimpleMenuBar()).add((SwingScilabMenu) allObjects.get(childId).getValue());
                             break;
@@ -974,6 +980,7 @@ public final class SwingView implements GraphicView {
                                     ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabCheckBoxMenuItem) allObjects.get(childId).getValue());
                                     break;
                                 default: /* UiParentMenu */
+                                    System.out.println("childAsTypedObject.getType() = UiParentMenu");
                                     ((SwingScilabMenu) allObjects.get(id).getValue()).add((SwingScilabMenu) allObjects.get(childId).getValue());
                                     break;
                             }
@@ -989,7 +996,10 @@ public final class SwingView implements GraphicView {
                                     updatedMenu.add((SwingScilabCheckBoxMenuItem) allObjects.get(childId).getValue());
                                     break;
                                 default: /* UiParentMenu */
-                                    updatedMenu.add((SwingScilabMenu) allObjects.get(childId).getValue());
+                                    /* Java can not add a JMenu in a JMenu */
+                                    /* We need to convert the child into a MenuItem */
+                                    allObjects.put(childId, CreateObjectFromType(__GO_UIMENU__, childId));
+                                    updatedMenu.add((SwingScilabMenuItem) allObjects.get(childId).getValue());
                                     break;
                             }
                             break;
index 632fe8d..af5394e 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2012 - Scilab Enterprises - Vincent COUVERT
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -25,6 +26,8 @@ Parent:
 Children: ["uimenu","uimenu"]
 // Before this bug fix, uicontextmenus were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", "h");
+child1label = get(h.children(1),"label");
+child2label = get(h.children(2),"label");
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
@@ -36,20 +39,25 @@ Parent:
 Children: ["uimenu","uimenu"]
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then bugmes();quit;end
-if get(h.children(1),"label")<>"foo1" then bugmes();quit;end
-if get(h.children(2),"label")<>"foo2" then bugmes();quit;end
-clear h h1 h2
+if get(h.children(1),"label")<>child1label then bugmes();quit;end
+if get(h.children(1),"label")<>"foo2" then bugmes();quit;end
+if get(h.children(2),"label")<>child2label then bugmes();quit;end
+if get(h.children(2),"label")<>"foo1" then bugmes();quit;end
+clear h hsave h1 h2 child1label child2label
 // Same test with uimenus (problems with children save/load before this fix)
 h = uimenu("Parent", gcf(), "Label", "parentuimenu");
 h1 = uimenu("Parent", h, "label", "uimenufoo1", "Callback", "disp hello");
 h2 = uimenu("Parent", h, "label", "uimenufoo2", "Callback", "disp coucou");
 // Before this bug fix, uimenus children were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", "h");
+hsave = h;
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then bugmes();quit;end
-if get(h.children(1),"label")<>"uimenufoo1" then bugmes();quit;end
-if get(h.children(2),"label")<>"uimenufoo2" then bugmes();quit;end
-clear h h1 h2
+if get(h.children(1),"label")<>get(hsave.children(1),"label") then bugmes();quit;end
+if get(h.children(1),"label")<>"uimenufoo2" then bugmes();quit;end
+if get(h.children(2),"label")<>get(hsave.children(2),"label") then bugmes();quit;end
+if get(h.children(2),"label")<>"uimenufoo1" then bugmes();quit;end
+clear h hsave h1 h2
index 6b94237..f7e80a4 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2012 - Scilab Enterprises - Vincent COUVERT
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -26,6 +27,8 @@ disp(h)
 
 // Before this bug fix, uicontextmenus were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", "h");
+child1label = get(h.children(1),"label");
+child2label = get(h.children(2),"label");
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
@@ -33,10 +36,12 @@ deletefile(TMPDIR + filesep() + "bug_4782.tmp");
 disp(h)
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then pause;end
-if get(h.children(1),"label")<>"foo1" then pause;end
-if get(h.children(2),"label")<>"foo2" then pause;end
+if get(h.children(1),"label")<>child1label then pause;end
+if get(h.children(1),"label")<>"foo2" then pause;end
+if get(h.children(2),"label")<>child2label then pause;end
+if get(h.children(2),"label")<>"foo1" then pause;end
 
-clear h h1 h2
+clear h hsave h1 h2 child1label child2label
 
 // Same test with uimenus (problems with children save/load before this fix)
 h = uimenu("Parent", gcf(), "Label", "parentuimenu");
@@ -45,13 +50,16 @@ h2 = uimenu("Parent", h, "label", "uimenufoo2", "Callback", "disp coucou");
 
 // Before this bug fix, uimenus children were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", "h");
+hsave = h;
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
 
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then pause;end
-if get(h.children(1),"label")<>"uimenufoo1" then pause;end
-if get(h.children(2),"label")<>"uimenufoo2" then pause;end
+if get(h.children(1),"label")<>get(hsave.children(1),"label") then pause;end
+if get(h.children(1),"label")<>"uimenufoo2" then pause;end
+if get(h.children(2),"label")<>get(hsave.children(2),"label") then pause;end
+if get(h.children(2),"label")<>"uimenufoo1" then pause;end
 
-clear h h1 h2
+clear h hsave h1 h2
index 7843e4e..85deda5 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2012 - Scilab Enterprises - Vincent COUVERT
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -26,6 +27,8 @@ Parent:
 Children: ["uimenu","uimenu"]
 // Before this bug fix, uicontextmenus were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", h);
+child1label = get(h.children(1),"label");
+child2label = get(h.children(2),"label");
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
@@ -37,20 +40,25 @@ Parent:
 Children: ["uimenu","uimenu"]
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then bugmes();quit;end
-if get(h.children(1),"label")<>"foo1" then bugmes();quit;end
-if get(h.children(2),"label")<>"foo2" then bugmes();quit;end
-clear h h1 h2
+if get(h.children(1),"label")<>child1label then bugmes();quit;end
+if get(h.children(1),"label")<>"foo2" then bugmes();quit;end
+if get(h.children(2),"label")<>child2label then bugmes();quit;end
+if get(h.children(2),"label")<>"foo1" then bugmes();quit;end
+clear h hsave h1 h2 child1label child2label
 // Same test with uimenus (problems with children save/load before this fix)
 h = uimenu("Parent", gcf(), "Label", "parentuimenu");
 h1 = uimenu("Parent", h, "label", "uimenufoo1", "Callback", "disp hello");
 h2 = uimenu("Parent", h, "label", "uimenufoo2", "Callback", "disp coucou");
 // Before this bug fix, uimenus children were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", h);
+hsave = h;
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then bugmes();quit;end
-if get(h.children(1),"label")<>"uimenufoo1" then bugmes();quit;end
-if get(h.children(2),"label")<>"uimenufoo2" then bugmes();quit;end
+if get(h.children(1),"label")<>get(hsave.children(1),"label") then bugmes();quit;end
+if get(h.children(1),"label")<>"uimenufoo2" then bugmes();quit;end
+if get(h.children(2),"label")<>get(hsave.children(2),"label") then bugmes();quit;end
+if get(h.children(2),"label")<>"uimenufoo1" then bugmes();quit;end
 clear h h1 h2
index b7caf59..2ca617e 100644 (file)
@@ -1,6 +1,7 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2012 - Scilab Enterprises - Vincent COUVERT
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
@@ -26,6 +27,8 @@ disp(h)
 
 // Before this bug fix, uicontextmenus were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", h);
+child1label = get(h.children(1),"label");
+child2label = get(h.children(2),"label");
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
@@ -33,10 +36,12 @@ deletefile(TMPDIR + filesep() + "bug_4782.tmp");
 disp(h)
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then pause;end
-if get(h.children(1),"label")<>"foo1" then pause;end
-if get(h.children(2),"label")<>"foo2" then pause;end
+if get(h.children(1),"label")<>child1label then pause;end
+if get(h.children(1),"label")<>"foo2" then pause;end
+if get(h.children(2),"label")<>child2label then pause;end
+if get(h.children(2),"label")<>"foo1" then pause;end
 
-clear h h1 h2
+clear h hsave h1 h2 child1label child2label
 
 // Same test with uimenus (problems with children save/load before this fix)
 h = uimenu("Parent", gcf(), "Label", "parentuimenu");
@@ -45,13 +50,16 @@ h2 = uimenu("Parent", h, "label", "uimenufoo2", "Callback", "disp coucou");
 
 // Before this bug fix, uimenus children were not be saved
 save(TMPDIR + filesep() + "bug_4782.tmp", h);
+hsave = h;
 clear h
 load(TMPDIR + filesep() + "bug_4782.tmp");
 deletefile(TMPDIR + filesep() + "bug_4782.tmp");
 
 // Check that children are saved and loaded in the same order
 if size(h.children,"*")<>2 then pause;end
-if get(h.children(1),"label")<>"uimenufoo1" then pause;end
-if get(h.children(2),"label")<>"uimenufoo2" then pause;end
+if get(h.children(1),"label")<>get(hsave.children(1),"label") then pause;end
+if get(h.children(1),"label")<>"uimenufoo2" then pause;end
+if get(h.children(2),"label")<>get(hsave.children(2),"label") then pause;end
+if get(h.children(2),"label")<>"uimenufoo1" then pause;end
 
 clear h h1 h2
index 9368e2b..6dd50e9 100644 (file)
@@ -732,7 +732,7 @@ function [] = %_save(%__filename__, varargin)
 
         for %__i__ = 1:size(fields, "*")
             if fields(%__i__) == "children" then
-                returneduimenu(fields(%__i__)) = extractMatrixHandle(h(fields(%__i__))($:-1:1));
+                returneduimenu(fields(%__i__)) = extractMatrixHandle(h(fields(%__i__)));
             else
                 returneduimenu(fields(%__i__)) = h(fields(%__i__));
             end
@@ -752,7 +752,7 @@ function [] = %_save(%__filename__, varargin)
 
         for %__i__ = 1:size(fields, "*")
             if fields(%__i__) == "children" then
-                returneduicontextmenu(fields(%__i__)) = extractMatrixHandle(h(fields(%__i__))($:-1:1));
+                returneduicontextmenu(fields(%__i__)) = extractMatrixHandle(h(fields(%__i__)));
             else
                 returneduicontextmenu(fields(%__i__)) = h(fields(%__i__));
             end
@@ -798,7 +798,7 @@ function [] = %_save(%__filename__, varargin)
 
         for %__i__ = 1:size(fields, "*")
             if fields(%__i__) == "children" then
-                returneduicontrol(fields(%__i__)) = extractMatrixHandle(h(fields(%__i__))($:-1:1));
+                returneduicontrol(fields(%__i__)) = extractMatrixHandle(h(fields(%__i__)));
             else
                 returneduicontrol(fields(%__i__)) = h(fields(%__i__));
             end