Salome HOME
Fixing a bug : Salome GUI style needs addLibraryPath() method to be called
[modules/gui.git] / src / Qtx / QtxResourceEdit.cxx
1 // File:      QtxResourceEdit.cxx
2 // Author:    Sergey TELKOV
3
4 #include "QtxResourceEdit.h"
5
6 #include "QtxResourceMgr.h"
7
8 /*
9   Class: QtxResourceEdit
10   Descr: Class for managing preferences items
11 */
12
13 QtxResourceEdit::QtxResourceEdit( QtxResourceMgr* mgr )
14 : myResMgr( mgr )
15 {
16 }
17
18 QtxResourceEdit::~QtxResourceEdit()
19 {
20   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
21     delete it.data();
22 }
23
24 QtxResourceMgr* QtxResourceEdit::resourceMgr() const
25 {
26   return myResMgr;
27 }
28
29 int QtxResourceEdit::addItem( const QString& label, const int pId, const int type,
30                               const QString& section, const QString& param )
31 {
32   Item* i = createItem( label, type, pId );
33   if ( !i )
34     return -1;
35
36   myItems.insert( i->id(), i );
37
38   i->setTitle( label );
39   i->setResource( section, param );
40
41   return i->id();
42 }
43
44 QVariant QtxResourceEdit::property( const int id, const QString& propName ) const
45 {
46   QVariant propValue;
47   Item* i = item( id );
48   if ( i )
49     propValue = i->property( propName );
50   return propValue;
51 }
52
53 void QtxResourceEdit::setProperty( const int id, const QString& propName, const QVariant& propValue )
54 {
55   Item* i = item( id );
56   if ( i )
57     i->setProperty( propName, propValue );
58 }
59
60 void QtxResourceEdit::resource( const int id, QString& sec, QString& param ) const
61 {
62   Item* i = item( id );
63   if ( i )
64     i->resource( sec, param );
65 }
66
67 void QtxResourceEdit::store()
68 {
69   QMap<Item*, QString> before;
70   resourceValues( before );
71
72   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
73     it.data()->store();
74
75   QMap<Item*, QString> after;
76   resourceValues( after );
77
78   QMap<Item*, QString> changed;
79   differentValues( before, after, changed );
80
81   changedResources( changed );
82 }
83
84 void QtxResourceEdit::retrieve()
85 {
86   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
87     it.data()->retrieve();
88 }
89
90 void QtxResourceEdit::toBackup()
91 {
92   myBackup.clear();
93   resourceValues( myBackup );
94 }
95
96 void QtxResourceEdit::fromBackup()
97 {
98   setResourceValues( myBackup );
99 }
100
101 void QtxResourceEdit::update()
102 {
103 }
104
105 QtxResourceEdit::Item* QtxResourceEdit::item( const int id ) const
106 {
107   Item* i = 0;
108   if ( myItems.contains( id ) )
109     i = myItems[id];
110   return i;
111 }
112
113 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title ) const
114 {
115   Item* i = 0;
116   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
117   {
118     if ( it.data()->title() == title )
119       i = it.data();
120   }
121   return i;
122 }
123
124 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title, const int pId ) const
125 {
126   Item* i = 0;
127   Item* pItem = item( pId );
128   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
129   {
130     if ( it.data()->parentItem() == pItem && it.data()->title() == title )
131       i = it.data();
132   }
133   return i;
134 }
135
136 QtxResourceEdit::Item* QtxResourceEdit::createItem( const QString& label, const int type, const int pId )
137 {
138   Item* i = 0;
139   if ( pId < 0 )
140     i = createItem( label, type );
141   else
142   {
143     Item* pItem = item( pId );
144     if ( pItem )
145       i = pItem->createItem( label, type );
146   }
147
148   return i;
149 }
150
151 void QtxResourceEdit::removeItem( Item* item )
152 {
153   if ( !item )
154     return;
155
156   myItems.remove( item->id() );
157 }
158
159 void QtxResourceEdit::resourceValues( QMap<int, QString>& map ) const
160 {
161   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
162     map.insert( it.key(), it.data()->resourceValue() );
163 }
164
165 void QtxResourceEdit::resourceValues( QMap<Item*, QString>& map ) const
166 {
167   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
168     map.insert( it.data(), it.data()->resourceValue() );
169 }
170
171 void QtxResourceEdit::setResourceValues( QMap<int, QString>& map ) const
172 {
173   for ( QMap<int, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
174   {
175     Item* i = item( it.key() );
176     if ( i )
177       i->setResourceValue( it.data() );
178   }
179 }
180
181 void QtxResourceEdit::setResourceValues( QMap<Item*, QString>& map ) const
182 {
183   for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
184     it.key()->setResourceValue( it.data() );
185 }
186
187
188 void QtxResourceEdit::differentValues( const QMap<int, QString>& map1, const QMap<int, QString>& map2,
189                                        QMap<int, QString>& resMap, const bool fromFirst ) const
190 {
191   resMap.clear();
192   const QMap<int, QString>& later = fromFirst ? map1 : map2;
193   const QMap<int, QString>& early = fromFirst ? map2 : map1;
194
195   for ( QMap<int, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
196   {
197     if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
198       resMap.insert( it.key(), it.data() );
199   }
200 }
201
202 void QtxResourceEdit::differentValues( const QMap<Item*, QString>& map1, const QMap<Item*, QString>& map2,
203                                        QMap<Item*, QString>& resMap, const bool fromFirst ) const
204 {
205   resMap.clear();
206   const QMap<Item*, QString>& later = fromFirst ? map1 : map2;
207   const QMap<Item*, QString>& early = fromFirst ? map2 : map1;
208
209   for ( QMap<Item*, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
210   {
211     if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
212       resMap.insert( it.key(), it.data() );
213   }
214 }
215
216 void QtxResourceEdit::changedResources( const QMap<Item*, QString>& )
217 {
218 }
219
220 /*
221   Class: QtxResourceEdit::Item
222   Descr: Class for incapsulation of one preference item
223 */
224
225 QtxResourceEdit::Item::Item( QtxResourceEdit* edit, Item* parent )
226 : myEdit( edit ),
227 myParent( parent )
228 {
229   myId = generateId();
230 }
231
232 QtxResourceEdit::Item::~Item()
233 {
234   if ( resourceEdit() )
235     resourceEdit()->removeItem( this );
236 }
237
238 int QtxResourceEdit::Item::id() const
239 {
240   return myId;
241 }
242
243 QtxResourceEdit::Item* QtxResourceEdit::Item::parentItem() const
244 {
245   return myParent;
246 }
247
248 void QtxResourceEdit::Item::childItems( QPtrList<Item>& lst ) const
249 {
250   for ( ItemListIterator it( myChildren ); it.current(); ++it )
251     lst.append( it.current() );
252 }
253
254 QString QtxResourceEdit::Item::title() const
255 {
256   return myTitle;
257 }
258
259 void QtxResourceEdit::Item::resource( QString& sec, QString& param ) const
260 {
261   sec = myResSection;
262   param = myResParameter;
263 }
264
265 void QtxResourceEdit::Item::setTitle( const QString& title )
266 {
267   myTitle = title;
268 }
269
270 void QtxResourceEdit::Item::setResource( const QString& sec, const QString& param )
271 {
272   myResSection = sec;
273   myResParameter = param;
274 }
275
276 void QtxResourceEdit::Item::update()
277 {
278 }
279
280 QVariant QtxResourceEdit::Item::property( const QString& ) const
281 {
282   return QVariant();
283 }
284
285 void QtxResourceEdit::Item::setProperty( const QString&, const QVariant& )
286 {
287 }
288
289 QString QtxResourceEdit::Item::resourceValue() const
290 {
291   return getString();
292 }
293
294 void QtxResourceEdit::Item::setResourceValue( const QString& val )
295 {
296   setString( val );
297 }
298
299 QtxResourceMgr* QtxResourceEdit::Item::resourceMgr() const
300 {
301   QtxResourceMgr* resMgr = 0;
302   if ( resourceEdit() )
303     resMgr = resourceEdit()->resourceMgr();
304   return resMgr;
305 }
306
307 QtxResourceEdit* QtxResourceEdit::Item::resourceEdit() const
308 {
309   return myEdit;
310 }
311
312 int QtxResourceEdit::Item::getInteger( const int val ) const
313 {
314   QtxResourceMgr* resMgr = resourceMgr();
315   return resMgr ? resMgr->integerValue( myResSection, myResParameter, val ) : val;
316 }
317
318 double QtxResourceEdit::Item::getDouble( const double val ) const
319 {
320   QtxResourceMgr* resMgr = resourceMgr();
321   return resMgr ? resMgr->doubleValue( myResSection, myResParameter, val ) : val;
322 }
323
324 bool QtxResourceEdit::Item::getBoolean( const bool val ) const
325 {
326   QtxResourceMgr* resMgr = resourceMgr();
327   return resMgr ? resMgr->booleanValue( myResSection, myResParameter, val ) : val;
328 }
329
330 QString QtxResourceEdit::Item::getString( const QString& val ) const
331 {
332   QtxResourceMgr* resMgr = resourceMgr();
333   return resMgr ? resMgr->stringValue( myResSection, myResParameter, val ) : val;
334 }
335
336 QColor QtxResourceEdit::Item::getColor( const QColor& val ) const
337 {
338   QtxResourceMgr* resMgr = resourceMgr();
339   return resMgr ? resMgr->colorValue( myResSection, myResParameter, val ) : val;
340 }
341
342 void QtxResourceEdit::Item::setInteger( const int val )
343 {
344   QtxResourceMgr* resMgr = resourceMgr();
345   if ( resMgr )
346     resMgr->setValue( myResSection, myResParameter, val );
347 }
348
349 void QtxResourceEdit::Item::setDouble( const double val )
350 {
351   QtxResourceMgr* resMgr = resourceMgr();
352   if ( resMgr )
353     resMgr->setValue( myResSection, myResParameter, val );
354 }
355
356 void QtxResourceEdit::Item::setBoolean( const bool val )
357 {
358   QtxResourceMgr* resMgr = resourceMgr();
359   if ( resMgr )
360     resMgr->setValue( myResSection, myResParameter, val );
361 }
362
363 void QtxResourceEdit::Item::setString( const QString& val )
364 {
365   QtxResourceMgr* resMgr = resourceMgr();
366   if ( resMgr )
367     resMgr->setValue( myResSection, myResParameter, val );
368 }
369
370 void QtxResourceEdit::Item::setColor( const QColor& val )
371 {
372   QtxResourceMgr* resMgr = resourceMgr();
373   if ( resMgr )
374     resMgr->setValue( myResSection, myResParameter, val );
375 }
376
377 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const int id ) const
378 {
379   return resourceEdit() ? resourceEdit()->item( id ) : 0;
380 }
381
382 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title ) const
383 {
384   return resourceEdit() ? resourceEdit()->item( title ) : 0;
385 }
386
387 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title, const int id ) const
388 {
389   return resourceEdit() ? resourceEdit()->item( title, id ) : 0;
390 }
391
392 int QtxResourceEdit::Item::generateId()
393 {
394   static int _id = 0;
395   return _id++;
396 }