6d49c8a2960f9a4cfaae74eb626effa94c274bc0
[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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #ifndef LINK_HXX_
17 #define LINK_HXX_
18
19 #include <string>
20 #include <vector>
21
22 #include "utilities.hxx"
23 #include "Model.hxx"
24 #include "model/BaseObject.hxx"
25
26 namespace org_scilab_modules_scicos
27 {
28 namespace model
29 {
30
31 /*
32  * List of all possible values for a Link.
33  */
34 enum link_kind_t
35 {
36     activation = -1,
37     regular = 1,
38     implicit = 2
39 };
40
41 class Link: public BaseObject
42 {
43 public:
44     Link() : BaseObject(LINK), m_parentDiagram(ScicosID()), m_parentBlock(ScicosID()), m_sourcePort(ScicosID()), m_destinationPort(ScicosID()), m_uid(), m_controlPoints(),
45         m_label(), m_style(), m_thick(2), m_color(1), m_linkKind(regular) {};
46     Link(const Link& o) : BaseObject(LINK), m_parentDiagram(o.m_parentDiagram), m_parentBlock(o.m_parentBlock), m_sourcePort(o.m_sourcePort), m_destinationPort(o.m_destinationPort),  m_uid(o.m_uid),
47         m_controlPoints(o.m_controlPoints), m_label(o.m_label), m_style(o.m_style), m_thick(o.m_thick), m_color(o.m_color), m_linkKind(o.m_linkKind) {};
48     ~Link() = default;
49
50 private:
51     friend class ::org_scilab_modules_scicos::Model;
52
53     void getParentDiagram(ScicosID& v) const
54     {
55         v = m_parentDiagram;
56     }
57
58     update_status_t setParentDiagram(const ScicosID v)
59     {
60         if (v == m_parentDiagram)
61         {
62             return NO_CHANGES;
63         }
64
65         m_parentDiagram = v;
66         return SUCCESS;
67     }
68
69     void getParentBlock(ScicosID& v) const
70     {
71         v = m_parentBlock;
72     }
73
74     update_status_t setParentBlock(const ScicosID v)
75     {
76         if (v == m_parentBlock)
77         {
78             return NO_CHANGES;
79         }
80
81         m_parentBlock = v;
82         return SUCCESS;
83     }
84
85     void getControlPoints(std::vector<double>& v) const
86     {
87         v = m_controlPoints;
88     }
89
90     update_status_t setControlPoints(const std::vector<double>& v)
91     {
92         if (v == m_controlPoints)
93         {
94             return NO_CHANGES;
95         }
96
97         m_controlPoints = v;
98         return SUCCESS;
99     }
100
101     void getLabel(std::string& data) const
102     {
103         data = m_label;
104     }
105
106     update_status_t setLabel(const std::string& data)
107     {
108         if (data == m_label)
109         {
110             return NO_CHANGES;
111         }
112
113         m_label = data;
114         return SUCCESS;
115     }
116
117     void getStyle(std::string& data) const
118     {
119         data = m_style;
120     }
121
122     update_status_t setStyle(const std::string& data)
123     {
124         if (data == m_style)
125         {
126             return NO_CHANGES;
127         }
128
129         m_style = data;
130         return SUCCESS;
131     }
132
133     void getThick(std::vector<double>& v) const
134     {
135         v = m_thick;
136     }
137
138     update_status_t setThick(const std::vector<double>& v)
139     {
140         if (v.size() != 2)
141         {
142             return FAIL;
143         }
144
145         if (v == m_thick)
146         {
147             return NO_CHANGES;
148         }
149
150         m_thick = v;
151         return SUCCESS;
152     }
153
154     void getColor(int& c) const
155     {
156         c = m_color;
157     }
158
159     update_status_t setColor(const int c)
160     {
161         if (c == m_color)
162         {
163             return NO_CHANGES;
164         }
165
166         m_color = c;
167         return SUCCESS;
168     }
169
170     void getKind(int& k) const
171     {
172         k = m_linkKind;
173     }
174
175     update_status_t setKind(const int k)
176     {
177         if (k == m_linkKind)
178         {
179             return NO_CHANGES;
180         }
181
182         // Only accepting Scilab Link kind values
183         switch (k)
184         {
185             case activation:
186                 m_linkKind = activation;
187                 break;
188             case regular:
189                 m_linkKind = regular;
190                 break;
191             case implicit:
192                 m_linkKind = implicit;
193                 break;
194             default:
195                 return FAIL;
196         }
197         return SUCCESS;
198     }
199
200     void getSourcePort(ScicosID& sp) const
201     {
202         sp = m_sourcePort;
203     }
204
205     update_status_t setSourcePort(const ScicosID sp)
206     {
207         if (sp == m_sourcePort)
208         {
209             return NO_CHANGES;
210         }
211
212         m_sourcePort = sp;
213         return SUCCESS;
214     }
215
216     void getDestinationPort(ScicosID& dp) const
217     {
218         dp = m_destinationPort;
219     }
220
221     update_status_t setDestinationPort(const ScicosID dp)
222     {
223         if (dp == m_destinationPort)
224         {
225             return NO_CHANGES;
226         }
227
228         m_destinationPort = dp;
229         return SUCCESS;
230     }
231
232     void getUID(std::string& data) const
233     {
234         data = m_uid;
235     }
236
237     update_status_t setUID(const std::string& data)
238     {
239         if (data == m_uid)
240         {
241             return NO_CHANGES;
242         }
243
244         m_uid = data;
245         return SUCCESS;
246     }
247
248 private:
249     ScicosID m_parentDiagram;
250     ScicosID m_parentBlock;
251
252     ScicosID m_sourcePort;
253     ScicosID m_destinationPort;
254
255     std::string m_uid;
256     // used to store, user-defined control points
257     std::vector<double> m_controlPoints;
258
259     std::string m_label;
260     std::string m_style;
261     std::vector<double> m_thick;
262     int m_color;
263     link_kind_t m_linkKind;
264
265 };
266
267 } /* namespace model */
268 } /* namespace org_scilab_modules_scicos */
269
270 #endif /* LINK_HXX_ */