Xcos: fix update of empty value for IOBlocks 61/1161/4
Clément DAVID [Tue, 29 Jun 2010 10:21:23 +0000 (12:21 +0200)]
Use PCS for parameter changes
Update and refresh them only if this is a valid value

/!\ This bug is fixed only with http://bugzilla.scilab.org/attachment.cgi?id=1818 applied to jgraphx.

Bug: 7396
Change-Id: If845bf809e03f6135a005cff34e10f34b651ab6a

13 files changed:
scilab/CHANGES_5.3.X
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/BasicBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ContextUpdate.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/EventInBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/EventOutBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ExplicitInBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ExplicitOutBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ImplicitInBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ImplicitOutBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/SuperBlockDiagram.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/utils/XcosEvent.java
scilab/modules/xcos/tests/nonreg_tests/bug_7396.tst [new file with mode: 0644]
scilab/modules/xcos/tests/nonreg_tests/bug_7396.xcos [new file with mode: 0644]

index 307b0cf..270eda9 100644 (file)
@@ -34,6 +34,9 @@ Bug Fixes:
 
 * bug 7183 fixed - update help file of link about the output argument.
 
+* bug 7396 fixed - On I/O blocks used in SuperBlocks, empty index threw a 
+                   decoding exception.
+
 * bug 7228 fixed - update help file of strcat about the third input argument.
 
 * bug 7282 fixed - eval failed on some functions without output arguments.
index c18f9da..c40f754 100644 (file)
@@ -90,6 +90,7 @@ import org.scilab.modules.xcos.utils.XcosEvent;
 import org.scilab.modules.xcos.utils.XcosMessages;
 
 import com.mxgraph.model.mxGeometry;
+import com.mxgraph.model.mxICell;
 import com.mxgraph.util.mxEventObject;
 import com.mxgraph.util.mxUtils;
 
@@ -1324,4 +1325,25 @@ public class BasicBlock extends ScilabGraphUniqueObject implements Serializable
                
                return clone;
        }
+       
+       /**
+        * Overriden to correct jgraphx bug fixed in 1.4.0.4
+        * 
+        * @param child the child to insert
+        * @return the previous child
+        * @see com.mxgraph.model.mxCell#insert(com.mxgraph.model.mxICell)
+        * @see http://www.jgraphsupport.co.uk/bugzilla/show_bug.cgi?id=39
+        * @deprecated Will be left after the switch to jgraphx >= 1.4.0.4
+        */
+       @Deprecated
+       @Override
+       public mxICell insert(mxICell child) {
+               int index = getChildCount();
+               
+               if (child.getParent() == this) {
+                       index--;
+               }
+               
+               return insert(child, index);
+       }
 }
index 49099de..5c57bb4 100644 (file)
@@ -12,6 +12,8 @@
 
 package org.scilab.modules.xcos.block.io;
 
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -23,6 +25,7 @@ import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement;
 import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement.InterpreterException;
 import org.scilab.modules.types.scilabTypes.ScilabDouble;
 import org.scilab.modules.types.scilabTypes.ScilabList;
+import org.scilab.modules.types.scilabTypes.ScilabType;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.block.SuperBlock;
 import org.scilab.modules.xcos.graph.SuperBlockDiagram;
@@ -35,10 +38,12 @@ import org.scilab.modules.xcos.port.input.ImplicitInputPort;
 import org.scilab.modules.xcos.port.output.ExplicitOutputPort;
 import org.scilab.modules.xcos.port.output.ImplicitOutputPort;
 import org.scilab.modules.xcos.utils.FileUtils;
+import org.scilab.modules.xcos.utils.XcosEvent;
 
 import com.mxgraph.model.mxGraphModel;
 import com.mxgraph.model.mxICell;
 import com.mxgraph.model.mxIGraphModel;
+import com.mxgraph.util.mxEventObject;
 
 /**
  * Common class for the SuperBlock I/O blocks (represent ports)
@@ -48,6 +53,62 @@ public abstract class ContextUpdate extends BasicBlock {
        private static final long serialVersionUID = 6076826729067963560L;
 
        /**
+        * Implement a listener which update the value and refresh the view when the
+        * index of the port change.
+        */
+       private static final class IndexChangeAdapter implements PropertyChangeListener {
+               private static IndexChangeAdapter instance;
+               
+               /**
+                * Default constructor.
+                */
+               private IndexChangeAdapter() { }
+               
+               /**
+                * @return the instance
+                */
+               public static synchronized IndexChangeAdapter getInstance() {
+                       if (instance == null) {
+                               instance = new IndexChangeAdapter();
+                       }
+                       return instance;
+               }
+               
+               /**
+                * Update the value and refresh the graph view.
+                * 
+                * @param evt the event
+                * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+                */
+               @Override
+               public void propertyChange(PropertyChangeEvent evt) {
+                       ScilabType data = (ScilabType) evt.getNewValue();
+                       ContextUpdate ioBlock = (ContextUpdate) evt.getSource();
+                       
+                       if (!data.isEmpty()) {
+                               int newIndex = (int) ((ScilabDouble) data).getRealPart()[0][0];
+                               
+                               int oldIndex;
+                               if (evt.getOldValue() instanceof ScilabDouble
+                                               && !((ScilabDouble) evt.getOldValue()).isEmpty()) {
+                                       oldIndex = (int) ((ScilabDouble) evt.getOldValue()).getRealPart()[0][0];
+                               } else {
+                                       oldIndex = -1;
+                               }
+                               
+                               ioBlock.setValue(newIndex);
+                               if (ioBlock.getParentDiagram() != null) {
+                                       ioBlock.getParentDiagram().fireEvent(
+                                                       new mxEventObject(XcosEvent.IO_PORT_VALUE_UPDATED,
+                                                                       "block", ioBlock, "oldIndex", oldIndex,
+                                                                       "newIndex", newIndex));
+                               }
+                       }
+               }
+               
+       }
+       
+       /**
         * This enum represent all the subclasses of ContextUpdate .
         * 
         * It is used to easily loop over a BasicBlock I/O blocks
@@ -169,12 +230,15 @@ public abstract class ContextUpdate extends BasicBlock {
                        return port;
                }
        }
-
+       
        /**
-        * Constructor
+        * Constructor.
         */
        public ContextUpdate() {
                super();
+               
+               getParametersPCS().addPropertyChangeListener("integerParameters",
+                               IndexChangeAdapter.getInstance());
        }
 
        /**
index ccbc76e..617cb99 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
+ * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
+ * Copyright (C) 2009-2010 - DIGITEO - Clément DAVID <clement.david@scilab.org>
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
-import org.scilab.modules.types.scilabTypes.ScilabDouble;
-import org.scilab.modules.types.scilabTypes.ScilabType;
-
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.utils.XcosConstants;
-import org.scilab.modules.xcos.utils.XcosEvent;
-
-import com.mxgraph.util.mxEventObject;
-
 /**
- * @author Antoine ELIAS
- *
+ * Implement an event entry point of a {@link org.scilab.modules.xcos.block.SuperBlock}.
  */
 public final class EventInBlock extends ContextUpdate {
 
-    private static final long serialVersionUID = 2799781225262685322L;
+       private static final long serialVersionUID = 2799781225262685322L;
 
        /**
         * Constructor
@@ -37,7 +28,8 @@ public final class EventInBlock extends ContextUpdate {
        }
 
        /**
-        * @param label block label
+        * @param label
+        *            block label
         */
        protected EventInBlock(String label) {
                this();
@@ -53,26 +45,4 @@ public final class EventInBlock extends ContextUpdate {
                setInterfaceFunctionName("CLKINV_f");
                setSimulationFunctionName("input");
        }
-    
-    public void setExprs(ScilabType exprs) {
-       super.setExprs(exprs);
-       //setValue(((ScilabString) getExprs()).getData()[0][0]);
-    }
-
-    public void updateBlockSettings(BasicBlock modifiedBlock) {
-
-       double oldValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-       super.updateBlockSettings(modifiedBlock);
-       double newValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-
-       if (oldValue != newValue) {
-           getParentDiagram().fireEvent(new mxEventObject(XcosEvent.IN_EVENT_VALUE_UPDATED, XcosConstants.EVENT_CHANGE_OLD,
-                   oldValue, XcosConstants.EVENT_CHANGE_NEW, newValue));
-       }
-    }
-
-    public void setIntegerParameters(ScilabType integerParameters) {
-       super.setIntegerParameters(integerParameters);
-       setValue((int) ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0]);
-    }
 }
index 9bd4b4c..0ca75bd 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
+ * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
+ * Copyright (C) 2009-2010 - DIGITEO - Clément DAVID <clement.david@scilab.org>
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
-import org.scilab.modules.types.scilabTypes.ScilabDouble;
-import org.scilab.modules.types.scilabTypes.ScilabType;
-
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.utils.XcosConstants;
-import org.scilab.modules.xcos.utils.XcosEvent;
-
-import com.mxgraph.util.mxEventObject;
-
 /**
- * @author Antoine ELIAS
- *
+ * Implement an event exit point of a {@link org.scilab.modules.xcos.block.SuperBlock}.
  */
 public final class EventOutBlock extends ContextUpdate {
 
@@ -53,26 +44,4 @@ public final class EventOutBlock extends ContextUpdate {
                setInterfaceFunctionName("CLKOUTV_f");
                setSimulationFunctionName("output");
        }
-
-    public void setExprs(ScilabType exprs) {
-       super.setExprs(exprs);
-       //setValue(((ScilabString) getExprs()).getData()[0][0]);
-    }
-
-    public void updateBlockSettings(BasicBlock modifiedBlock) {
-
-       double oldValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-       super.updateBlockSettings(modifiedBlock);
-       double newValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-
-       if (oldValue != newValue) {
-           getParentDiagram().fireEvent(new mxEventObject(XcosEvent.OUT_EVENT_VALUE_UPDATED, XcosConstants.EVENT_CHANGE_OLD,
-                   oldValue, XcosConstants.EVENT_CHANGE_NEW, newValue));
-       }
-    }
-
-    public void setIntegerParameters(ScilabType integerParameters) {
-       super.setIntegerParameters(integerParameters);
-       setValue((int) ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0]);
-    }
 }
index c345fae..ea6b4dd 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
+ * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
+ * Copyright (C) 2009-2010 - DIGITEO - Clément DAVID <clement.david@scilab.org>
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
-import org.scilab.modules.types.scilabTypes.ScilabDouble;
-import org.scilab.modules.types.scilabTypes.ScilabType;
-
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.utils.XcosConstants;
-import org.scilab.modules.xcos.utils.XcosEvent;
-
-import com.mxgraph.util.mxEventObject;
-
 /**
- * @author Antoine ELIAS
- *
+ * Implement an explicit input point of a {@link org.scilab.modules.xcos.block.SuperBlock}.
  */
 public final class ExplicitInBlock extends ContextUpdate {
 
@@ -53,29 +44,4 @@ public final class ExplicitInBlock extends ContextUpdate {
                setInterfaceFunctionName("IN_f");
                setSimulationFunctionName("input");
        }
-    
-    public void setExprs(ScilabType exprs) {
-       super.setExprs(exprs);
-    }
-
-    public void updateBlockSettings(BasicBlock modifiedBlock) {
-
-       double oldValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-       super.updateBlockSettings(modifiedBlock);
-       double newValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-
-       if (oldValue != newValue) {
-           getParentDiagram().fireEvent(new mxEventObject(XcosEvent.IN_EXPLICIT_VALUE_UPDATED, XcosConstants.EVENT_CHANGE_OLD,
-                   oldValue, XcosConstants.EVENT_CHANGE_NEW, newValue));
-       }
-    }
-
-    public void setIntegerParameters(ScilabType integerParameters) {
-       super.setIntegerParameters(integerParameters);
-       setValue((int) ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0]);
-       if (getParentDiagram() != null) {
-           getParentDiagram().refresh();
-       }
-    }
-
 }
index ca7047b..7e903a8 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
+ * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
+ * Copyright (C) 2009-2010 - DIGITEO - Clément DAVID <clement.david@scilab.org>
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
-import org.scilab.modules.types.scilabTypes.ScilabDouble;
-import org.scilab.modules.types.scilabTypes.ScilabType;
-
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.utils.XcosConstants;
-import org.scilab.modules.xcos.utils.XcosEvent;
-
-import com.mxgraph.util.mxEventObject;
-
 /**
- * @author Antoine ELIAS
- *
+ * Implement an explicit output point of a {@link org.scilab.modules.xcos.block.SuperBlock}.
  */
 public final class ExplicitOutBlock extends ContextUpdate {
 
@@ -53,26 +44,4 @@ public final class ExplicitOutBlock extends ContextUpdate {
                setInterfaceFunctionName("OUT_f");
                setSimulationFunctionName("output");
        }
-
-    public void setExprs(ScilabType exprs) {
-       super.setExprs(exprs);
-       //setValue(((ScilabString) getExprs()).getData()[0][0]);
-    }
-
-    public void updateBlockSettings(BasicBlock modifiedBlock) {
-
-       double oldValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-       super.updateBlockSettings(modifiedBlock);
-       double newValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-
-       if (oldValue != newValue) {
-           getParentDiagram().fireEvent(new mxEventObject(XcosEvent.OUT_EXPLICIT_VALUE_UPDATED, XcosConstants.EVENT_CHANGE_OLD,
-                   oldValue, XcosConstants.EVENT_CHANGE_NEW, newValue));
-       }
-    }
-
-    public void setIntegerParameters(ScilabType integerParameters) {
-       super.setIntegerParameters(integerParameters);
-       setValue((int) ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0]);
-    }
 }
index b5672ef..a266e57 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
+ * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
+ * Copyright (C) 2009-2010 - DIGITEO - Clément DAVID <clement.david@scilab.org>
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
-import org.scilab.modules.types.scilabTypes.ScilabDouble;
-import org.scilab.modules.types.scilabTypes.ScilabType;
-
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.utils.XcosConstants;
-import org.scilab.modules.xcos.utils.XcosEvent;
-
-import com.mxgraph.util.mxEventObject;
-
 /**
- * @author Antoine ELIAS
- *
+ * Implement an implicit input point of a {@link org.scilab.modules.xcos.block.SuperBlock}.
  */
 public final class ImplicitInBlock extends ContextUpdate {
 
@@ -53,26 +44,4 @@ public final class ImplicitInBlock extends ContextUpdate {
                setInterfaceFunctionName("INIMPL_f");
                setSimulationFunctionName("inimpl");
        }
-
-           public void setExprs(ScilabType exprs) {
-               super.setExprs(exprs);
-               //setValue(((ScilabString) getExprs()).getData()[0][0]);
-           }
-
-           public void updateBlockSettings(BasicBlock modifiedBlock) {
-
-               double oldValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-               super.updateBlockSettings(modifiedBlock);
-               double newValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-
-               if (oldValue != newValue) {
-                   getParentDiagram().fireEvent(new mxEventObject(XcosEvent.IN_IMPLICIT_VALUE_UPDATED, XcosConstants.EVENT_CHANGE_OLD,
-                           oldValue, XcosConstants.EVENT_CHANGE_NEW, newValue));
-               }
-           }
-
-           public void setIntegerParameters(ScilabType integerParameters) {
-               super.setIntegerParameters(integerParameters);
-               setValue((int) ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0]);
-           }
 }
index 7313247..e4dfc85 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
+ * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
+ * Copyright (C) 2009-2010 - DIGITEO - Clément DAVID <clement.david@scilab.org>
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
-import org.scilab.modules.types.scilabTypes.ScilabDouble;
-import org.scilab.modules.types.scilabTypes.ScilabType;
-
-import org.scilab.modules.xcos.block.BasicBlock;
-import org.scilab.modules.xcos.utils.XcosConstants;
-import org.scilab.modules.xcos.utils.XcosEvent;
-
-import com.mxgraph.util.mxEventObject;
 
 /**
- * @author Antoine ELIAS
- *
+ * Implement an implicit output point of a {@link org.scilab.modules.xcos.block.SuperBlock}.
  */
 public final class ImplicitOutBlock extends ContextUpdate {
 
@@ -53,26 +45,4 @@ public final class ImplicitOutBlock extends ContextUpdate {
                setInterfaceFunctionName("OUTIMPL_f");
                setSimulationFunctionName("outimpl");
        }
-
-    public void setExprs(ScilabType exprs) {
-       super.setExprs(exprs);
-       //setValue(((ScilabString) getExprs()).getData()[0][0]);
-    }
-
-    public void updateBlockSettings(BasicBlock modifiedBlock) {
-
-       double oldValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-       super.updateBlockSettings(modifiedBlock);
-       double newValue = ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0];
-
-       if (oldValue != newValue) {
-           getParentDiagram().fireEvent(new mxEventObject(XcosEvent.OUT_IMPLICIT_VALUE_UPDATED, XcosConstants.EVENT_CHANGE_OLD,
-                   oldValue, XcosConstants.EVENT_CHANGE_NEW, newValue));
-       }
-    }
-
-    public void setIntegerParameters(ScilabType integerParameters) {
-       super.setIntegerParameters(integerParameters);
-       setValue((int) ((ScilabDouble) getIntegerParameters()).getRealPart()[0][0]);
-    }
 }
index 6e66e8a..9926866 100644 (file)
@@ -111,24 +111,14 @@ public final class SuperBlockDiagram extends XcosDiagram implements Serializable
     }
     
     /**
-     * 
+     * Install the specific listeners for {@link SuperBlockDiagram}.
      */
     public void installSuperBlockListeners() {
        addListener(XcosEvent.CELLS_ADDED, GenericSuperBlockListener.getInstance());
 
        addListener(XcosEvent.CELLS_REMOVED, GenericSuperBlockListener.getInstance());
 
-       addListener(XcosEvent.IN_EXPLICIT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
-
-       addListener(XcosEvent.IN_IMPLICIT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
-
-       addListener(XcosEvent.IN_EVENT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
-
-       addListener(XcosEvent.OUT_EXPLICIT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
-
-       addListener(XcosEvent.OUT_IMPLICIT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
-
-       addListener(XcosEvent.OUT_EVENT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
+       addListener(XcosEvent.IO_PORT_VALUE_UPDATED, GenericSuperBlockListener.getInstance());
     }
 
     /**
index 6afdd66..e04cdcd 100644 (file)
@@ -12,6 +12,8 @@
 
 package org.scilab.modules.xcos.utils;
 
+import org.scilab.modules.xcos.block.SuperBlock;
+
 import com.mxgraph.util.mxEvent;
 
 /**
@@ -30,40 +32,11 @@ public final class XcosEvent extends mxEvent {
        public static final String FORCE_CELL_VALUE_UPDATE = "ForceCellValueUpdate";
 
        /**
-        * Fired when an {@link EventInputPort} as been updated by the user
-        */
-       public static final String IN_EVENT_VALUE_UPDATED = "InEventValueUpdated";
-
-       /**
-        * Fired when an
-        * {@link org.scilab.modules.xcos.port.input.ExplicitInputPort} as been
-        * updated by the user
-        */
-       public static final String IN_EXPLICIT_VALUE_UPDATED = "InExplicitValueUpdated";
-       /**
-        * Fired when an
-        * {@link org.scilab.modules.xcos.port.input.ImplicitInputPort} as been
-        * updated by the user
-        */
-       public static final String IN_IMPLICIT_VALUE_UPDATED = "InImplicitValueUpdated";
-       /**
-        * Fired when an {@link EventOutputPort} as been updated by the user
+        * Fired when a {@link SuperBlock} I/O block as been updated by the user
         */
-       public static final String OUT_EVENT_VALUE_UPDATED = "OutEventValueUpdated";
+       public static final String IO_PORT_VALUE_UPDATED = "IoPortValueUpdated";
 
        /**
-        * Fired when an
-        * {@link org.scilab.modules.xcos.port.output.ExplicitOutputPort} as been
-        * updated by the user
-        */
-       public static final String OUT_EXPLICIT_VALUE_UPDATED = "OutExplicitValueUpdated";
-       /**
-        * Fired when an
-        * {@link org.scilab.modules.xcos.port.output.ImplicitOutputPort} as been
-        * updated by the user
-        */
-       public static final String OUT_IMPLICIT_VALUE_UPDATED = "OutImplicitValueUpdated";
-       /**
         * Fired when an {@link org.scilab.modules.xcos.block.SuperBlock} as been
         * updated by the user
         */
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_7396.tst b/scilab/modules/xcos/tests/nonreg_tests/bug_7396.tst
new file mode 100644 (file)
index 0000000..0260367
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Clément DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH XCOS -->
+//
+// <-- Non-regression test for bug 7396 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7396
+//
+// <-- Short Description -->
+// On I/O blocks used in SuperBlocks, empty index throws a decoding exception.
+
+// perform a blocking decode operation
+importXcosDiagram(SCI + "/modules/xcos/tests/nonreg_tests/bug_7396.xcos");
+
diff --git a/scilab/modules/xcos/tests/nonreg_tests/bug_7396.xcos b/scilab/modules/xcos/tests/nonreg_tests/bug_7396.xcos
new file mode 100644 (file)
index 0000000..559f8af
Binary files /dev/null and b/scilab/modules/xcos/tests/nonreg_tests/bug_7396.xcos differ