]> SALOME platform Git repositories - modules/kernel.git/blob - src/SALOMEDS/SALOMEDS_IParameters.cxx
Salome HOME
Implementation of the "20830: EDF 1357 GUI : Hide/Show Icon"
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_IParameters.cxx
1 //  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #include "SALOMEDS_IParameters.hxx"
24 #include <utilities.h>
25
26 #define PT_INTEGER   0
27 #define PT_REAL      1
28 #define PT_BOOLEAN   2
29 #define PT_STRING    3
30 #define PT_REALARRAY 4
31 #define PT_INTARRAY  5
32 #define PT_STRARRAY  6
33
34 #define _AP_LISTS_LIST_ "AP_LISTS_LIST"
35 #define _AP_ENTRIES_LIST_ "AP_ENTRIES_LIST"
36 #define _AP_PROPERTIES_LIST_ "AP_PROPERTIES_LIST"
37 #define _AP_DUMP_PYTHON_ "AP_DUMP_PYTHON"
38
39 /*!
40   Constructor
41 */
42 SALOMEDS_IParameters::SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap)
43 {
44   if(!ap) return;
45   _ap = ap;
46   _PTR(SObject) so = _ap->GetSObject();
47   _study = so->GetStudy();
48 }
49
50 SALOMEDS_IParameters::~SALOMEDS_IParameters()
51 {
52   _compNames.clear();
53 }
54
55 int SALOMEDS_IParameters::append(const std::string& listName, const std::string& value)
56 {
57   if(!_ap) return -1;
58   std::vector<std::string> v;
59   if(!_ap->IsSet(listName, PT_STRARRAY)) {
60     if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) _ap->SetStrArray(_AP_LISTS_LIST_, v);
61     if(listName != _AP_ENTRIES_LIST_ && 
62        listName != _AP_PROPERTIES_LIST_) {
63       append(_AP_LISTS_LIST_, listName);
64     }
65     _ap->SetStrArray(listName, v);
66   }
67   v = _ap->GetStrArray(listName);
68   v.push_back(value);
69   _ap->SetStrArray(listName, v);
70   return (v.size()-1);
71 }
72
73 int SALOMEDS_IParameters::nbValues(const std::string& listName)
74 {
75   if(!_ap) return -1;
76   if(!_ap->IsSet(listName, PT_STRARRAY)) return 0;
77   std::vector<std::string> v = _ap->GetStrArray(listName);
78   return v.size();
79 }
80
81 std::vector<std::string> SALOMEDS_IParameters::getValues(const std::string& listName)
82 {
83   std::vector<std::string> v;
84   if(!_ap) return v;
85   if(!_ap->IsSet(listName, PT_STRARRAY)) return v;
86   return _ap->GetStrArray(listName);
87 }
88
89
90 std::string SALOMEDS_IParameters::getValue(const std::string& listName, int index)
91 {
92   if(!_ap) return "";
93   if(!_ap->IsSet(listName, PT_STRARRAY)) return "";
94   std::vector<std::string> v = _ap->GetStrArray(listName);
95   if(index >= v.size()) return ""; 
96   return v[index];
97 }
98
99 std::vector<std::string> SALOMEDS_IParameters::getLists()
100 {
101   std::vector<std::string> v;
102   if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) return v;
103   return _ap->GetStrArray(_AP_LISTS_LIST_);
104 }
105
106 void SALOMEDS_IParameters::setParameter(const std::string& entry, const std::string& parameterName, const std::string& value)
107 {
108   if(!_ap) return;
109   std::vector<std::string> v;
110   if(!_ap->IsSet(entry, PT_STRARRAY)) {
111     append(_AP_ENTRIES_LIST_, entry); //Add the entry to the internal list of entries
112     _ap->SetStrArray(entry, v);
113   }
114   v = _ap->GetStrArray(entry);
115   v.push_back(parameterName);
116   v.push_back(value);
117   _ap->SetStrArray(entry, v);
118 }
119
120
121 std::string SALOMEDS_IParameters::getParameter(const std::string& entry, const std::string& parameterName)
122 {
123   if(!_ap) return "";
124   if(!_ap->IsSet(entry, PT_STRARRAY)) return "";
125   std::vector<std::string> v = _ap->GetStrArray(entry);
126   int length = v.size();
127   for(int i = 0; i<length; i+=1) {
128     if(v[i] == parameterName) return v[i+1];
129   }
130   return "";
131 }
132
133
134 std::vector<std::string> SALOMEDS_IParameters::getAllParameterNames(const std::string& entry)
135 {
136   std::vector<std::string> v, names;
137   if(!_ap) return v; 
138   if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
139   v = _ap->GetStrArray(entry);
140   int length = v.size();
141   for(int i = 0; i<length; i+=2) {
142     names.push_back(v[i]);
143   }
144   return names;
145 }
146
147 std::vector<std::string> SALOMEDS_IParameters::getAllParameterValues(const std::string& entry)
148 {
149   std::vector<std::string> v, values;
150   if(!_ap) return v; 
151   if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
152   v = _ap->GetStrArray(entry);
153   int length = v.size();
154   for(int i = 1; i<length; i+=2) {
155     values.push_back(v[i]);
156   }
157   return values; 
158 }
159
160 int SALOMEDS_IParameters::getNbParameters(const std::string& entry)
161 {
162   if(!_ap) return -1;
163   if(!_ap->IsSet(entry, PT_STRARRAY)) return -1;
164   return  _ap->GetStrArray(entry).size()/2;
165 }
166
167 std::vector<std::string> SALOMEDS_IParameters::getEntries()
168 {
169   std::vector<std::string> v;
170   if(!_ap) return v;
171   if(!_ap->IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY)) return v;
172   return _ap->GetStrArray(_AP_ENTRIES_LIST_);
173 }
174
175 void SALOMEDS_IParameters::setProperty(const std::string& name, const std::string& value)
176 {
177   if(!_ap) return;
178   if(!_ap->IsSet(name, PT_STRING)) {
179     append(_AP_PROPERTIES_LIST_, name); //Add the property to the internal list of properties
180   }
181   _ap->SetString(name, value);
182 }
183
184 std::string SALOMEDS_IParameters::getProperty(const std::string& name)
185 {
186   if(!_ap) return "";
187   if(!_ap->IsSet(name, PT_STRING)) return "";
188   return _ap->GetString(name);
189 }
190
191 std::vector<std::string> SALOMEDS_IParameters::getProperties()
192 {
193   std::vector<std::string> v;
194   if(!_ap) return v;
195   if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v;
196   return _ap->GetStrArray(_AP_PROPERTIES_LIST_);
197 }
198
199
200 std::vector<std::string> SALOMEDS_IParameters::parseValue(const std::string& value, const char separator, bool fromEnd)
201 {
202   std::string val(value);
203   std::vector<std::string> v;
204   int pos;
205   if(fromEnd) pos = val.rfind(separator);
206   else pos = val.find(separator);
207
208   if(pos < 0) {
209     v.push_back(value);
210     return v;
211   }
212
213   std::string part1, part2;
214   part1 = val.substr(0, pos);
215   part2 = val.substr(pos+1, val.size());
216   v.push_back(part1);
217   v.push_back(part2);
218   return v;
219 }
220
221 std::string SALOMEDS_IParameters::encodeEntry(const std::string& entry, const std::string& compName)
222 {
223   std::string tail(entry, 6, entry.length()-1);
224   std::string newEntry(compName);
225   newEntry+=("_"+tail);
226   return newEntry;
227 }
228
229 std::string SALOMEDS_IParameters::decodeEntry(const std::string& entry)
230 {
231   if(!_study) return entry;
232   int pos = entry.rfind("_");
233   if(pos < 0 || pos >= entry.length()) return entry;
234
235   std::string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
236   
237   if(_compNames.find(compName) == _compNames.end()) {
238     _PTR(SObject) so = _study->FindComponent(compName);
239     if(!so) return entry;
240     compID = so->GetID();
241     _compNames[compName] = compID;
242   }
243   else compID = _compNames[compName];
244  
245   std::string newEntry(compID);
246   newEntry += (":"+tail);
247   
248   return newEntry;
249 }
250
251 void SALOMEDS_IParameters::setDumpPython(_PTR(Study) study, const std::string& theID)
252 {
253   std::string anID;
254   if(theID == "") anID = getDefaultVisualComponent();
255   else anID = theID;
256
257   _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
258   ap->SetBool(_AP_DUMP_PYTHON_, !isDumpPython(study, theID));
259 }
260
261 bool SALOMEDS_IParameters::isDumpPython(_PTR(Study) study, const std::string& theID)
262 {
263   std::string anID;
264   if(theID == "") anID = getDefaultVisualComponent();
265   else anID = theID;
266
267   _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
268   if(!ap) return false;
269   if(!ap->IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN)) return false;
270   return (bool)ap->GetBool(_AP_DUMP_PYTHON_);
271 }
272
273 std::string SALOMEDS_IParameters::getDefaultVisualComponent()
274 {
275   return "Interface Applicative";
276 }
277
278
279