Xcos MVC: fix Diagrams's 'objs' property getter and setter
[scilab.git] / scilab / modules / scicos / src / cpp / model / Link.hxx
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 #ifndef LINK_HXX_
14 #define LINK_HXX_
15
16 #include <string>
17 #include <vector>
18
19 #include "Model.hxx"
20 #include "model/BaseObject.hxx"
21
22 namespace org_scilab_modules_scicos
23 {
24 namespace model
25 {
26
27 /*
28  * List of all possible values for a Link.
29  */
30 enum link_kind_t
31 {
32     activation = -1,
33     regular = 1,
34     implicit = 2
35 };
36
37 class Link: public BaseObject
38 {
39     friend class ::org_scilab_modules_scicos::Model;
40
41 private:
42     Link() : BaseObject(LINK), parentDiagram(0), sourcePort(0), destinationPort(0), controlPoints(),
43         label(), thick(std::vector<double>(2)), color(1), linkKind(regular) {};
44     Link(const Link& o) : BaseObject(LINK), parentDiagram(o.parentDiagram), sourcePort(o.sourcePort), destinationPort(o.destinationPort),
45         controlPoints(o.controlPoints), label(o.label), thick(o.thick), color(o.color), linkKind(o.linkKind) {};
46     ~Link() {}
47
48     void getParentDiagram(ScicosID& v) const
49     {
50         v = parentDiagram;
51     }
52
53     update_status_t setParentDiagram(const ScicosID v)
54     {
55         if (v == parentDiagram)
56         {
57             return NO_CHANGES;
58         }
59
60         parentDiagram = v;
61         return SUCCESS;
62     }
63
64     void getControlPoints(std::vector<double>& v) const
65     {
66         v = controlPoints;
67     }
68
69     update_status_t setControlPoints(const std::vector<double>& v)
70     {
71         if (v == controlPoints)
72         {
73             return NO_CHANGES;
74         }
75
76         controlPoints = v;
77         return SUCCESS;
78     }
79
80     void getLabel(std::string& data) const
81     {
82         data = label;
83     }
84
85     update_status_t setLabel(const std::string& data)
86     {
87         if (data == label)
88         {
89             return NO_CHANGES;
90         }
91
92         label = data;
93         return SUCCESS;
94     }
95
96     void getThick(std::vector<double>& v) const
97     {
98         v = thick;
99     }
100
101     update_status_t setThick(const std::vector<double>& v)
102     {
103         if (v.size() != 2)
104         {
105             return FAIL;
106         }
107
108         if (v == thick)
109         {
110             return NO_CHANGES;
111         }
112
113         thick = v;
114         return SUCCESS;
115     }
116
117     void getColor(int& c) const
118     {
119         c = color;
120     }
121
122     update_status_t setColor(const int c)
123     {
124         if (c == color)
125         {
126             return NO_CHANGES;
127         }
128
129         color = c;
130         return SUCCESS;
131     }
132
133     void getKind(int& k) const
134     {
135         k = linkKind;
136     }
137
138     update_status_t setKind(const int k)
139     {
140         if (k == linkKind)
141         {
142             return NO_CHANGES;
143         }
144
145         // Only accepting Scilab Link kind values
146         switch (k)
147         {
148             case activation:
149                 linkKind = activation;
150                 break;
151             case regular:
152                 linkKind = regular;
153                 break;
154             case implicit:
155                 linkKind = implicit;
156                 break;
157             default:
158                 return FAIL;
159         }
160         return SUCCESS;
161     }
162
163     void getSourcePort(ScicosID& sp) const
164     {
165         sp = sourcePort;
166     }
167
168     update_status_t setSourcePort(const ScicosID sp)
169     {
170         if (sp == sourcePort)
171         {
172             return NO_CHANGES;
173         }
174
175         sourcePort = sp;
176         return SUCCESS;
177     }
178
179     void getDestinationPort(ScicosID& dp) const
180     {
181         dp = destinationPort;
182     }
183
184     update_status_t setDestinationPort(const ScicosID dp)
185     {
186         if (dp == destinationPort)
187         {
188             return NO_CHANGES;
189         }
190
191         destinationPort = dp;
192         return SUCCESS;
193     }
194
195 private:
196     ScicosID parentDiagram;
197
198     ScicosID sourcePort;
199     ScicosID destinationPort;
200
201     // used to store, user-defined control points
202     std::vector<double> controlPoints;
203
204     std::string label;
205     std::vector<double> thick;
206     int color;
207     link_kind_t linkKind;
208
209 };
210
211 } /* namespace model */
212 } /* namespace org_scilab_modules_scicos */
213
214 #endif /* LINK_HXX_ */