Salome HOME
Splash screen was implemented. Changes in packages SUIT and Session are integrated.
[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   QMap<Item*, QString> before;
99   resourceValues( before );
100
101   setResourceValues( myBackup );
102
103   QMap<Item*, QString> after;
104   resourceValues( after );
105
106   QMap<Item*, QString> changed;
107   differentValues( before, after, changed );
108
109   changedResources( changed );
110 }
111
112 void QtxResourceEdit::update()
113 {
114 }
115
116 QtxResourceEdit::Item* QtxResourceEdit::item( const int id ) const
117 {
118   Item* i = 0;
119   if ( myItems.contains( id ) )
120     i = myItems[id];
121   return i;
122 }
123
124 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title ) const
125 {
126   Item* i = 0;
127   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
128   {
129     if ( it.data()->title() == title )
130       i = it.data();
131   }
132   return i;
133 }
134
135 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title, const int pId ) const
136 {
137   Item* i = 0;
138   Item* pItem = item( pId );
139   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
140   {
141     if ( it.data()->parentItem() == pItem && it.data()->title() == title )
142       i = it.data();
143   }
144   return i;
145 }
146
147 QtxResourceEdit::Item* QtxResourceEdit::createItem( const QString& label, const int type, const int pId )
148 {
149   Item* i = 0;
150   if ( pId < 0 )
151     i = createItem( label, type );
152   else
153   {
154     Item* pItem = item( pId );
155     if ( pItem )
156       i = pItem->createItem( label, type );
157   }
158
159   return i;
160 }
161
162 void QtxResourceEdit::removeItem( Item* item )
163 {
164   if ( !item )
165     return;
166
167   myItems.remove( item->id() );
168 }
169
170 void QtxResourceEdit::resourceValues( QMap<int, QString>& map ) const
171 {
172   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
173     map.insert( it.key(), it.data()->resourceValue() );
174 }
175
176 void QtxResourceEdit::resourceValues( QMap<Item*, QString>& map ) const
177 {
178   for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
179     map.insert( it.data(), it.data()->resourceValue() );
180 }
181
182 void QtxResourceEdit::setResourceValues( QMap<int, QString>& map ) const
183 {
184   for ( QMap<int, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
185   {
186     Item* i = item( it.key() );
187     if ( i )
188       i->setResourceValue( it.data() );
189   }
190 }
191
192 void QtxResourceEdit::setResourceValues( QMap<Item*, QString>& map ) const
193 {
194   for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
195     it.key()->setResourceValue( it.data() );
196 }
197
198
199 void QtxResourceEdit::differentValues( const QMap<int, QString>& map1, const QMap<int, QString>& map2,
200                                        QMap<int, QString>& resMap, const bool fromFirst ) const
201 {
202   resMap.clear();
203   const QMap<int, QString>& later = fromFirst ? map1 : map2;
204   const QMap<int, QString>& early = fromFirst ? map2 : map1;
205
206   for ( QMap<int, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
207   {
208     if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
209       resMap.insert( it.key(), it.data() );
210   }
211 }
212
213 void QtxResourceEdit::differentValues( const QMap<Item*, QString>& map1, const QMap<Item*, QString>& map2,
214                                        QMap<Item*, QString>& resMap, const bool fromFirst ) const
215 {
216   resMap.clear();
217   const QMap<Item*, QString>& later = fromFirst ? map1 : map2;
218   const QMap<Item*, QString>& early = fromFirst ? map2 : map1;
219
220   for ( QMap<Item*, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
221   {
222     if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
223       resMap.insert( it.key(), it.data() );
224   }
225 }
226
227 void QtxResourceEdit::changedResources( const QMap<Item*, QString>& )
228 {
229 }
230
231 /*
232   Class: QtxResourceEdit::Item
233   Descr: Class for incapsulation of one preference item
234 */
235
236 QtxResourceEdit::Item::Item( QtxResourceEdit* edit, Item* parent )
237 : myEdit( edit ),
238 myParent( parent )
239 {
240   myId = generateId();
241 }
242
243 QtxResourceEdit::Item::~Item()
244 {
245   if ( resourceEdit() )
246     resourceEdit()->removeItem( this );
247 }
248
249 int QtxResourceEdit::Item::id() const
250 {
251   return myId;
252 }
253
254 QtxResourceEdit::Item* QtxResourceEdit::Item::parentItem() const
255 {
256   return myParent;
257 }
258
259 void QtxResourceEdit::Item::childItems( QPtrList<Item>& lst ) const
260 {
261   for ( ItemListIterator it( myChildren ); it.current(); ++it )
262     lst.append( it.current() );
263 }
264
265 QString QtxResourceEdit::Item::title() const
266 {
267   return myTitle;
268 }
269
270 void QtxResourceEdit::Item::resource( QString& sec, QString& param ) const
271 {
272   sec = myResSection;
273   param = myResParameter;
274 }
275
276 void QtxResourceEdit::Item::setTitle( const QString& title )
277 {
278   myTitle = title;
279 }
280
281 void QtxResourceEdit::Item::setResource( const QString& sec, const QString& param )
282 {
283   myResSection = sec;
284   myResParameter = param;
285 }
286
287 void QtxResourceEdit::Item::update()
288 {
289 }
290
291 QVariant QtxResourceEdit::Item::property( const QString& ) const
292 {
293   return QVariant();
294 }
295
296 void QtxResourceEdit::Item::setProperty( const QString&, const QVariant& )
297 {
298 }
299
300 QString QtxResourceEdit::Item::resourceValue() const
301 {
302   return getString();
303 }
304
305 void QtxResourceEdit::Item::setResourceValue( const QString& val )
306 {
307   setString( val );
308 }
309
310 QtxResourceMgr* QtxResourceEdit::Item::resourceMgr() const
311 {
312   QtxResourceMgr* resMgr = 0;
313   if ( resourceEdit() )
314     resMgr = resourceEdit()->resourceMgr();
315   return resMgr;
316 }
317
318 QtxResourceEdit* QtxResourceEdit::Item::resourceEdit() const
319 {
320   return myEdit;
321 }
322
323 int QtxResourceEdit::Item::getInteger( const int val ) const
324 {
325   QtxResourceMgr* resMgr = resourceMgr();
326   return resMgr ? resMgr->integerValue( myResSection, myResParameter, val ) : val;
327 }
328
329 double QtxResourceEdit::Item::getDouble( const double val ) const
330 {
331   QtxResourceMgr* resMgr = resourceMgr();
332   return resMgr ? resMgr->doubleValue( myResSection, myResParameter, val ) : val;
333 }
334
335 bool QtxResourceEdit::Item::getBoolean( const bool val ) const
336 {
337   QtxResourceMgr* resMgr = resourceMgr();
338   return resMgr ? resMgr->booleanValue( myResSection, myResParameter, val ) : val;
339 }
340
341 QString QtxResourceEdit::Item::getString( const QString& val ) const
342 {
343   QtxResourceMgr* resMgr = resourceMgr();
344   return resMgr ? resMgr->stringValue( myResSection, myResParameter, val ) : val;
345 }
346
347 QColor QtxResourceEdit::Item::getColor( const QColor& val ) const
348 {
349   QtxResourceMgr* resMgr = resourceMgr();
350   return resMgr ? resMgr->colorValue( myResSection, myResParameter, val ) : val;
351 }
352
353 void QtxResourceEdit::Item::setInteger( const int val )
354 {
355   QtxResourceMgr* resMgr = resourceMgr();
356   if ( resMgr )
357     resMgr->setValue( myResSection, myResParameter, val );
358 }
359
360 void QtxResourceEdit::Item::setDouble( const double val )
361 {
362   QtxResourceMgr* resMgr = resourceMgr();
363   if ( resMgr )
364     resMgr->setValue( myResSection, myResParameter, val );
365 }
366
367 void QtxResourceEdit::Item::setBoolean( const bool val )
368 {
369   QtxResourceMgr* resMgr = resourceMgr();
370   if ( resMgr )
371     resMgr->setValue( myResSection, myResParameter, val );
372 }
373
374 void QtxResourceEdit::Item::setString( const QString& val )
375 {
376   QtxResourceMgr* resMgr = resourceMgr();
377   if ( resMgr )
378     resMgr->setValue( myResSection, myResParameter, val );
379 }
380
381 void QtxResourceEdit::Item::setColor( const QColor& val )
382 {
383   QtxResourceMgr* resMgr = resourceMgr();
384   if ( resMgr )
385     resMgr->setValue( myResSection, myResParameter, val );
386 }
387
388 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const int id ) const
389 {
390   return resourceEdit() ? resourceEdit()->item( id ) : 0;
391 }
392
393 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title ) const
394 {
395   return resourceEdit() ? resourceEdit()->item( title ) : 0;
396 }
397
398 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title, const int id ) const
399 {
400   return resourceEdit() ? resourceEdit()->item( title, id ) : 0;
401 }
402
403 int QtxResourceEdit::Item::generateId()
404 {
405   static int _id = 0;
406   return _id++;
407 }