Xcos MVC: implement clone / delete on the Model side
[scilab.git] / scilab / modules / scicos / src / cpp / view_scilab / ParamsAdapter.cpp
index 0ffd052..2d46589 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "double.hxx"
 #include "string.hxx"
+#include "list.hxx"
 #include "tlist.hxx"
 
 #include "Controller.hxx"
@@ -23,6 +24,7 @@
 
 extern "C" {
 #include "sci_malloc.h"
+#include "charEncoding.h"
 }
 
 namespace org_scilab_modules_scicos
@@ -32,7 +34,7 @@ namespace view_scilab
 namespace
 {
 
-static const wchar_t* scsopt = L"scsopt";
+const std::wstring scsopt(L"scsopt");
 
 struct dummy_property
 {
@@ -43,7 +45,8 @@ struct dummy_property
         (void) adaptor;
         (void) controller;
 
-        return 0;
+        // Return a default empty matrix.
+        return types::Double::Empty();
     }
 
     static bool set(ParamsAdapter& adaptor, types::InternalType* v, Controller& controller)
@@ -126,8 +129,11 @@ struct tol
 
         std::vector<double> tol;
         controller.getObjectProperty(adaptee->id(), adaptee->kind(), PROPERTIES, tol);
-
+#ifdef _MSC_VER
+        std::copy(tol.begin() + 1, tol.end(), stdext::checked_array_iterator<double*>( data, 7 ));
+#else
         std::copy(tol.begin() + 1, tol.end(), data);
+#endif
 
         return o;
     }
@@ -267,7 +273,7 @@ struct options
         (void) controller;
 
         // Return a dummy 'scsopt'-typed tlist.
-        types::String* header = new types::String(scsopt);
+        types::String* header = new types::String(scsopt.c_str());
 
         types::TList* Scsopt = new types::TList();
         Scsopt->set(0, header);
@@ -305,14 +311,8 @@ struct doc
 
 template<> property<ParamsAdapter>::props_t property<ParamsAdapter>::fields = property<ParamsAdapter>::props_t();
 
-ParamsAdapter::ParamsAdapter(const ParamsAdapter& o) :
-    BaseAdapter<ParamsAdapter, org_scilab_modules_scicos::model::Diagram>(o)
-{
-    doc_content = new types::List();
-}
-
-ParamsAdapter::ParamsAdapter(org_scilab_modules_scicos::model::Diagram* o) :
-    BaseAdapter<ParamsAdapter, org_scilab_modules_scicos::model::Diagram>(o)
+ParamsAdapter::ParamsAdapter(bool ownAdaptee, org_scilab_modules_scicos::model::Diagram* adaptee) :
+    BaseAdapter<ParamsAdapter, org_scilab_modules_scicos::model::Diagram>(ownAdaptee, adaptee)
 {
     if (property<ParamsAdapter>::properties_have_not_been_set())
     {
@@ -348,7 +348,7 @@ std::wstring ParamsAdapter::getShortTypeStr()
 
 types::InternalType* ParamsAdapter::getDocContent() const
 {
-    return doc_content;
+    return doc_content->clone();
 }
 
 void ParamsAdapter::setDocContent(types::InternalType* v)