Xcos MVC: Make 'model' display compliant with Scilab 5.5 and clone Diagram on 'rpar... 71/15271/5
Paul Bignier [Wed, 24 Sep 2014 12:57:09 +0000 (14:57 +0200)]
 * Superblocks' "rpar" can now be displayed
 * When setting a Diagram in 'rpar', clone it
 * Block port modification (for instance graphics.pin) is now well handled (encoded as index instead of value)

Change-Id: I5ec0ed4cd357ab36ad82eb5b5ae7882ef851b67b

scilab/modules/scicos/macros/scicos_scicos/%model_p.sci
scilab/modules/scicos/src/cpp/view_scilab/BaseAdapter.hxx
scilab/modules/scicos/src/cpp/view_scilab/ModelAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ParamsAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/TextAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ports_management.hxx
scilab/modules/scicos/tests/unit_tests/model/Diagram.dia.ref
scilab/modules/scicos/tests/unit_tests/model/SuperBlock.dia.ref [new file with mode: 0644]

index f5f3355..d99abc3 100644 (file)
@@ -35,8 +35,16 @@ function %model_p(model)
 
     fn=getfield(1,model)
     if size(fn, "*") > 4 then // Rule out the Annotations
-        if or(fn == "rpar") && typeof(model("rpar")) == "diagram" && type(model("rpar")) == 128 then // Do nothing if model("rpar") is already a mlist
-            model("rpar") = diagram2mlist(model("rpar"));
+        if or(fn == "rpar") && typeof(model("rpar")) == "diagram" then // Do nothing if model("rpar") is already a mlist
+            rpar = diagram2mlist(model("rpar"));
+            // Define a new model omitting 'rpar' because writing 'model.rpar=l' triggers cloning.
+            newModel = scicos_model( sim=model.sim,in=model.in,in2=model.in2,intyp=model.intyp,out=model.out,out2=model.out2,outtyp=model.outtyp,evtin=model.evtin,evtout=model.evtout,state=model.state,dstate=model.dstate,odstate=model.odstate,ipar=model.ipar,opar=model.opar,blocktype=model.blocktype,firing=model.firing,dep_ut=model.dep_ut,label=model.label,nzcross=model.nzcross,nmode=model.nmode,equations=model.equations,uid=model.uid );
+            newModel.rpar = rpar;
+
+            for k=3:size(fn,"*")
+                mprintf("%s\n", sci2exp(newModel(fn(k)),fn(k)))
+            end
+            return
         end
     end
     for k=3:size(fn,"*")
@@ -45,24 +53,26 @@ function %model_p(model)
 endfunction
 
 function ml = diagram2mlist(d)
-    ml = mlist(["diagram", "props", "objs", "version", "contrib"], d.props, d.objs, d.version, d.contrib);
+    ml = mlist(["diagram", "props", "objs", "version", "contrib"], d.props, [], d.version, d.contrib);
+    // Add 'objs' later to prevent cloning
+    ml.objs = d.objs;
 
     // Also convert the sub-blocks and sub-links
-    objs = ml.objs;
-    for k=1:size(objs)
-        select typeof(objs(k))
+    listObjs=list(ones(1, size(ml.objs)));
+    for k=1:size(ml.objs)
+        select typeof(ml.objs(k))
         case "Block" then
-            b = objs(k);
-            objs(k) = mlist(["Block", "graphics", "model", "gui", "doc"], b.graphics, b.model, b.gui, b.doc);
+            b = ml.objs(k);
+            listObjs(k) = mlist(["Block", "graphics", "model", "gui", "doc"], b.graphics, b.model, b.gui, b.doc);
         case "Link" then
-            l = objs(k);
-            objs(k) = mlist(["Link", "xx", "yy", "id", "thick", "ct", "from", "to"], l.xx, l.yy, l.id, l.thick, l.ct, l.from, l.to);
+            l = ml.objs(k);
+            listObjs(k) = mlist(["Link", "xx", "yy", "id", "thick", "ct", "from", "to"], l.xx, l.yy, l.id, l.thick, l.ct, l.from, l.to);
         case "Annotation" then
-            t = objs(k);
-            objs(k) = mlist(["Annotation", "graphics", "model", "void", "gui"], t.graphics, t.model, t.void, t.gui);
+            t = ml.objs(k);
+            listObjs(k) = mlist(["Annotation", "graphics", "model", "void", "gui"], t.graphics, t.model, t.void, t.gui);
         else
             error(msprintf(_("Wrong type for diagram element #%d: %s %s or %s expected.\n"), k, "Block", "Link", "Annotation"));
         end
     end
-    ml.objs = objs;
+    ml.objs = listObjs;
 endfunction
index 15b1233..947a145 100644 (file)
@@ -149,7 +149,7 @@ public:
         std::sort(properties.begin(), properties.end(), property<Adaptor>::original_index_cmp);
 
         // create the header
-        types::String* header = new types::String(1 + (int)properties.size(), 1);
+        types::String* header = new types::String(1, 1 + (int)properties.size());
         header->set(0, Adaptor::getSharedTypeStr().c_str());
         int index = 1;
         for (typename property<Adaptor>::props_t_it it = properties.begin(); it != properties.end(); ++it, ++index)
index ef1c4e5..6690bab 100644 (file)
@@ -25,6 +25,7 @@
 #include "ModelAdapter.hxx"
 #include "DiagramAdapter.hxx"
 #include "ports_management.hxx"
+#include "utilities.hxx"
 
 extern "C" {
 #include "sci_malloc.h"
@@ -407,8 +408,10 @@ struct odstate
     }
 };
 
-// When setting a diagram in 'rpar', the Superblock's ports must be consistent with the "port blocks" inside it.
-// By "port blocks", we mean IN_f, OUT_f, CLKIN_f, CLKOUT_f, CLKINV_f, CLKOUTV_f, INIMPL_f and OUTIMPL_f.
+/*
+ * When setting a diagram in 'rpar', the Superblock's ports must be consistent with the "port blocks" inside it.
+ * By "port blocks", we mean IN_f, OUT_f, CLKIN_f, CLKOUT_f, CLKINV_f, CLKOUTV_f, INIMPL_f and OUTIMPL_f.
+ */
 static bool setInnerBlocksRefs(ModelAdapter& adaptor, std::vector<ScicosID>& children, Controller& controller)
 {
     model::Block* adaptee = adaptor.getAdaptee();
@@ -431,7 +434,7 @@ static bool setInnerBlocksRefs(ModelAdapter& adaptor, std::vector<ScicosID>& chi
                 }
                 int portIndex = ipar[0];
 
-                // "input" and "output" are not enough to tell the event and data ports apart, so check the block's port.
+                // "name" is not enough to tell the event and data ports apart, so check the block's port.
                 object_properties_t kind;
                 std::vector<ScicosID> innerPort;
                 if (name == input || name == inimpl)
@@ -559,14 +562,16 @@ struct rpar
                 return false;
             }
 
-            // Extract its informations and stock them in the Block
+            // Translate 'v' to an DiagramAdapter and clone it, updating the new Diagram's children
             DiagramAdapter* diagram = v->getAs<DiagramAdapter>();
-            model::Diagram* subAdaptee = diagram->getAdaptee();
+            ScicosID clone = controller.cloneObject(diagram->getAdaptee()->id());
+            model::Diagram* newSubAdaptee = static_cast<model::Diagram*>(controller.getObject(clone));
+            DiagramAdapter* newDiagram = new DiagramAdapter(true, newSubAdaptee);
 
-            // Save the children list, adding the diagram ID at the beginning
+            // Save the children list, adding the new diagram ID at the beginning
             std::vector<ScicosID> children;
-            controller.getObjectProperty(subAdaptee->id(), subAdaptee->kind(), CHILDREN, children);
-            children.insert(children.begin(), subAdaptee->id());
+            controller.getObjectProperty(newSubAdaptee->id(), newSubAdaptee->kind(), CHILDREN, children);
+            children.insert(children.begin(), newSubAdaptee->id());
             controller.setObjectProperty(adaptee->id(), adaptee->kind(), CHILDREN, children);
 
             // Link the Superblock ports to their inner "port blocks"
index 2d46589..a1a894d 100644 (file)
@@ -125,7 +125,7 @@ struct tol
         model::Diagram* adaptee = adaptor.getAdaptee();
 
         double* data;
-        types::Double* o = new types::Double(7, 1, &data);
+        types::Double* o = new types::Double(1, 7, &data);
 
         std::vector<double> tol;
         controller.getObjectProperty(adaptee->id(), adaptee->kind(), PROPERTIES, tol);
index f6765c5..30f1fc9 100644 (file)
@@ -202,7 +202,7 @@ struct model
 
         // Return an empty "model"-typed mlist because this field isn't used.
         types::MList* o = new types::MList();
-        types::String* MListFields = new types::String(4, 1);
+        types::String* MListFields = new types::String(1, 4);
 
         MListFields->set(0, Model.c_str());
         MListFields->set(1, sim.c_str());
@@ -239,7 +239,7 @@ struct dummy_property
         (void) controller;
 
         // Return an empty matrix because this field isn't used.
-        return new types::Double(0, 0);
+        return types::Double::Empty();
     }
 
     static bool set(TextAdapter& adaptor, types::InternalType* v, Controller& controller)
index c4d6762..8b7b007 100644 (file)
@@ -315,9 +315,12 @@ inline bool fillNewPorts(std::vector<int>& newPorts, const std::vector<ScicosID>
             {
                 return false;
             }
+            *it = static_cast<int>(*d - 1); // 'd' contains indexes
         } // no check is performed for other properties as newPorts will contains value not index
-
-        *it = static_cast<int>(*d);
+        else
+        {
+            *it = static_cast<int>(*d);
+        }
     }
     return true;
 }
@@ -332,7 +335,7 @@ inline bool fillNewPorts(std::vector<int>& newPorts, const std::vector<ScicosID>
  * \param deletedObjects trash used to delete objects
  */
 template<typename Adaptor, object_properties_t p>
-inline void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
+inline bool updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
                           std::vector<ScicosID>& children, std::vector<ScicosID>& deletedObjects)
 {
     if (p == CONNECTED_SIGNALS)
@@ -342,7 +345,7 @@ inline void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
         controller.getObjectProperty(oldPort, PORT, CONNECTED_SIGNALS, oldSignal);
 
         ScicosID newSignal;
-        if (children.size() > 0)
+        if (children.size() > 0 && newPort >= 0)
         {
             newSignal = children[newPort];
         }
@@ -353,6 +356,11 @@ inline void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
 
         if (oldSignal != newSignal)
         {
+            if (oldSignal == 0)
+            {
+                // FIXME: The port was not linked, check if Link #newSignal has an unconnected end that is connectable to the port (Link kind)
+                return false;
+            }
             // disconnect the old link
             ScicosID oldSignalSrc;
             controller.getObjectProperty(oldSignal, LINK, SOURCE_PORT, oldSignalSrc);
@@ -394,12 +402,13 @@ inline void updateNewPort(ScicosID oldPort, int newPort, Controller& controller,
                 controller.getObjectProperty(oldPort, PORT, DATATYPE, datatype);
                 datatype[datatypeIndex] = newPort;
                 controller.setObjectProperty(oldPort, PORT, DATATYPE, datatype);
-                return;
+                return true;
             }
             default:
                 controller.setObjectProperty(oldPort, PORT, p, newPort);
         }
     }
+    return true;
 }
 
 /**
@@ -500,7 +509,10 @@ bool update_ports_property(const Adaptor& adaptor, object_properties_t port_kind
         int newPort = newPorts.back();
         newPorts.pop_back();
 
-        updateNewPort<Adaptor, p>(oldPort, newPort, controller, children, deletedObjects);
+        if (!updateNewPort<Adaptor, p>(oldPort, newPort, controller, children, deletedObjects))
+        {
+            return false;
+        }
     }
 
     // removed ports
index fa3edc8..37d7559 100644 (file)
@@ -25,7 +25,7 @@ scs_m.props
  ans  =
 wpar = []
 title = ["Untitled";""]
-tol = [0.000001;0.000001;1.0000D-10;100001;0;1;0]
+tol = [0.000001,0.000001,1.0000D-10,100001,0,1,0]
 tf = 100000
 context = 
 void1 = []
diff --git a/scilab/modules/scicos/tests/unit_tests/model/SuperBlock.dia.ref b/scilab/modules/scicos/tests/unit_tests/model/SuperBlock.dia.ref
new file mode 100644 (file)
index 0000000..0771f13
--- /dev/null
@@ -0,0 +1,506 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+loadXcosLibs();
+// Allocate a SuperBlock and access its fields
+sb = SUPER_f("define")
+objectCreated( 1 , DIAGRAM )
+propertyUpdated( 1 , DIAGRAM , TITLE ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , PATH ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , PROPERTIES ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , PROPERTIES ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , CONTEXT ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , CHILDREN ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , VERSION_NUMBER ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , TITLE ) : SUCCESS
+propertyUpdated( 1 , DIAGRAM , PATH ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , PROPERTIES ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , PROPERTIES ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , CONTEXT ) : NO_CHANGES
+objectCreated( 2 , BLOCK )
+propertyUpdated( 2 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 2 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , EXPRS ) : SUCCESS
+objectCreated( 3 , PORT )
+propertyUpdated( 3 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 3 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 2 , BLOCK , OUTPUTS ) : SUCCESS
+propertyUpdated( 2 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 2 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 3 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 3 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 3 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 2 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , IPAR ) : SUCCESS
+propertyUpdated( 2 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+propertyUpdated( 2 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 2 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , EXPRS ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 2 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , EXPRS ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 3 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 3 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 3 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 2 , BLOCK , STYLE ) : NO_CHANGES
+objectCreated( 4 , BLOCK )
+propertyUpdated( 4 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , EXPRS ) : SUCCESS
+objectCreated( 5 , PORT )
+propertyUpdated( 5 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 5 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 4 , BLOCK , INPUTS ) : SUCCESS
+propertyUpdated( 4 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 5 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 5 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 5 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 4 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 5 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 5 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 5 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 4 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , IPAR ) : SUCCESS
+propertyUpdated( 4 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+propertyUpdated( 4 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 4 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , EXPRS ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 5 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 5 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 5 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , EXPRS ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 5 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 5 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 5 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 4 , BLOCK , STYLE ) : NO_CHANGES
+objectCreated( 6 , BLOCK )
+propertyUpdated( 6 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+propertyUpdated( 6 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 6 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 6 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , IPAR ) : SUCCESS
+propertyUpdated( 6 , BLOCK , EXPRS ) : SUCCESS
+propertyUpdated( 6 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , INPUTS ) : NO_CHANGES
+objectCreated( 7 , PORT )
+propertyUpdated( 7 , PORT , FIRING ) : NO_CHANGES
+propertyUpdated( 7 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 7 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 7 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 7 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 7 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 7 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 7 , PORT , CONNECTED_SIGNALS ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , OUTPUTS ) : SUCCESS
+propertyUpdated( 6 , BLOCK , EVENT_INPUTS ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , EVENT_OUTPUTS ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , PARENT_BLOCK ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , CHILDREN ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , CHILDREN ) : NO_CHANGES
+propertyUpdated( 6 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
+propertyUpdated( 1 , DIAGRAM , CHILDREN ) : SUCCESS
+objectCreated( 8 , BLOCK )
+propertyUpdated( 8 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+propertyUpdated( 8 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 8 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 8 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , IPAR ) : SUCCESS
+propertyUpdated( 8 , BLOCK , EXPRS ) : SUCCESS
+propertyUpdated( 8 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
+objectCreated( 9 , PORT )
+propertyUpdated( 9 , PORT , FIRING ) : NO_CHANGES
+propertyUpdated( 9 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 9 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 9 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 9 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 9 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 9 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 9 , PORT , CONNECTED_SIGNALS ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , INPUTS ) : SUCCESS
+propertyUpdated( 8 , BLOCK , OUTPUTS ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , EVENT_INPUTS ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , EVENT_OUTPUTS ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , PARENT_BLOCK ) : NO_CHANGES
+propertyUpdated( 8 , BLOCK , CHILDREN ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , CHILDREN ) : SUCCESS
+propertyUpdated( 6 , BLOCK , PARENT_DIAGRAM ) : NO_CHANGES
+propertyUpdated( 1 , DIAGRAM , CHILDREN ) : SUCCESS
+propertyUpdated( 8 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
+propertyUpdated( 1 , DIAGRAM , CHILDREN ) : SUCCESS
+objectCreated( 10 , BLOCK )
+propertyUpdated( 10 , BLOCK , GEOMETRY ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 10 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , EXPRS ) : NO_CHANGES
+objectCreated( 11 , PORT )
+propertyUpdated( 11 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 11 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 10 , BLOCK , INPUTS ) : SUCCESS
+objectCreated( 12 , PORT )
+propertyUpdated( 12 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 12 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 10 , BLOCK , OUTPUTS ) : SUCCESS
+propertyUpdated( 10 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 11 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 12 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 11 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 12 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 11 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 12 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 10 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 11 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 12 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 10 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , DSTATE ) : NO_CHANGES
+objectCreated( 13 , DIAGRAM )
+propertyUpdated( 13 , DIAGRAM , TITLE ) : SUCCESS
+propertyUpdated( 13 , DIAGRAM , PATH ) : NO_CHANGES
+propertyUpdated( 13 , DIAGRAM , VERSION_NUMBER ) : NO_CHANGES
+propertyUpdated( 13 , DIAGRAM , PROPERTIES ) : NO_CHANGES
+propertyUpdated( 13 , DIAGRAM , CONTEXT ) : NO_CHANGES
+objectCreated( 14 , BLOCK )
+propertyUpdated( 14 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+propertyUpdated( 14 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 14 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 14 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , IPAR ) : SUCCESS
+propertyUpdated( 14 , BLOCK , EXPRS ) : SUCCESS
+propertyUpdated( 14 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
+propertyUpdated( 14 , BLOCK , INPUTS ) : NO_CHANGES
+objectCreated( 15 , PORT )
+propertyUpdated( 15 , PORT , FIRING ) : NO_CHANGES
+propertyUpdated( 15 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 15 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 15 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 15 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 15 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 15 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 15 , PORT , CONNECTED_SIGNALS ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , OUTPUTS ) : SUCCESS
+propertyUpdated( 14 , BLOCK , EVENT_INPUTS ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , EVENT_OUTPUTS ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , PARENT_BLOCK ) : NO_CHANGES
+propertyUpdated( 14 , BLOCK , CHILDREN ) : NO_CHANGES
+objectCreated( 16 , BLOCK )
+propertyUpdated( 16 , BLOCK , SIM_FUNCTION_API ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+propertyUpdated( 16 , BLOCK , SIM_FUNCTION_NAME ) : SUCCESS
+propertyUpdated( 16 , BLOCK , SIM_BLOCKTYPE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , STYLE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , GEOMETRY ) : SUCCESS
+propertyUpdated( 16 , BLOCK , ANGLE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , STATE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , DSTATE ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , RPAR ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , IPAR ) : SUCCESS
+propertyUpdated( 16 , BLOCK , EXPRS ) : SUCCESS
+propertyUpdated( 16 , BLOCK , PARENT_DIAGRAM ) : SUCCESS
+objectCreated( 17 , PORT )
+propertyUpdated( 17 , PORT , FIRING ) : NO_CHANGES
+propertyUpdated( 17 , PORT , PORT_KIND ) : SUCCESS
+propertyUpdated( 17 , PORT , IMPLICIT ) : NO_CHANGES
+propertyUpdated( 17 , PORT , STYLE ) : NO_CHANGES
+propertyUpdated( 17 , PORT , LABEL ) : NO_CHANGES
+propertyUpdated( 17 , PORT , DATATYPE ) : SUCCESS
+propertyUpdated( 17 , PORT , SOURCE_BLOCK ) : SUCCESS
+propertyUpdated( 17 , PORT , CONNECTED_SIGNALS ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , INPUTS ) : SUCCESS
+propertyUpdated( 16 , BLOCK , OUTPUTS ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , EVENT_INPUTS ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , EVENT_OUTPUTS ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , PARENT_BLOCK ) : NO_CHANGES
+propertyUpdated( 16 , BLOCK , CHILDREN ) : NO_CHANGES
+propertyUpdated( 13 , DIAGRAM , CHILDREN ) : SUCCESS
+propertyUpdated( 10 , BLOCK , CHILDREN ) : SUCCESS
+propertyUpdated( 14 , BLOCK , PORT_REFERENCE ) : SUCCESS
+propertyUpdated( 14 , BLOCK , PARENT_BLOCK ) : SUCCESS
+propertyUpdated( 16 , BLOCK , PORT_REFERENCE ) : SUCCESS
+propertyUpdated( 16 , BLOCK , PARENT_BLOCK ) : SUCCESS
+propertyUpdated( 10 , BLOCK , IPAR ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , SIM_BLOCKTYPE ) : SUCCESS
+propertyUpdated( 10 , BLOCK , SIM_DEP_UT ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , LABEL ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , NZCROSS ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , NMODE ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , UID ) : NO_CHANGES
+propertyUpdated( 10 , BLOCK , INTERFACE_FUNCTION ) : SUCCESS
+objectDeleted( 1 )
+objectDeleted( 2 )
+objectDeleted( 4 )
+sb  = 
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+sb.graphics
+ ans  =
+orig = [0,0]
+sz = [2,2]
+flip = %t
+theta = 0
+exprs = 
+pin = 0
+pout = 0
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = "E"
+out_implicit = "E"
+in_style = ""
+out_style = ""
+in_label = ""
+out_label = ""
+style = ""
+sb.model
+ ans  =
+super type: 0
+in = 1
+in2 = 1
+intyp = 1
+out = 1
+out2 = 1
+outtyp = 1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = mlist(["diagram","props","objs","version","contrib"],tlist(["params","wpar","title","tol","tf","context","void1","options","void2","void3","doc"],[],["Super Block";""],[0.000001,0.000001,1.0000D-10,100001,0,1,0],100000,..,[],tlist("scsopt"),[],[],list()),list(mlist(["Block","graphics","model","gui","doc"],mlist(["graphics","orig","sz","flip","theta","exprs","pin","pout","pein","peout","gr_i","id","in_implicit","out_implicit","in_style","out_style","in_label","out_label","style"],[40,40],[20,20],%t,0,"1",[],0,[],[],[],"",..,"E",..,"",..,"",""),mlist(["model","sim","in","in2","intyp","out","out2","outtyp","evtin","evtout","state","dstate","odstate","rpar","ipar","opar","blocktype","firing","dep_ut","label","nzcross","nmode","equations","uid"],"input",[],[],1,-1,-2,-1,[],[],[],[],list(),[],1,list(),"c",[],[%f,%f],"",0,0,list(),""),"IN_f",list()),mlist(["Block","graphics","model","gui","doc"],mlist(["graphics","orig","sz","flip","theta","exprs","pin","pout","pein","peout","gr_i","id","in_implicit","out_implicit","in_style","out_style","in_label","out_label","style"],[240,40],[20,20],%t,0,"1",0,[],[],[],[],"","E",..,"",..,"",..,""),mlist(["model","sim","in","in2","intyp","out","out2","outtyp","evtin","evtout","state","dstate","odstate","rpar","ipar","opar","blocktype","firing","dep_ut","label","nzcross","nmode","equations","uid"],"output",-1,-2,-1,[],[],1,[],[],[],[],list(),[],1,list(),"c",[],[%f,%f],"",0,0,list(),""),"OUT_f",list())),"",list())
+ipar = []
+opar = list()
+blocktype = "h"
+firing = []
+dep_ut = [%f,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
+sb.gui
+ ans  =
+ SUPER_f
+sb.doc
+ ans  =
+()
+// Access the contained diagram's fields
+diag = sb.model.rpar
+diag  = 
+scicos_diagram type :
+  props
+  objs
+  version
+  contrib
+diag.props
+ ans  =
+wpar = []
+title = ["Super Block";""]
+tol = [0.000001,0.000001,1.0000D-10,100001,0,1,0]
+tf = 100000
+context = 
+void1 = []
+options = tlist("scsopt")
+void2 = []
+void3 = []
+doc = list()
+objs = diag.objs
+objs  = 
+     (1)
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+     (2)
+scicos_Block type :
+  graphics
+  model
+  gui
+  doc
+objs(1).graphics
+ ans  =
+orig = [40,40]
+sz = [20,20]
+flip = %t
+theta = 0
+exprs = "1"
+pin = []
+pout = 0
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = 
+out_implicit = "E"
+in_style = 
+out_style = ""
+in_label = 
+out_label = ""
+style = ""
+objs(1).model
+ ans  =
+input type: 0
+in = []
+in2 = []
+intyp = 1
+out = -1
+out2 = -2
+outtyp = -1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = []
+ipar = 1
+opar = list()
+blocktype = "c"
+firing = []
+dep_ut = [%f,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
+objs(2).graphics
+ ans  =
+orig = [240,40]
+sz = [20,20]
+flip = %t
+theta = 0
+exprs = "1"
+pin = 0
+pout = []
+pein = []
+peout = []
+gr_i = []
+id = ""
+in_implicit = "E"
+out_implicit = 
+in_style = ""
+out_style = 
+in_label = ""
+out_label = 
+style = ""
+objs(2).model
+ ans  =
+output type: 0
+in = -1
+in2 = -2
+intyp = -1
+out = []
+out2 = []
+outtyp = 1
+evtin = []
+evtout = []
+state = []
+dstate = []
+odstate = list()
+rpar = []
+ipar = 1
+opar = list()
+blocktype = "c"
+firing = []
+dep_ut = [%f,%f]
+label = ""
+nzcross = 0
+nmode = 0
+equations = list()
+uid = ""
+diag.version
+ ans  =
+diag.contrib
+ ans  =
+()