1 // File: QtxResourceEdit.cxx
2 // Author: Sergey TELKOV
4 #include "QtxResourceEdit.h"
6 #include "QtxResourceMgr.h"
10 Descr: Class for managing preferences items
13 QtxResourceEdit::QtxResourceEdit( QtxResourceMgr* mgr )
18 QtxResourceEdit::~QtxResourceEdit()
20 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
24 QtxResourceMgr* QtxResourceEdit::resourceMgr() const
29 int QtxResourceEdit::addItem( const QString& label, const int pId, const int type,
30 const QString& section, const QString& param )
32 Item* i = createItem( label, type, pId );
36 if ( !myItems.contains( i->id() ) )
38 myItems.insert( i->id(), i );
41 i->setResource( section, param );
43 if ( !i->parentItem() && !myChildren.contains( i ) )
44 myChildren.append( i );
52 QVariant QtxResourceEdit::itemProperty( const int id, const QString& propName ) const
57 propValue = i->property( propName );
61 void QtxResourceEdit::setItemProperty( const int id, const QString& propName, const QVariant& propValue )
65 i->setProperty( propName, propValue );
68 void QtxResourceEdit::resource( const int id, QString& sec, QString& param ) const
72 i->resource( sec, param );
75 void QtxResourceEdit::store()
77 QMap<Item*, QString> before;
78 resourceValues( before );
80 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
83 QMap<Item*, QString> after;
84 resourceValues( after );
86 QMap<Item*, QString> changed;
87 differentValues( before, after, changed );
89 changedResources( changed );
92 void QtxResourceEdit::retrieve()
94 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
95 it.data()->retrieve();
98 void QtxResourceEdit::toBackup()
101 resourceValues( myBackup );
104 void QtxResourceEdit::fromBackup()
106 QMap<Item*, QString> before;
107 resourceValues( before );
109 setResourceValues( myBackup );
111 QMap<Item*, QString> after;
112 resourceValues( after );
114 QMap<Item*, QString> changed;
115 differentValues( before, after, changed );
117 changedResources( changed );
120 void QtxResourceEdit::update()
124 QtxResourceEdit::Item* QtxResourceEdit::item( const int id ) const
127 if ( myItems.contains( id ) )
132 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title ) const
135 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
137 if ( it.data()->title() == title )
143 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title, const int pId ) const
146 Item* pItem = item( pId );
147 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
149 if ( it.data()->parentItem() == pItem && it.data()->title() == title )
155 QtxResourceEdit::Item* QtxResourceEdit::createItem( const QString& label, const int type, const int pId )
159 i = createItem( label, type );
162 Item* pItem = item( pId );
165 i = pItem->createItem( label, type );
166 pItem->insertChild( i );
173 void QtxResourceEdit::removeItem( Item* item )
178 myChildren.remove( item );
179 myItems.remove( item->id() );
184 void QtxResourceEdit::childItems( QPtrList<Item>& lst ) const
187 for ( QPtrListIterator<Item> it( myChildren ); it.current(); ++it )
188 lst.append( it.current() );
191 void QtxResourceEdit::resourceValues( QMap<int, QString>& map ) const
194 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
196 it.data()->resource( sect, name );
197 if( myResMgr->hasValue( sect, name ) )
198 map.insert( it.key(), it.data()->resourceValue() );
202 void QtxResourceEdit::resourceValues( QMap<Item*, QString>& map ) const
205 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
207 it.data()->resource( sect, name );
208 if( myResMgr->hasValue( sect, name ) )
209 map.insert( it.data(), it.data()->resourceValue() );
213 void QtxResourceEdit::setResourceValues( QMap<int, QString>& map ) const
215 for ( QMap<int, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
217 Item* i = item( it.key() );
219 i->setResourceValue( it.data() );
223 void QtxResourceEdit::setResourceValues( QMap<Item*, QString>& map ) const
225 for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
226 it.key()->setResourceValue( it.data() );
230 void QtxResourceEdit::differentValues( const QMap<int, QString>& map1, const QMap<int, QString>& map2,
231 QMap<int, QString>& resMap, const bool fromFirst ) const
234 const QMap<int, QString>& later = fromFirst ? map1 : map2;
235 const QMap<int, QString>& early = fromFirst ? map2 : map1;
237 for ( QMap<int, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
239 if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
240 resMap.insert( it.key(), it.data() );
244 void QtxResourceEdit::differentValues( const QMap<Item*, QString>& map1, const QMap<Item*, QString>& map2,
245 QMap<Item*, QString>& resMap, const bool fromFirst ) const
248 const QMap<Item*, QString>& later = fromFirst ? map1 : map2;
249 const QMap<Item*, QString>& early = fromFirst ? map2 : map1;
251 for ( QMap<Item*, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
253 if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
254 resMap.insert( it.key(), it.data() );
258 void QtxResourceEdit::changedResources( const QMap<Item*, QString>& )
262 void QtxResourceEdit::itemAdded( Item* )
266 void QtxResourceEdit::itemRemoved( Item* )
271 Class: QtxResourceEdit::Item
272 Descr: Class for incapsulation of one preference item
275 QtxResourceEdit::Item::Item( QtxResourceEdit* edit, Item* parent )
282 parent->insertChild( this );
285 QtxResourceEdit::Item::~Item()
287 if ( resourceEdit() )
288 resourceEdit()->removeItem( this );
291 int QtxResourceEdit::Item::id() const
296 QtxResourceEdit::Item* QtxResourceEdit::Item::parentItem() const
301 void QtxResourceEdit::Item::insertChild( Item* item )
303 if ( !item || myChildren.contains( item ) )
306 if ( item->parentItem() && item->parentItem() != this )
307 item->parentItem()->removeChild( item );
309 item->myParent = this;
310 myChildren.append( item );
313 void QtxResourceEdit::Item::removeChild( Item* item )
315 if ( !item || !myChildren.contains( item ) )
318 myChildren.remove( item );
322 void QtxResourceEdit::Item::childItems( QPtrList<Item>& lst ) const
324 for ( ItemListIterator it( myChildren ); it.current(); ++it )
325 lst.append( it.current() );
328 bool QtxResourceEdit::Item::isEmpty() const
330 return myChildren.isEmpty();
333 QString QtxResourceEdit::Item::title() const
338 void QtxResourceEdit::Item::resource( QString& sec, QString& param ) const
341 param = myResParameter;
344 void QtxResourceEdit::Item::setTitle( const QString& title )
349 void QtxResourceEdit::Item::setResource( const QString& sec, const QString& param )
352 myResParameter = param;
355 void QtxResourceEdit::Item::update()
359 QVariant QtxResourceEdit::Item::property( const QString& ) const
364 void QtxResourceEdit::Item::setProperty( const QString&, const QVariant& )
368 QString QtxResourceEdit::Item::resourceValue() const
373 void QtxResourceEdit::Item::setResourceValue( const QString& val )
378 QtxResourceMgr* QtxResourceEdit::Item::resourceMgr() const
380 QtxResourceMgr* resMgr = 0;
381 if ( resourceEdit() )
382 resMgr = resourceEdit()->resourceMgr();
386 QtxResourceEdit* QtxResourceEdit::Item::resourceEdit() const
391 int QtxResourceEdit::Item::getInteger( const int val ) const
393 QtxResourceMgr* resMgr = resourceMgr();
394 return resMgr ? resMgr->integerValue( myResSection, myResParameter, val ) : val;
397 double QtxResourceEdit::Item::getDouble( const double val ) const
399 QtxResourceMgr* resMgr = resourceMgr();
400 return resMgr ? resMgr->doubleValue( myResSection, myResParameter, val ) : val;
403 bool QtxResourceEdit::Item::getBoolean( const bool val ) const
405 QtxResourceMgr* resMgr = resourceMgr();
406 return resMgr ? resMgr->booleanValue( myResSection, myResParameter, val ) : val;
409 QString QtxResourceEdit::Item::getString( const QString& val ) const
411 QtxResourceMgr* resMgr = resourceMgr();
412 return resMgr ? resMgr->stringValue( myResSection, myResParameter, val ) : val;
415 QColor QtxResourceEdit::Item::getColor( const QColor& val ) const
417 QtxResourceMgr* resMgr = resourceMgr();
418 return resMgr ? resMgr->colorValue( myResSection, myResParameter, val ) : val;
421 QFont QtxResourceEdit::Item::getFont( const QFont& val ) const
423 QtxResourceMgr* resMgr = resourceMgr();
424 return resMgr ? resMgr->fontValue( myResSection, myResParameter, val ) : val;
427 void QtxResourceEdit::Item::setInteger( const int val )
429 QtxResourceMgr* resMgr = resourceMgr();
431 resMgr->setValue( myResSection, myResParameter, val );
434 void QtxResourceEdit::Item::setDouble( const double val )
436 QtxResourceMgr* resMgr = resourceMgr();
438 resMgr->setValue( myResSection, myResParameter, val );
441 void QtxResourceEdit::Item::setBoolean( const bool val )
443 QtxResourceMgr* resMgr = resourceMgr();
445 resMgr->setValue( myResSection, myResParameter, val );
448 void QtxResourceEdit::Item::setString( const QString& val )
450 QtxResourceMgr* resMgr = resourceMgr();
452 resMgr->setValue( myResSection, myResParameter, val );
455 void QtxResourceEdit::Item::setColor( const QColor& val )
457 QtxResourceMgr* resMgr = resourceMgr();
459 resMgr->setValue( myResSection, myResParameter, val );
462 void QtxResourceEdit::Item::setFont( const QFont& val )
464 QtxResourceMgr* resMgr = resourceMgr();
466 resMgr->setValue( myResSection, myResParameter, val );
469 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const int id ) const
471 return resourceEdit() ? resourceEdit()->item( id ) : 0;
474 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title ) const
476 return resourceEdit() ? resourceEdit()->item( title ) : 0;
479 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title, const int id ) const
481 return resourceEdit() ? resourceEdit()->item( title, id ) : 0;
484 int QtxResourceEdit::Item::generateId()