d2d47ba90027e16dffa450e3cedbfada1a6301c5
[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(), 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     ScicosID getParentDiagram() const
49     {
50         return parentDiagram;
51     }
52
53     void setParentDiagram(ScicosID parentDiagram)
54     {
55         this->parentDiagram = parentDiagram;
56     }
57
58     void getControlPoints(std::vector<double>& v) const
59     {
60         v = controlPoints;
61     }
62
63     update_status_t setControlPoints(const std::vector<double>& v)
64     {
65         if (v == controlPoints)
66         {
67             return NO_CHANGES;
68         }
69
70         controlPoints = v;
71         return SUCCESS;
72     }
73
74     void getLabel(std::string& data) const
75     {
76         data = label;
77     }
78
79     update_status_t setLabel(const std::string& data)
80     {
81         if (data == label)
82         {
83             return NO_CHANGES;
84         }
85
86         label = data;
87         return SUCCESS;
88     }
89
90     void getThick(std::vector<double>& v) const
91     {
92         v = thick;
93     }
94
95     update_status_t setThick(const std::vector<double>& v)
96     {
97         if (v.size() != 2)
98         {
99             return FAIL;
100         }
101
102         if (v == thick)
103         {
104             return NO_CHANGES;
105         }
106
107         thick = v;
108         return SUCCESS;
109     }
110
111     void getColor(int& c) const
112     {
113         c = color;
114     }
115
116     update_status_t setColor(const int c)
117     {
118         if (c == color)
119         {
120             return NO_CHANGES;
121         }
122
123         color = c;
124         return SUCCESS;
125     }
126
127     void getKind(int& k) const
128     {
129         k = linkKind;
130     }
131
132     update_status_t setKind(const int k)
133     {
134         if (k == linkKind)
135         {
136             return NO_CHANGES;
137         }
138
139         // Only accepting Scilab Link kind values
140         switch (k)
141         {
142             case activation:
143                 linkKind = activation;
144                 break;
145             case regular:
146                 linkKind = regular;
147                 break;
148             case implicit:
149                 linkKind = implicit;
150                 break;
151             default:
152                 return FAIL;
153         }
154         return SUCCESS;
155     }
156
157     ScicosID getDestinationPort() const
158     {
159         return destinationPort;
160     }
161
162     void setDestinationPort(ScicosID destinationPort)
163     {
164         this->destinationPort = destinationPort;
165     }
166
167     ScicosID getSourcePort() const
168     {
169         return sourcePort;
170     }
171
172     void setSourcePort(ScicosID sourcePort)
173     {
174         this->sourcePort = sourcePort;
175     }
176
177 private:
178     ScicosID parentDiagram;
179
180     ScicosID sourcePort;
181     ScicosID destinationPort;
182
183     // used to store, user-defined control points
184     std::vector<double> controlPoints;
185
186     std::string label;
187     std::vector<double> thick;
188     int color;
189     link_kind_t linkKind;
190
191 };
192
193 } /* namespace model */
194 } /* namespace org_scilab_modules_scicos */
195
196 #endif /* LINK_HXX_ */