* Bug #15072 fixed: The context was stored as a root diagram attribute instead of... 20/19220/2
Clément DAVID [Wed, 22 Mar 2017 13:20:23 +0000 (14:20 +0100)]
Change-Id: If6c998a91767015e9287f79c180cbf578ac0d732

14 files changed:
scilab/CHANGES.md
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/DebugLevelAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/SetContextAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/SetupAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/dialog/SetContextDialog.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/dialog/SetupDialog.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/ScicosParameters.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/XcosDiagramCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/DiagramElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/ScicosParametersElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/writer/CustomWriter.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/writer/RawDataWriter.java
scilab/modules/xcos/tests/nonreg_tests/bug_15072.tst [new file with mode: 0644]
scilab/modules/xcos/tests/nonreg_tests/bug_15072.zcos [new file with mode: 0644]

index 26938f4..e09babd 100644 (file)
@@ -365,7 +365,9 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15054](http://bugzilla.scilab.org/show_bug.cgi?id=15054): The callbacks of `wfir_gui()` were not prioritary.
 * [#15057](http://bugzilla.scilab.org/show_bug.cgi?id=15057): Matplot .data assignation did not take care of >2 dimension
 * [#15060](http://bugzilla.scilab.org/show_bug.cgi?id=15060): `fplot3d` did not draw because of an addition with an empty matrix which now returns an empty matrix.
-* [#15060](http://bugzilla.scilab.org/show_bug.cgi?id=15079): When all children of a graphic handle have not the same number of sub-children, any vectorized extraction or insertion in subchildren failed.
+* [#15072](http://bugzilla.scilab.org/show_bug.cgi?id=15072): The context was stored as a root diagram attribute instead of being stored on each Superblock layer.
+* [#15079](http://bugzilla.scilab.org/show_bug.cgi?id=15079): When all children of a graphic handle have not the same number of sub-children, any vectorized extraction or insertion in subchildren failed.
+
 
 ### Bugs fixed in 6.0.0:
 * [#592](http://bugzilla.scilab.org/show_bug.cgi?id=592): `linspace(a, b, n<=0)` returned `b` instead of `[]`
@@ -708,3 +710,4 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#14685](http://bugzilla.scilab.org/show_bug.cgi?id=14685): datavec produced an invalid index error.
 * [#14980] (http://bugzilla.scilab.org/show_bug.cgi?id=14980): The datatip display of the root locus arcs is broken.
 * [#14992] (http://bugzilla.scilab.org/show_bug.cgi?id=14992): `readgateway` has been removed, use `whereis` instead.
+
index 95ef2ed..1549cb4 100644 (file)
@@ -26,6 +26,7 @@ import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.actions.dialog.DebugLevelDialog;
 import org.scilab.modules.xcos.graph.ScicosParameters;
 import org.scilab.modules.xcos.graph.XcosDiagram;
+import org.scilab.modules.xcos.graph.model.ScicosObjectOwner;
 import org.scilab.modules.xcos.utils.XcosMessages;
 
 /**
@@ -110,7 +111,7 @@ public final class DebugLevelAction extends SimulationNotRunningAction {
             return;
         }
 
-        final DebugLevelDialog dialog = new DebugLevelDialog(graph.getAsComponent(), new ScicosParameters(Xcos.findRoot(graph)));
+        final DebugLevelDialog dialog = new DebugLevelDialog(graph.getAsComponent(), new ScicosParameters(Xcos.findRoot(graph), new ScicosObjectOwner(graph.getUID(), graph.getKind())));
 
         dialog.pack();
         dialog.setVisible(true);
index 3a1e60a..3fed9da 100644 (file)
@@ -22,10 +22,12 @@ import java.awt.event.ActionEvent;
 import org.scilab.modules.graph.ScilabComponent;
 import org.scilab.modules.graph.ScilabGraph;
 import org.scilab.modules.gui.menuitem.MenuItem;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.actions.dialog.SetContextDialog;
 import org.scilab.modules.xcos.graph.ScicosParameters;
 import org.scilab.modules.xcos.graph.XcosDiagram;
+import org.scilab.modules.xcos.graph.model.ScicosObjectOwner;
 import org.scilab.modules.xcos.utils.XcosMessages;
 
 /**
@@ -80,7 +82,8 @@ public final class SetContextAction extends SimulationNotRunningAction {
             return;
         }
 
-        final SetContextDialog dialog = new SetContextDialog(comp, graph, new ScicosParameters(Xcos.findRoot(graph)));
+        ScicosObjectOwner current = new ScicosObjectOwner(graph.getUID(), graph.getKind());
+        final SetContextDialog dialog = new SetContextDialog(comp, graph, new ScicosParameters(Xcos.findRoot(graph), current));
 
         dialog.pack();
         dialog.setVisible(true);
index 3cb9aa7..ded99c0 100644 (file)
@@ -26,6 +26,7 @@ import org.scilab.modules.xcos.Xcos;
 import org.scilab.modules.xcos.actions.dialog.SetupDialog;
 import org.scilab.modules.xcos.graph.ScicosParameters;
 import org.scilab.modules.xcos.graph.XcosDiagram;
+import org.scilab.modules.xcos.graph.model.ScicosObjectOwner;
 import org.scilab.modules.xcos.utils.XcosMessages;
 
 /**
@@ -80,7 +81,8 @@ public final class SetupAction extends SimulationNotRunningAction {
             return;
         }
 
-        final SetupDialog dialog = new SetupDialog(comp, graph, new ScicosParameters(Xcos.findRoot(graph)));
+        ScicosObjectOwner current = new ScicosObjectOwner(graph.getUID(), graph.getKind());
+        final SetupDialog dialog = new SetupDialog(comp, graph, new ScicosParameters(Xcos.findRoot(graph), current));
 
         dialog.pack();
         dialog.setVisible(true);
index 994d53d..9938abf 100644 (file)
@@ -24,6 +24,7 @@ import java.awt.Image;
 import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
 import java.beans.PropertyVetoException;
 import java.io.File;
 import java.io.FileWriter;
@@ -121,6 +122,7 @@ public class SetContextDialog extends JDialog {
 
         JButton cancelButton = new JButton(XcosMessages.CANCEL);
         JButton okButton = new JButton(XcosMessages.OK);
+        okButton.setMnemonic(KeyEvent.VK_ENTER);
         okButton.setPreferredSize(cancelButton.getPreferredSize());
 
         JPanel buttonPane = new JPanel();
index 07f02ba..adb5309 100644 (file)
@@ -233,7 +233,7 @@ public class SetupDialog extends JDialog {
     }
 
     private final ScicosParameters parameters;
-    private final XcosDiagram rootGraph;
+    private final XcosDiagram currentGraph;
 
     private JFormattedTextField integration;
     private JFormattedTextField rts;
@@ -264,7 +264,7 @@ public class SetupDialog extends JDialog {
         setTitle(XcosMessages.SETUP_TITLE);
         setModal(false);
         setLocationRelativeTo(parent);
-        rootGraph = graph;
+        currentGraph = graph;
         setDefaultCloseOperation(DISPOSE_ON_CLOSE);
         ScilabSwingUtilities.closeOnEscape(this);
 
@@ -510,7 +510,7 @@ public class SetupDialog extends JDialog {
         setContextButton.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
-                final SetContextDialog dialog = new SetContextDialog(SetupDialog.this, rootGraph, parameters);
+                final SetContextDialog dialog = new SetContextDialog(SetupDialog.this, currentGraph, parameters);
 
                 dialog.pack();
                 dialog.setVisible(true);
index f2c057d..ab679bb 100644 (file)
@@ -104,10 +104,15 @@ public class ScicosParameters implements Serializable, Cloneable {
     public static int DEFAULT_DEBUG_LEVEL;
 
     /**
-     * Reference to the diagram
+     * Reference to the root diagram
      */
     private final ScicosObjectOwner root;
 
+    /**
+     * Reference to the current diagram
+     */
+    private final ScicosObjectOwner current;
+
     /*
      * Beans support, used to follow instance modification and validate changes.
      */
@@ -117,10 +122,12 @@ public class ScicosParameters implements Serializable, Cloneable {
      * Default constructor
      *
      * Initialize parameters with their default values.
-     * @param diagramOwner the diagram
+     * @param root the root diagram
+     * @param current the current diagram
      */
-    public ScicosParameters(final ScicosObjectOwner diagramOwner) {
-        this.root = diagramOwner;
+    public ScicosParameters(final ScicosObjectOwner root, final ScicosObjectOwner current) {
+        this.root = root;
+        this.current = current;
 
         /*
          * This call will update static values from the configuration.
@@ -128,23 +135,21 @@ public class ScicosParameters implements Serializable, Cloneable {
         XcosOptions.getSimulation();
 
         // install the modification handler
-        if (diagramOwner.getKind() == Kind.DIAGRAM) {
-            vcs.addVetoableChangeListener((PropertyChangeEvent evt) -> {
-                Xcos xcos = Xcos.getInstance();
-                if (!xcos.openedDiagrams(diagramOwner).isEmpty()) {
-                    xcos.setModified(diagramOwner, true);
-                    xcos.openedDiagrams(diagramOwner).stream().forEach(d -> d.updateTabTitle());
-                }
-            });
-        }
+        vcs.addVetoableChangeListener((PropertyChangeEvent evt) -> {
+            Xcos xcos = Xcos.getInstance();
+            if (!xcos.openedDiagrams(root).isEmpty()) {
+                xcos.setModified(root, true);
+                xcos.openedDiagrams(root).stream().forEach(d -> d.updateTabTitle());
+            }
+        });
     }
 
-    public long getUID() {
-        return root.getUID();
+    public ScicosObjectOwner getRoot() {
+        return root;
     }
 
-    public Kind getKind() {
-        return root.getKind();
+    public ScicosObjectOwner getCurrent() {
+        return current;
     }
 
     /**
@@ -156,7 +161,7 @@ public class ScicosParameters implements Serializable, Cloneable {
      */
     public VectorOfDouble getProperties(final JavaController controller) {
         VectorOfDouble v = new VectorOfDouble(7);
-        controller.getObjectProperty(getUID(), getKind(), ObjectProperties.PROPERTIES, v);
+        controller.getObjectProperty(root.getUID(), root.getKind(), ObjectProperties.PROPERTIES, v);
         return v;
     }
 
@@ -173,7 +178,7 @@ public class ScicosParameters implements Serializable, Cloneable {
     public void setProperties(final JavaController controller, VectorOfDouble v) throws PropertyVetoException {
         VectorOfDouble oldValue = getProperties(controller);
         vcs.fireVetoableChange(FINAL_INTEGRATION_TIME_CHANGE, oldValue, v);
-        controller.setObjectProperty(getUID(), getKind(), ObjectProperties.PROPERTIES, v);
+        controller.setObjectProperty(root.getUID(), root.getKind(), ObjectProperties.PROPERTIES, v);
     }
 
     /**
@@ -181,7 +186,7 @@ public class ScicosParameters implements Serializable, Cloneable {
      */
     public VectorOfString getContext(final JavaController controller) {
         VectorOfString v = new VectorOfString();
-        controller.getObjectProperty(getUID(), getKind(), ObjectProperties.DIAGRAM_CONTEXT, v);
+        controller.getObjectProperty(current.getUID(), current.getKind(), ObjectProperties.DIAGRAM_CONTEXT, v);
         return v;
     }
 
@@ -198,7 +203,7 @@ public class ScicosParameters implements Serializable, Cloneable {
     public void setContext(final JavaController controller, VectorOfString v) throws PropertyVetoException {
         VectorOfString oldValue = getContext(controller);
         vcs.fireVetoableChange(CONTEXT_CHANGE, oldValue, v);
-        controller.setObjectProperty(getUID(), getKind(), ObjectProperties.DIAGRAM_CONTEXT, v);
+        controller.setObjectProperty(current.getUID(), current.getKind(), ObjectProperties.DIAGRAM_CONTEXT, v);
     }
 
     /**
@@ -208,7 +213,7 @@ public class ScicosParameters implements Serializable, Cloneable {
      */
     public String getVersion(final JavaController controller) {
         String[] v = new String[1];
-        controller.getObjectProperty(getUID(), getKind(), ObjectProperties.VERSION_NUMBER, v);
+        controller.getObjectProperty(root.getUID(), root.getKind(), ObjectProperties.VERSION_NUMBER, v);
         return v[0];
     }
 
@@ -217,7 +222,7 @@ public class ScicosParameters implements Serializable, Cloneable {
      */
     public int getDebugLevel(final JavaController controller) {
         int[] v = new int[1];
-        controller.getObjectProperty(getUID(), getKind(), ObjectProperties.DEBUG_LEVEL, v);
+        controller.getObjectProperty(root.getUID(), root.getKind(), ObjectProperties.DEBUG_LEVEL, v);
         return v[0];
     }
 
@@ -230,6 +235,6 @@ public class ScicosParameters implements Serializable, Cloneable {
     public void setDebugLevel(final JavaController controller, int debugLevel) throws PropertyVetoException {
         int oldValue = getDebugLevel(controller);
         vcs.fireVetoableChange(DEBUG_LEVEL_CHANGE, oldValue, debugLevel);
-        controller.setObjectProperty(getUID(), getKind(), ObjectProperties.DEBUG_LEVEL, debugLevel);
+        controller.setObjectProperty(root.getUID(), root.getKind(), ObjectProperties.DEBUG_LEVEL, debugLevel);
     }
 }
index 54b4274..c4d467b 100644 (file)
@@ -43,6 +43,7 @@ import com.mxgraph.io.mxCodec;
 import com.mxgraph.io.mxCodecRegistry;
 import com.mxgraph.model.mxGraphModel;
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.graph.model.ScicosObjectOwner;
 
 /**
  * Codec for an {@link org.scilab.modules.xcos.graph.XcosDiagram} instance.
@@ -187,7 +188,8 @@ public class XcosDiagramCodec extends ScilabGraphCodec {
         Field field;
         try {
             field = ScicosParameters.class.getDeclaredField(fieldname);
-            ScicosParameters params = new ScicosParameters(Xcos.findRoot((XcosDiagram) obj));
+            XcosDiagram d = (XcosDiagram) obj;
+            ScicosParameters params = new ScicosParameters(Xcos.findRoot(d), new ScicosObjectOwner(d.getUID(), d.getKind()));
             super.setFieldValue(params, fieldname, value);
         } catch (SecurityException e) {
             field = null;
index 4da6ea9..c429e40 100644 (file)
@@ -50,6 +50,7 @@ import com.mxgraph.model.mxGraphModel;
 import com.mxgraph.model.mxICell;
 import com.mxgraph.model.mxIGraphModel;
 import com.mxgraph.util.mxPoint;
+import org.scilab.modules.xcos.Xcos;
 
 /**
  * Perform a diagram transformation between Scicos and Xcos.
@@ -192,7 +193,7 @@ public final class DiagramElement extends AbstractElement<XcosDiagram> {
 
         // Fill the diagram attributes
         ScicosParametersElement params = new ScicosParametersElement(controller);
-        params.decode(base.get(1), new ScicosParameters(new ScicosObjectOwner(controller, diag.getUID(), diag.getKind())));
+        params.decode(base.get(1), new ScicosParameters(Xcos.findRoot(diag), new ScicosObjectOwner(diag.getUID(), diag.getKind())));
 
         // Decode the objs attributes
         decodeObjs(diag);
index 7579faa..f702791 100644 (file)
@@ -91,7 +91,7 @@ public final class ScicosParametersElement extends AbstractElement<ScicosParamet
         /*
          * fill data, if accessible
          */
-        if (local.getKind() == Kind.DIAGRAM) {
+        if (local.getCurrent().getKind() == Kind.DIAGRAM) {
             fillWithThirdFields(local);
 
             try {
index 56c620c..6420c23 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2015-2015 - Scilab Enterprises - Clement DAVID
+ * Copyright (C) 2017 - ESI Group - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -125,7 +126,7 @@ public class CustomWriter extends ScilabWriter {
         /*
          * encode some content then the children
          */
-        shared.rawDataWriter.write(uid, kind);
+        shared.rawDataWriter.writeContext(uid, kind);
 
         /*
          * Generate uniques but predictables UIDs
index 6e0dc0e..5786a8a 100644 (file)
@@ -82,7 +82,7 @@ public class RawDataWriter extends ScilabWriter {
         }
     }
 
-    private void writeContext(long uid, Kind kind) throws XMLStreamException {
+    public void writeContext(long uid, Kind kind) throws XMLStreamException {
         VectorOfString context = new VectorOfString();
         shared.controller.getObjectProperty(uid, kind, ObjectProperties.DIAGRAM_CONTEXT, context);
 
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_15072.tst b/scilab/modules/xcos/tests/nonreg_tests/bug_15072.tst
new file mode 100644 (file)
index 0000000..689920d
--- /dev/null
@@ -0,0 +1,33 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - ESI Group - Clement DAVID
+//
+// This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- XCOS TEST -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15072 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=15072
+//
+// <-- Short Description -->
+// the context was wrongly set to the parent diagram
+//
+
+scs_m = xcosDiagramToScilab(SCI+"/modules/xcos/tests/nonreg_tests/bug_15072.zcos");
+
+assert_checkequal(scs_m.props.context, ["parent = 1" ; "child1 = 0" ; "child2 = 0"]);
+assert_checkequal(scs_m.objs(1).model.rpar.props.context, "child1 = 1");
+assert_checkequal(scs_m.objs(2).model.rpar.props.context, "child2 = 1");
+
+xcosDiagramToScilab(TMPDIR+"/sample_after.zcos", scs_m);
+clear scs_m
+scs_m = xcosDiagramToScilab(TMPDIR+"/sample_after.zcos");
+
+assert_checkequal(scs_m.props.context, ["parent = 1" ; "child1 = 0" ; "child2 = 0"]);
+assert_checkequal(scs_m.objs(1).model.rpar.props.context, "child1 = 1");
+assert_checkequal(scs_m.objs(2).model.rpar.props.context, "child2 = 1");
+
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_15072.zcos b/scilab/modules/xcos/tests/nonreg_tests/bug_15072.zcos
new file mode 100644 (file)
index 0000000..d5010fe
Binary files /dev/null and b/scilab/modules/xcos/tests/nonreg_tests/bug_15072.zcos differ