Xcos MVC: implement firing / dep_ut / label / nzcross / nmode
[scilab.git] / scilab / modules / scicos / src / cpp / model / Port.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-en.txt
10  *
11  */
12
13 #ifndef PORT_HXX_
14 #define PORT_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 enum portKind
28 {
29     UNDEF, IN, OUT, EIN, EOUT
30 };
31
32 class Port: public BaseObject
33 {
34     friend class ::org_scilab_modules_scicos::Model;
35
36 private:
37     Port() : BaseObject(PORT), dataType(0), sourceBlock(0), kind(UNDEF), implicit(false),
38         style(), label(), connectedSignals() {};
39     Port(const Port& o) : BaseObject(PORT), dataType(o.dataType), sourceBlock(o.sourceBlock), kind(o.kind), implicit(o.implicit),
40         style(o.style), label(o.label), connectedSignals(o.connectedSignals) {};
41     ~Port() {};
42
43     const std::vector<ScicosID>& getConnectedSignals() const
44     {
45         return connectedSignals;
46     }
47
48     update_status_t setConnectedSignals(const std::vector<ScicosID>& connectedSignals)
49     {
50         if (this->connectedSignals == connectedSignals)
51         {
52             return NO_CHANGES;
53         }
54
55         this->connectedSignals = connectedSignals;
56         return SUCCESS;
57     }
58
59     void getDataType(std::vector<int> v) const
60     {
61         if (dataType == 0)
62         {
63             v.resize(3, 0);
64         }
65         else
66         {
67             v.resize(3);
68             v[0] = dataType->rows;
69             v[1] = dataType->columns;
70             v[3] = dataType->datatype_id;
71         }
72     }
73
74     update_status_t setDataType(Model* model, const std::vector<int>& v)
75     {
76         if (v.size() != 3)
77         {
78             return FAIL;
79         }
80
81         model::Datatype datatype = model::Datatype(v);
82         if (this->dataType != 0 && *this->dataType == datatype)
83         {
84             return NO_CHANGES;
85         }
86
87         this->dataType = model->flyweight(datatype);
88         return SUCCESS;
89     }
90
91     portKind getKind() const
92     {
93         return kind;
94     }
95
96     void setKind(portKind kind)
97     {
98         this->kind = kind;
99     }
100
101     ScicosID getSourceBlock() const
102     {
103         return sourceBlock;
104     }
105
106     void setSourceBlock(ScicosID sourceBlock)
107     {
108         this->sourceBlock = sourceBlock;
109     }
110
111     void getImplicit(bool& v) const
112     {
113         v = implicit;
114     }
115
116     update_status_t setImplicit(bool implicit)
117     {
118         if (implicit == this->implicit)
119         {
120             return NO_CHANGES;
121         }
122         this->implicit = implicit;
123         return SUCCESS;
124     }
125
126     void getStyle(std::string& s) const
127     {
128         s = style;
129     }
130
131     update_status_t setStyle(const std::string& style)
132     {
133         if (style == this->style)
134         {
135             return NO_CHANGES;
136         }
137         this->style = style;
138         return SUCCESS;
139     }
140
141     void getLabel(std::string& l) const
142     {
143         l = style;
144     }
145
146     update_status_t setLabel(const std::string& label)
147     {
148         if (label == this->label)
149         {
150             return NO_CHANGES;
151         }
152         this->label = label;
153         return SUCCESS;
154     }
155
156     void getFiring(double& f) const
157     {
158         f = firing;
159     }
160
161     update_status_t setFiring(double firing)
162     {
163         if (firing == this->firing)
164         {
165             return NO_CHANGES;
166         }
167         this->firing = firing;
168         return SUCCESS;
169     }
170
171 private:
172     Datatype* dataType;
173     ScicosID sourceBlock;
174     portKind kind;
175     bool implicit;
176     std::string style;
177     std::string label;
178     double firing;
179
180     std::vector<ScicosID> connectedSignals;
181 };
182
183 } /* namespace model */
184 } /* namespace org_scilab_modules_scicos */
185
186 #endif /* PORT_HXX_ */