1 // Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #include "SALOMEDS_IParameters.hxx"
20 #include <utilities.h>
22 #include <TCollection_AsciiString.hxx>
30 #define PT_REALARRAY 4
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"
42 SALOMEDS_IParameters::SALOMEDS_IParameters(const _PTR(AttributeParameter)& ap)
46 _PTR(SObject) so = _ap->GetSObject();
47 _study = so->GetStudy();
50 SALOMEDS_IParameters::~SALOMEDS_IParameters()
55 int SALOMEDS_IParameters::append(const string& listName, const string& value)
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);
65 _ap->SetStrArray(listName, v);
67 v = _ap->GetStrArray(listName);
69 _ap->SetStrArray(listName, v);
73 int SALOMEDS_IParameters::nbValues(const string& listName)
76 if(!_ap->IsSet(listName, PT_STRARRAY)) return 0;
77 vector<string> v = _ap->GetStrArray(listName);
81 vector<string> SALOMEDS_IParameters::getValues(const string& listName)
85 if(!_ap->IsSet(listName, PT_STRARRAY)) return v;
86 return _ap->GetStrArray(listName);
90 string SALOMEDS_IParameters::getValue(const string& listName, int index)
93 if(!_ap->IsSet(listName, PT_STRARRAY)) return "";
94 vector<string> v = _ap->GetStrArray(listName);
95 if(index >= v.size()) return "";
99 vector<string> SALOMEDS_IParameters::getLists()
102 if(!_ap->IsSet(_AP_LISTS_LIST_, PT_STRARRAY)) return v;
103 return _ap->GetStrArray(_AP_LISTS_LIST_);
106 void SALOMEDS_IParameters::setParameter(const string& entry, const string& parameterName, const string& value)
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);
114 v = _ap->GetStrArray(entry);
115 v.push_back(parameterName);
117 _ap->SetStrArray(entry, v);
121 string SALOMEDS_IParameters::getParameter(const string& entry, const string& parameterName)
124 if(!_ap->IsSet(entry, PT_STRARRAY)) return "";
125 vector<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];
134 vector<string> SALOMEDS_IParameters::getAllParameterNames(const string& entry)
136 vector<string> v, names;
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]);
147 vector<string> SALOMEDS_IParameters::getAllParameterValues(const string& entry)
149 vector<string> v, values;
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]);
160 int SALOMEDS_IParameters::getNbParameters(const string& entry)
163 if(!_ap->IsSet(entry, PT_STRARRAY)) return -1;
164 return _ap->GetStrArray(entry).size()/2;
167 vector<string> SALOMEDS_IParameters::getEntries()
171 if(!_ap->IsSet(_AP_ENTRIES_LIST_, PT_STRARRAY)) return v;
172 return _ap->GetStrArray(_AP_ENTRIES_LIST_);
175 void SALOMEDS_IParameters::setProperty(const string& name, const std::string& value)
178 if(!_ap->IsSet(name, PT_STRING)) {
179 append(_AP_PROPERTIES_LIST_, name); //Add the property to the internal list of properties
181 _ap->SetString(name, value);
184 string SALOMEDS_IParameters::getProperty(const string& name)
187 if(!_ap->IsSet(name, PT_STRING)) return "";
188 return _ap->GetString(name);
191 vector<string> SALOMEDS_IParameters::getProperties()
195 if(!_ap->IsSet(_AP_PROPERTIES_LIST_, PT_STRARRAY)) return v;
196 return _ap->GetStrArray(_AP_PROPERTIES_LIST_);
200 vector<string> SALOMEDS_IParameters::parseValue(const string& value, const char separator, bool fromEnd)
202 TCollection_AsciiString val((char*)value.c_str());
205 if(fromEnd) pos = val.SearchFromEnd(separator);
206 else pos = val.Search(separator);
213 TCollection_AsciiString part1, part2;
214 part1 = val.SubString(1, pos-1);
215 part2 = val.SubString(pos+1, val.Length());
216 v.push_back(part1.ToCString());
217 v.push_back(part2.ToCString());
221 string SALOMEDS_IParameters::encodeEntry(const string& entry, const string& compName)
223 string tail(entry, 6, entry.length()-1);
224 string newEntry(compName);
225 newEntry+=("_"+tail);
229 string SALOMEDS_IParameters::decodeEntry(const string& entry)
231 if(!_study) return entry;
232 int pos = entry.rfind("_");
233 if(pos < 0 || pos >= entry.length()) return entry;
235 string compName(entry, 0, pos), compID, tail(entry, pos+1, entry.length()-1);
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;
243 else compID = _compNames[compName];
245 string newEntry(compID);
246 newEntry += (":"+tail);
251 void SALOMEDS_IParameters::setDumpPython(_PTR(Study) study, const string& theID)
254 if(theID == "") anID = getDefaultVisualComponent();
257 _PTR(AttributeParameter) ap = study->GetCommonParameters(anID, 0);
258 ap->SetBool(_AP_DUMP_PYTHON_, !isDumpPython(study, theID));
261 bool SALOMEDS_IParameters::isDumpPython(_PTR(Study) study, const string& theID)
264 if(theID == "") anID = getDefaultVisualComponent();
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_);
273 string SALOMEDS_IParameters::getDefaultVisualComponent()
275 return "Interface Applicative";