Xcos: fix existing bug_7537.tst 44/20544/1
Clement DAVID [Tue, 9 Oct 2018 09:34:59 +0000 (11:34 +0200)]
Change-Id: I32ec3cc39bc507078beefcdf2f75ba1c9e92b87d

scilab/modules/scicos/src/cpp/Controller.cpp
scilab/modules/scicos/src/cpp/view_scilab/Adapters.cpp

index 76fb11e..4d7eece 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2014-2016 - Scilab Enterprises - Clement DAVID
- * Copyright (C) 2017 - ESI Group - Clement DAVID
+ * Copyright (C) 2017-2018 - ESI Group - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -613,12 +613,17 @@ void Controller::sortAndFillKind(std::vector<ScicosID>& uids, std::vector<int>&
         ScicosID first;
         int second;
     };
-    std::vector<local_pair> container(uids.size());
+    std::vector<local_pair> container;
+    container.reserve(uids.size());
 
     // fill it
-    for (size_t i = 0; i < uids.size(); ++i)
+    for (ScicosID uid : uids)
     {
-        container[i] = { uids[i], m_instance.model.getKind(uids[i]) };
+        // if something went wrong on the adapters, clean the invalid children
+        if (uid == ScicosID())
+               continue;
+
+        container.push_back({ uid, m_instance.model.getKind(uid) });
     }
 
     // sort according to the kinds
@@ -629,7 +634,8 @@ void Controller::sortAndFillKind(std::vector<ScicosID>& uids, std::vector<int>&
 
     // move things back
     uids.clear();
-    kinds.reserve(uids.capacity());
+    uids.reserve(container.size());
+    kinds.reserve(container.size());
     for (const auto & v : container)
     {
         uids.push_back(v.first);
index 0ccc1b7..0a82094 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2014-2016 - Scilab Enterprises - Clement DAVID
+ *  Copyright (C) 2017-2018 - ESI Group - Clement DAVID
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
@@ -186,11 +187,13 @@ types::InternalType* Adapters::allocate_view(Controller& controller, model::Base
     switch (o->kind())
     {
         case BLOCK:
-            return new view_scilab::BlockAdapter(controller, static_cast<model::Block*>(o));
+               return new view_scilab::BlockAdapter(controller, static_cast<model::Block*>(o));
+        case DIAGRAM:
+               return new view_scilab::DiagramAdapter(controller, static_cast<model::Diagram*>(o));
+        case ANNOTATION:
+               return new view_scilab::TextAdapter(controller, static_cast<model::Annotation*>(o));
         case LINK:
             return new view_scilab::LinkAdapter(controller, static_cast<model::Link*>(o));
-        case DIAGRAM:
-            return new view_scilab::DiagramAdapter(controller, static_cast<model::Diagram*>(o));
         default:
             return nullptr;
     }