Xcos MVC: fix header licences
[scilab.git] / scilab / modules / scicos / src / cpp / view_scilab / DiagramAdapter.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014-2014 - Scilab Enterprises - Clement DAVID
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 #include <string>
14 #include <sstream>
15
16 #include "internal.hxx"
17 #include "list.hxx"
18 #include "string.hxx"
19 #include "types.hxx"
20 #include "user.hxx"
21
22 #include "Controller.hxx"
23 #include "DiagramAdapter.hxx"
24 #include "ParamsAdapter.hxx"
25
26 extern "C" {
27 #include "version.h"
28 }
29
30 namespace org_scilab_modules_scicos
31 {
32 namespace view_scilab
33 {
34 namespace
35 {
36
37 struct props
38 {
39
40     static types::InternalType* get(const DiagramAdapter& adaptor, const Controller& controller)
41     {
42
43         return new ParamsAdapter(adaptor.getAdaptee());
44     }
45
46     static bool set(DiagramAdapter& adaptor, types::InternalType* v, Controller& controller)
47     {
48         if (v->getType() == types::InternalType::ScilabUserType
49                 && v->getShortTypeStr() == ParamsAdapter::getSharedTypeStr())
50         {
51             ParamsAdapter* props = v->getAs<ParamsAdapter>();
52             adaptor.setAdaptee(props->getAdaptee());
53             return true;
54         }
55         return false;
56     }
57 };
58
59 struct objs
60 {
61
62     static types::InternalType* get(const DiagramAdapter& adaptor, const Controller& controller)
63     {
64
65         return 0;
66     }
67
68     static bool set(DiagramAdapter& adaptor, types::InternalType* v, Controller& controller)
69     {
70         return false;
71     }
72 };
73
74 struct version
75 {
76
77     static types::InternalType* get(const DiagramAdapter& adaptor, const Controller& controller)
78     {
79         std::stringstream str;
80         str << SCI_VERSION_MAJOR << '.' << SCI_VERSION_MINOR << '.' << SCI_VERSION_MAINTENANCE;
81
82         return new types::String(str.str().c_str());
83     }
84
85     static bool set(DiagramAdapter& adaptor, types::InternalType* v, Controller& controller)
86     {
87         //FIXME: handle version upgrade of the whole model
88         return true;
89     }
90 };
91
92 struct contrib
93 {
94
95     static types::InternalType* get(const DiagramAdapter& adaptor, const Controller& controller)
96     {
97         return 0;
98     }
99
100     static bool set(DiagramAdapter& adaptor, types::InternalType* v, Controller& controller)
101     {
102         return false;
103     }
104 };
105
106 } /* namespace */
107
108 template<> property<DiagramAdapter>::props_t property<DiagramAdapter>::fields = property<DiagramAdapter>::props_t();
109
110 DiagramAdapter::DiagramAdapter(const DiagramAdapter& o) :
111     BaseAdapter<DiagramAdapter, org_scilab_modules_scicos::model::Diagram>(o), contrib(o.contrib) {}
112
113 DiagramAdapter::DiagramAdapter(org_scilab_modules_scicos::model::Diagram* o) :
114     BaseAdapter<DiagramAdapter, org_scilab_modules_scicos::model::Diagram>(o), contrib(0)
115 {
116     if (property<DiagramAdapter>::properties_has_not_been_set())
117     {
118         property<DiagramAdapter>::fields.reserve(4);
119         property<DiagramAdapter>::add_property(L"props", &props::get, &props::set);
120         property<DiagramAdapter>::add_property(L"objs", &objs::get, &objs::set);
121         property<DiagramAdapter>::add_property(L"version", &version::get, &version::set);
122         property<DiagramAdapter>::add_property(L"contrib", &contrib::get, &contrib::set);
123     }
124 }
125
126 DiagramAdapter::~DiagramAdapter()
127 {
128 }
129
130 std::wstring DiagramAdapter::getTypeStr()
131 {
132     return getSharedTypeStr();
133 }
134 std::wstring DiagramAdapter::getShortTypeStr()
135 {
136     return getSharedTypeStr();
137 }
138
139 types::InternalType* DiagramAdapter::getContrib() const
140 {
141     return contrib;
142 }
143
144 void DiagramAdapter::setContrib(types::InternalType* contrib)
145 {
146     this->contrib = contrib;
147 }
148
149 } /* namespace view_scilab */
150 } /* namespace org_scilab_modules_scicos */