Xcos MVC: add a color and grid to diagrams and superblocks 89/17289/4
Clément DAVID [Wed, 7 Oct 2015 13:27:22 +0000 (15:27 +0200)]
Change-Id: Id5c9c3b8ca8a93c01f11714ec8a412c183e64581

scilab/modules/scicos/includes/model/BaseObject.hxx
scilab/modules/scicos/src/cpp/Model_getObjectProperties.cpp
scilab/modules/scicos/src/cpp/Model_setObjectProperties.cpp
scilab/modules/scicos/src/cpp/model/Annotation.hxx
scilab/modules/scicos/src/cpp/model/Block.hxx
scilab/modules/scicos/src/cpp/model/Diagram.hxx
scilab/modules/scicos/src/cpp/model/Link.hxx
scilab/modules/scicos/src/cpp/model/Port.hxx
scilab/modules/scicos/src/cpp/view_scilab/GraphicsAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ModelAdapter.cpp
scilab/modules/scicos/src/cpp/view_scilab/ports_management.hxx

index 6b53220..d895802 100644 (file)
@@ -87,6 +87,7 @@ struct Geometry
     Geometry() : m_x(0), m_y(0), m_width(20), m_height(20) {};
     Geometry(const Geometry& g) : m_x(g.m_x), m_y(g.m_y), m_width(g.m_width), m_height(g.m_height) {};
     Geometry(const std::vector<double>& v) : m_x(v[0]), m_y(v[1]), m_width(v[2]), m_height(v[3]) {};
+    Geometry(std::initializer_list<double> l) : m_x(*l.begin()), m_y(*(l.begin() + 1)), m_width(*(l.begin() + 2)), m_height(*(l.begin() + 3)) {};
 
     void fill(std::vector<double>& v) const
     {
index 10507e7..529cd19 100644 (file)
@@ -517,14 +517,21 @@ bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std
             case IPAR:
                 o->getIpar(v);
                 return true;
+            case COLOR:
+                o->getChildrenColor(v);
+                return true;
             default:
                 break;
         }
     }
     else if (k == DIAGRAM)
     {
+        model::Diagram* o = static_cast<model::Diagram*>(baseObject);
         switch (p)
         {
+            case COLOR:
+                o->getColor(v);
+                return true;
             default:
                 break;
         }
@@ -552,7 +559,7 @@ bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std
     return false;
 }
 
-bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::vector<bool>& v) const
+bool Model::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::vector<bool>& /*v*/) const
 {
     model::BaseObject* baseObject = getObject(uid);
     if (baseObject == nullptr)
index 8e07d4e..1678ca3 100644 (file)
@@ -469,14 +469,19 @@ update_status_t Model::setObjectProperty(ScicosID uid, kind_t k, object_properti
                 return o->setNMode(v);
             case IPAR:
                 return o->setIpar(v);
+            case COLOR:
+                return o->setChildrenColor(v);
             default:
                 break;
         }
     }
     else if (k == DIAGRAM)
     {
+        model::Diagram* o = static_cast<model::Diagram*>(baseObject);
         switch (p)
         {
+            case COLOR:
+                return o->setColor(v);
             default:
                 break;
         }
@@ -503,7 +508,7 @@ update_status_t Model::setObjectProperty(ScicosID uid, kind_t k, object_properti
     return FAIL;
 }
 
-update_status_t Model::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, const std::vector<bool>& v)
+update_status_t Model::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, const std::vector<bool>& /*v*/)
 {
     model::BaseObject* baseObject = getObject(uid);
     if (baseObject == nullptr)
index 967bb34..86311da 100644 (file)
@@ -28,14 +28,8 @@ namespace model
 class Annotation: public BaseObject
 {
 public:
-    Annotation(): BaseObject(ANNOTATION), m_parentDiagram(ScicosID()), m_parentBlock(ScicosID()),
-        m_description(std::string("Text")), m_font(std::string("2")), m_font_size(std::string("1")), m_style(""), m_relatedTo(ScicosID())
-    {
-        std::vector<double> geom (4, 0);
-        geom[2] = 2;
-        geom[3] = 1;
-        m_geometry = Geometry(geom);
-    };
+    Annotation(): BaseObject(ANNOTATION), m_parentDiagram(ScicosID()), m_parentBlock(ScicosID()), m_geometry{0, 0, 2, 1},
+        m_description("Text"), m_font("2"), m_font_size("1"), m_style(""), m_relatedTo(ScicosID()) {};
     Annotation(const Annotation& o) : BaseObject(ANNOTATION), m_parentDiagram(o.m_parentDiagram), m_parentBlock(o.m_parentBlock), m_geometry(o.m_geometry),
         m_description(o.m_description), m_font(o.m_font), m_font_size(o.m_font_size), m_style(o.m_style), m_relatedTo(o.m_relatedTo) {};
     ~Annotation() = default;
index fc56932..f3080e4 100644 (file)
@@ -32,11 +32,7 @@ struct Parameter
     std::vector<double> opar;
 
     // opar default value is an empty list encoded by var2vec()
-    Parameter() : rpar(), ipar(), opar(2)
-    {
-        opar[0] = 22;
-        opar[1] = 0;
-    }
+    Parameter() : rpar(), ipar(), opar{22, 0} {}
 };
 
 struct State
@@ -46,11 +42,7 @@ struct State
     std::vector<double> odstate;
 
     // odstate default value is an empty list encoded by var2vec()
-    State() : state(), dstate(), odstate(2)
-    {
-        odstate[0] = 22;
-        odstate[1] = 0;
-    }
+    State() : state(), dstate(), odstate{22, 0} {}
 };
 
 /**
@@ -118,17 +110,12 @@ class Block: public BaseObject
 {
 public:
     Block() : BaseObject(BLOCK), m_parentDiagram(ScicosID()), m_interfaceFunction(), m_geometry(), m_angle(),
-        m_exprs(std::vector<double> (5, 0)), m_label(), m_style(), m_nzcross(std::vector<int> (1, 0)), m_nmode(std::vector<int> (1, 0)), m_equations(), m_uid(), m_sim(), m_in(), m_out(), m_ein(), m_eout(),
-        m_parameter(), m_state(), m_parentBlock(ScicosID()), m_children(), m_portReference(ScicosID())
-    {
-        // By default, 'm_exprs' takes the value of vec2var([]), which is {12, 2, 0, 0, 0}
-        m_exprs[0] = 12;
-        m_exprs[1] = 2;
-    };
+        m_exprs{12, 2, 0, 0, 0}, m_label(), m_style(), m_nzcross{0}, m_nmode{0}, m_equations(), m_uid(), m_sim(), m_in(), m_out(), m_ein(), m_eout(),
+        m_parameter(), m_state(), m_parentBlock(ScicosID()), m_children(), m_childrenColor{ -1, 1}, m_portReference(ScicosID()) {};
     Block(const Block& o) : BaseObject(BLOCK), m_parentDiagram(o.m_parentDiagram), m_interfaceFunction(o.m_interfaceFunction), m_geometry(o.m_geometry),
         m_angle(o.m_angle), m_exprs(o.m_exprs), m_label(o.m_label), m_style(o.m_style), m_nzcross(o.m_nzcross), m_nmode(o.m_nmode), m_equations(o.m_equations), m_uid(o.m_uid),
         m_sim(o.m_sim), m_in(o.m_in), m_out(o.m_out), m_ein(o.m_ein), m_eout(o.m_eout), m_parameter(o.m_parameter), m_state(o.m_state), m_parentBlock(o.m_parentBlock),
-        m_children(o.m_children), m_portReference(o.m_portReference) {};
+        m_children(o.m_children), m_childrenColor(o.m_childrenColor), m_portReference(o.m_portReference) {};
     ~Block() = default;
 
 private:
@@ -150,6 +137,22 @@ private:
         return SUCCESS;
     }
 
+    void getChildrenColor(std::vector<int>& data) const
+    {
+        data = this->m_childrenColor;
+    }
+
+    update_status_t setChildrenColor(const std::vector<int>& data)
+    {
+        if (data == this->m_childrenColor)
+        {
+            return NO_CHANGES;
+        }
+
+        this->m_childrenColor = data;
+        return SUCCESS;
+    }
+
     void getGeometry(std::vector<double>& v) const
     {
         m_geometry.fill(v);
@@ -701,6 +704,7 @@ private:
      */
     ScicosID m_parentBlock;
     std::vector<ScicosID> m_children;
+    std::vector<int> m_childrenColor;
 
     /**
      * I/O Blocks: the corresponding parent port
index 1cb3e1d..bdc92b0 100644 (file)
@@ -69,8 +69,8 @@ struct SimulationConfig
 class Diagram: public BaseObject
 {
 public:
-    Diagram() : BaseObject(DIAGRAM), m_title("Untitled"), m_path(), m_properties(), m_context(), m_children(), m_version() {};
-    Diagram(const Diagram& o) : BaseObject(DIAGRAM), m_title(o.m_title), m_path(o.m_path), m_properties(o.m_properties),
+    Diagram() : BaseObject(DIAGRAM), m_title("Untitled"), m_path(), m_color{ -1, 1}, m_properties(), m_context(), m_children(), m_version() {};
+    Diagram(const Diagram& o) : BaseObject(DIAGRAM), m_title(o.m_title), m_path(o.m_path), m_color(o.m_color), m_properties(o.m_properties),
         m_context(o.m_context), m_children(o.m_children), m_version(o.m_version) {};
     ~Diagram() = default;
 
@@ -173,6 +173,22 @@ private:
         return SUCCESS;
     }
 
+    void getColor(std::vector<int>& data) const
+    {
+        data = m_color;
+    }
+
+    update_status_t setColor(const std::vector<int>& data)
+    {
+        if (data == m_color)
+        {
+            return NO_CHANGES;
+        }
+
+        m_color = data;
+        return SUCCESS;
+    }
+
     void getVersionNumber(std::string& data) const
     {
         data = m_version;
@@ -192,6 +208,7 @@ private:
 private:
     std::string m_title;
     std::string m_path;
+    std::vector<int> m_color;
     SimulationConfig m_properties;
     std::vector<std::string> m_context;
 
index 977563c..327f6eb 100644 (file)
@@ -39,7 +39,7 @@ class Link: public BaseObject
 {
 public:
     Link() : BaseObject(LINK), m_parentDiagram(ScicosID()), m_parentBlock(ScicosID()), m_sourcePort(ScicosID()), m_destinationPort(ScicosID()), m_controlPoints(),
-        m_label(), m_thick(std::vector<double>(2)), m_color(1), m_linkKind(regular) {};
+        m_label(), m_thick(2), m_color(1), m_linkKind(regular) {};
     Link(const Link& o) : BaseObject(LINK), m_parentDiagram(o.m_parentDiagram), m_parentBlock(o.m_parentBlock), m_sourcePort(o.m_sourcePort), m_destinationPort(o.m_destinationPort),
         m_controlPoints(o.m_controlPoints), m_label(o.m_label), m_thick(o.m_thick), m_color(o.m_color), m_linkKind(o.m_linkKind) {};
     ~Link() = default;
index 5301467..0aecebb 100644 (file)
@@ -29,7 +29,7 @@ class Port: public BaseObject
 {
 public:
     Port() : BaseObject(PORT), m_dataType(0), m_sourceBlock(ScicosID()), m_kind(PORT_UNDEF), m_implicit(false),
-        m_style(), m_label(), m_firing(0), m_connectedSignals(std::vector<ScicosID> (1, ScicosID())) {};
+        m_style(), m_label(), m_firing(0), m_connectedSignals{ScicosID()} {};
     Port(const Port& o) : BaseObject(PORT), m_dataType(o.m_dataType), m_sourceBlock(o.m_sourceBlock), m_kind(o.m_kind), m_implicit(o.m_implicit),
         m_style(o.m_style), m_label(o.m_label), m_firing(0), m_connectedSignals(o.m_connectedSignals) {};
     ~Port() = default;
index fb42672..5219277 100644 (file)
@@ -690,9 +690,9 @@ struct exprs
             }
             types::List* list = current->get(6)->getAs<types::List>();
 
-            for (size_t i = 0; i < list->getSize(); ++i)
+            for (int i = 0; i < list->getSize(); ++i)
             {
-                if (list->get(static_cast<int>(i))->getType() != types::InternalType::ScilabString)
+                if (list->get(i)->getType() != types::InternalType::ScilabString)
                 {
                     return false;
                 }
index 26d1578..8786f10 100644 (file)
@@ -1452,7 +1452,7 @@ struct equations
         std::istringstream inputsSizeStr (equations[1]);
         int inputsSize;
         inputsSizeStr >> inputsSize;
-        if (inputsSize <= 0 || inputsSize > equations.size() - 2)
+        if (inputsSize <= 0 || inputsSize > int(equations.size() - 2))
         {
             types::Double* inputsField = types::Double::Empty();
             o->set(2, inputsField);
@@ -1474,7 +1474,7 @@ struct equations
         std::istringstream outputsSizeStr (equations[2 + inputsSize]);
         int outputsSize;
         outputsSizeStr >> outputsSize;
-        if (outputsSize <= 0 || outputsSize > equations.size() - 3 - inputsSize)
+        if (outputsSize <= 0 || outputsSize > int(equations.size() - 3 - inputsSize))
         {
             types::Double* outputsField = types::Double::Empty();
             o->set(3, outputsField);
@@ -1499,7 +1499,7 @@ struct equations
         std::istringstream parametersSizeStr (equations[3 + inputsSize + outputsSize]);
         int parametersSize;
         parametersSizeStr >> parametersSize;
-        if (parametersSize <= 0 || parametersSize > equations.size() - 4 - inputsSize - outputsSize)
+        if (parametersSize <= 0 || parametersSize > int(equations.size() - 4 - inputsSize - outputsSize))
         {
             types::Double* parametersNames = types::Double::Empty();
             parametersField->set(0, parametersNames);
index b50731b..4abb122 100644 (file)
@@ -48,7 +48,7 @@ namespace view_scilab
  * Utilities function to emit the error messages
  */
 template<object_properties_t p>
-std::string adapterName(const object_properties_t port_kind)
+std::string adapterName(const object_properties_t /*port_kind*/)
 {
     switch (p)
     {