Xcos MVC: partial implementation of a model.
[scilab.git] / scilab / modules / scicos / src / cpp / Controller.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-en.txt
10  *
11  */
12
13 #include <algorithm>
14
15 #include "Controller.hxx"
16
17 #include "LoggerView.hxx"
18
19 namespace org_scilab_modules_scicos
20 {
21
22 Controller* Controller::_instance = 0;
23
24 Controller* Controller::get_instance()
25 {
26     if (_instance == 0)
27     {
28         _instance = new Controller();
29     }
30     return _instance;
31 }
32
33 void Controller::delete_instance()
34 {
35     if (_instance != 0)
36     {
37         delete _instance;
38     }
39 }
40
41 Controller::Controller()
42 {
43     LoggerView* v = new LoggerView();
44
45     register_view(v);
46 }
47
48 Controller::~Controller()
49 {
50     for (view_set_t::iterator iter = allViews.begin(); iter != allViews.end(); iter++)
51     {
52         delete *iter;
53     }
54     allViews.clear();
55 }
56
57 void Controller::register_view(View* v)
58 {
59     allViews.push_back(v);
60 }
61
62 void Controller::unregister_view(View* v)
63 {
64     view_set_t::iterator it = std::find(allViews.begin(), allViews.end(), v);
65     if (it != allViews.end())
66     {
67         allViews.erase(it);
68     }
69 }
70
71 ScicosID Controller::createObject(kind_t k)
72 {
73     ScicosID id = model.createObject(k);
74
75     for (view_set_t::iterator iter = allViews.begin(); iter != allViews.end(); iter++)
76     {
77         (*iter)->objectCreated(id, k);
78     }
79
80     return id;
81 }
82
83 void Controller::deleteObject(ScicosID uid)
84 {
85     model.deleteObject(uid);
86
87     for (view_set_t::iterator iter = allViews.begin(); iter != allViews.end(); iter++)
88     {
89         (*iter)->objectDeleted(uid);
90     }
91 }
92
93 model::BaseObject* Controller::getObject(ScicosID uid)
94 {
95     return model.getObject(uid);
96 }
97
98 update_status_t Controller::setObject(model::BaseObject* o)
99 {
100     update_status_t status = model.setObject(o);
101
102     if (status == SUCCESS)
103     {
104         for (view_set_t::iterator iter = allViews.begin(); iter != allViews.end(); iter++)
105         {
106             (*iter)->objectUpdated(o->id(), o->kind());
107         }
108     }
109     return status;
110 }
111
112 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
113                                    double* v)
114 {
115     return model.getObjectProperty(uid, k, p, v);
116 }
117
118 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, int* v)
119 {
120     return model.getObjectProperty(uid, k, p, v);
121 }
122
123 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, bool* v)
124 {
125     return model.getObjectProperty(uid, k, p, v);
126 }
127
128 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
129                                    std::string* v)
130 {
131     return model.getObjectProperty(uid, k, p, v);
132 }
133
134 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
135                                    ScicosID* v)
136 {
137     return model.getObjectProperty(uid, k, p, v);
138 }
139
140 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, size_t* len,
141                                    double** v)
142 {
143     return model.getObjectProperty(uid, k, p, len, v);
144 }
145
146 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
147                                    size_t* len, int** v)
148 {
149     return model.getObjectProperty(uid, k, p, len, v);
150 }
151
152 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
153                                    size_t* len, std::string** v)
154 {
155     return model.getObjectProperty(uid, k, p, len, v);
156 }
157
158 bool Controller::getObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
159                                    size_t* len, ScicosID** v)
160 {
161     return model.getObjectProperty(uid, k, p, len, v);
162 }
163
164 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
165         double v)
166 {
167     return generic_setObjectProp<double>(uid, k, p, v);
168 }
169
170 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
171         int v)
172 {
173     return generic_setObjectProp<int>(uid, k, p, v);
174 }
175
176 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
177         bool v)
178 {
179     return generic_setObjectProp<bool>(uid, k, p, v);
180 }
181
182 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
183         ScicosID v)
184 {
185     return generic_setObjectProp<ScicosID>(uid, k, p, v);
186 }
187
188 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
189         std::string v)
190 {
191     return generic_setObjectProp<std::string>(uid, k, p, v);
192 }
193
194 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
195         size_t len, double* v)
196 {
197     return generic_setObjectProp<double>(uid, k, p, len, v);
198 }
199
200 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
201         size_t len, int* v)
202 {
203     return generic_setObjectProp<int>(uid, k, p, len, v);
204 }
205
206 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
207         size_t len, std::string* v)
208 {
209     return generic_setObjectProp<std::string>(uid, k, p, len, v);
210 }
211
212 update_status_t Controller::setObjectProperty(ScicosID uid, kind_t k, object_properties_t p,
213         size_t len, ScicosID* v)
214 {
215     return generic_setObjectProp<ScicosID>(uid, k, p, len, v);
216 }
217
218 } /* namespace org_scilab_modules_scicos */