Salome HOME
NRI : Temporary modification for reading catalog of modules.
[modules/kernel.git] / src / SALOMEGUI / QAD_Settings.cxx
1 using namespace std;
2 //  File      : QAD_Settings.cxx
3 //  Created   : Tue Sep 04 09:28:02 2001
4 //  Author    : Nicolas REJNERI
5 //  Project   : SALOME
6 //  Module    : SALOMEGUI
7 //  Copyright : Open CASCADE
8 //  $Header$
9
10
11 #include "QAD_Settings.h"
12
13 #include <stdio.h>
14
15 // QT Includes
16 #include <qfile.h>
17 #include <qregexp.h>
18 #include <qstring.h>
19 #include <qtextstream.h>
20
21 /*!
22     Class QAD_Settings is a base class for different kind of settings
23     (identifying strings and values). 
24 */
25 QAD_Settings::QAD_Settings(QString _sectionName,
26                            QChar _nameStarter, QChar _nameStopper,
27                            QChar _valueStarter, QChar _valueStopper)
28 {
29   sectionName  = _sectionName;
30   nameStarter  = _nameStarter;
31   nameStopper  = _nameStopper;
32   valueStarter = _valueStarter;
33   valueStopper = _valueStopper;
34   settingList.setAutoDelete(true);
35 }
36
37 /*!
38     Constructor.
39 */
40 QAD_Settings::QAD_Settings(QString _sectionName,
41                            QChar _nameStarter,
42                            QChar _separator,
43                            QChar _valueStopper)
44 {
45   sectionName  = _sectionName;
46   nameStarter  = _nameStarter;
47   nameStopper  = _separator;
48   valueStopper = _valueStopper;
49   valueStarter=0;
50   settingList.setAutoDelete(true);
51 }
52 /*!
53     Constructor.
54 */
55 QAD_Settings::QAD_Settings(QChar _nameStopper, QChar _valueStarter,
56                            QChar _valueStopper)
57 {
58   sectionName = "";
59   nameStarter = 0;
60   nameStopper  = _nameStopper;
61   valueStarter = _valueStarter;
62   valueStopper = _valueStopper;
63   settingList.setAutoDelete(true);
64 }
65
66
67 /*!
68     Destructor.
69 */
70 QAD_Settings::~QAD_Settings()
71 {
72 }
73
74
75 /*!
76     Clears all settings.
77 */
78 void QAD_Settings::clear()
79 {
80   settingList.clear();
81 }
82
83
84 /*!
85     Adds a setting. If a setting with the given name is already defined it
86     gets overwritten.
87 */
88 void QAD_Settings::addSetting(QString _name, QString _value, bool _autoValue)
89 {
90   // Remove all settings with the same name:
91   removeSettings(_name.simplifyWhiteSpace());
92
93   // Add new setting:
94   QAD_Setting* newSetting = new QAD_Setting(_name.simplifyWhiteSpace(),
95                                             _value.simplifyWhiteSpace(),
96                                             _autoValue);
97   settingList.append(newSetting);
98 }
99
100
101 /*!
102     Adds an int setting. If a setting with the given name is already defined it
103     gets overwritten.
104 */
105 void QAD_Settings::addSetting(QString _name, int _value, bool _autoValue)
106 {
107   QString strVal;
108   strVal.setNum(_value);
109
110   addSetting(_name, strVal, _autoValue);
111 }
112
113 /*!
114     Adds a double setting. If a setting with the given name is already defined it
115     gets overwritten.
116 */
117 void QAD_Settings::addSetting(QString _name, double _value, bool _autoValue)
118 {
119   QString strVal;
120   strVal.setNum(_value);
121
122   addSetting(_name, strVal, _autoValue);
123 }
124
125
126 /*!
127     Removes all setting with the given name (should be unique anyway).
128 */
129 bool QAD_Settings::removeSettings(QString name)
130 {
131   QAD_Setting* s;
132   bool ret=false;
133
134   for(s=settingList.first(); s!=0;) {
135     if(s->getName()==name) {
136       settingList.remove(s);
137       s=settingList.current();
138       ret=true;
139     }
140     else {
141       s=settingList.next();
142     }
143   }
144
145   return ret;
146 }
147
148
149 /*!
150     Removes all setting which are not automatically generated.
151 */
152 void QAD_Settings::removeNonAutoSettings()
153 {
154   QAD_Setting* s;
155
156   for(s=settingList.first(); s!=0;) {
157     if(!s->isAutoValue()) {
158       settingList.remove(s);
159       s=settingList.current();
160     }
161     else {
162       s=settingList.next();
163     }
164   }
165 }
166
167
168 /*!
169    Gets the setting value of the given setting.
170 */
171 QString QAD_Settings::getSetting(QString name)
172 {
173   QAD_Setting* s;
174   
175   for(s=settingList.first(); s!=0; s=settingList.next()) {
176     if(s->getName()==name) return s->getValue();
177   }
178
179   return "";
180 }
181
182 /*!
183     Replaces variables in the given string by their values.
184 */
185 QString QAD_Settings::replace(QString str)
186 {
187   if(!str.contains('$')) return str;
188
189   QAD_Setting* t;
190   QString result=str.copy();
191   int i;
192   bool found;
193
194   // Replace until we have no occurences of variables or recursive counter>16:
195   do {
196     found=false;
197     for(t=settingList.first(); t!=0; t=settingList.next()) {
198       if(result.contains('$')) {
199         i=0;
200         do {
201           i = result.find(QRegExp("\\$" + t->getName() + "[^a-zA-z0-9_]"), i);
202           if(i!=-1) {
203             result.replace(i, (int)t->getName().length()+1, t->getValue());
204             found=true;
205           }
206         }while(i!=-1);
207       }
208       else goto end;
209     }
210   } while(found);
211
212   end:
213
214   return result;
215 }
216
217 /*!
218   Returns true if list contains given setting
219 */
220 bool QAD_Settings::hasSetting(QString name)
221 {
222   QAD_Setting* s;
223   
224   for(s=settingList.first(); s!=0; s=settingList.next()) {
225     if(s->getName()==name) return true;
226   }
227   return false;
228 }
229
230 // EOF
231