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