1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "SALOMEDS_IParameters.hxx"
23 #include <utilities.h>
31 #define PT_REALARRAY 4
35 #define _AP_LISTS_LIST_ "AP_LISTS_LIST"
36 #define _AP_ENTRIES_LIST_ "AP_ENTRIES_LIST"
37 #define _AP_PROPERTIES_LIST_ "AP_PROPERTIES_LIST"
38 #define _AP_DUMP_PYTHON_ "AP_DUMP_PYTHON"
43 SALOMEDS_IParameters::SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap)
47 _PTR(SObject) so = _ap->GetSObject();
48 _study = so->GetStudy();
51 SALOMEDS_IParameters::~SALOMEDS_IParameters()
56 int SALOMEDS_IParameters::append(const string& listName, const string& value)
60 if(!_ap->IsSet(listName, PT_STRARRAY)) {
61 if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) _ap->SetStrArray(_AP_LISTS_LIST_, v);
62 if(listName != _AP_ENTRIES_LIST_ &&
63 listName != _AP_PROPERTIES_LIST_) {
64 append(_AP_LISTS_LIST_, listName);
66 _ap->SetStrArray(listName, v);
68 v = _ap->GetStrArray(listName);
70 _ap->SetStrArray(listName, v);
74 int SALOMEDS_IParameters::nbValues(const string& listName)
77 if(!_ap->IsSet(listName, PT_STRARRAY)) return 0;
78 vector<string> v = _ap->GetStrArray(listName);
82 vector<string> SALOMEDS_IParameters::getValues(const string& listName)
86 if(!_ap->IsSet(listName, PT_STRARRAY)) return v;
87 return _ap->GetStrArray(listName);
91 string SALOMEDS_IParameters::getValue(const string& listName, int index)
94 if(!_ap->IsSet(listName, PT_STRARRAY)) return "";
95 vector<string> v = _ap->GetStrArray(listName);
96 if(index >= v.size()) return "";
100 vector<string> SALOMEDS_IParameters::getLists()
103 if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) return v;
104 return _ap->GetStrArray(_AP_LISTS_LIST_);
107 void SALOMEDS_IParameters::setParameter(const string& entry, const string& parameterName, const string& value)
111 if(!_ap->IsSet(entry, PT_STRARRAY)) {
112 append(_AP_ENTRIES_LIST_, entry); //Add the entry to the internal list of entries
113 _ap->SetStrArray(entry, v);
115 v = _ap->GetStrArray(entry);
116 v.push_back(parameterName);
118 _ap->SetStrArray(entry, v);
122 string SALOMEDS_IParameters::getParameter(const string& entry, const string& parameterName)
125 if(!_ap->IsSet(entry, PT_STRARRAY)) return "";
126 vector<string> v = _ap->GetStrArray(entry);
127 int length = v.size();
128 for(int i = 0; i<length; i+=1) {
129 if(v[i] == parameterName) return v[i+1];
135 vector<string> SALOMEDS_IParameters::getAllParameterNames(const string& entry)
137 vector<string> v, names;
139 if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
140 v = _ap->GetStrArray(entry);
141 int length = v.size();
142 for(int i = 0; i<length; i+=2) {
143 names.push_back(v[i]);
148 vector<string> SALOMEDS_IParameters::getAllParameterValues(const string& entry)
150 vector<string> v, values;
152 if(!_ap->IsSet(entry, PT_STRARRAY)) return v;
153 v = _ap->GetStrArray(entry);
154 int length = v.size();
155 for(int i = 1; i<length; i+=2) {
156 values.push_back(v[i]);
161 int SALOMEDS_IParameters::getNbParameters(const string& entry)
164 if(!_ap->IsSet(entry, PT_STRARRAY)) return -1;
165 return _ap->GetStrArray(entry).size()/2;
168 vector<string> SALOMEDS_IParameters::getEntries()
172 if(!_ap->IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY)) return v;
173 return _ap->GetStrArray(_AP_ENTRIES_LIST_);
176 void SALOMEDS_IParameters::setProperty(const string& name, const std::string& value)
179 if(!_ap->IsSet(name, PT_STRING)) {
180 append(_AP_PROPERTIES_LIST_, name); //Add the property to the internal list of properties
182 _ap->SetString(name, value);
185 string SALOMEDS_IParameters::getProperty(const string& name)
188 if(!_ap->IsSet(name, PT_STRING)) return "";
189 return _ap->GetString(name);
192 vector<string> SALOMEDS_IParameters::getProperties()
196 if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v;
197 return _ap->GetStrArray(_AP_PROPERTIES_LIST_);
201 vector<string> SALOMEDS_IParameters::parseValue(const string& value, const char separator, bool fromEnd)
206 if(fromEnd) pos = val.rfind(separator);
207 else pos = val.find(separator);
215 part1 = val.substr(0, pos);
216 part2 = val.substr(pos+1, val.size());
222 string SALOMEDS_IParameters::encodeEntry(const string& entry, const string& compName)
224 string tail(entry, 6, entry.length()-1);
225 string newEntry(compName);
226 newEntry+=("_"+tail);
230 string SALOMEDS_IParameters::decodeEntry(const string& entry)
232 if(!_study) return entry;
233 int pos = entry.rfind("_");
234 if(pos < 0 || pos >= entry.length()) return entry;
236 string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
238 if(_compNames.find(compName) == _compNames.end()) {
239 _PTR(SObject) so = _study->FindComponent(compName);
240 if(!so) return entry;
241 compID = so->GetID();
242 _compNames[compName] = compID;
244 else compID = _compNames[compName];
246 string newEntry(compID);
247 newEntry += (":"+tail);
252 void SALOMEDS_IParameters::setDumpPython(_PTR(Study) study, const string& theID)
255 if(theID == "") anID = getDefaultVisualComponent();
258 _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
259 ap->SetBool(_AP_DUMP_PYTHON_, !isDumpPython(study, theID));
262 bool SALOMEDS_IParameters::isDumpPython(_PTR(Study) study, const string& theID)
265 if(theID == "") anID = getDefaultVisualComponent();
268 _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
269 if(!ap) return false;
270 if(!ap->IsSet(_AP_DUMP_PYTHON_, PT_BOOLEAN)) return false;
271 return (bool)ap->GetBool(_AP_DUMP_PYTHON_);
274 string SALOMEDS_IParameters::getDefaultVisualComponent()
276 return "Interface Applicative";