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 myItems.insert( i->id(), i );
39 i->setResource( section, param );
44 QVariant QtxResourceEdit::property( const int id, const QString& propName ) const
49 propValue = i->property( propName );
53 void QtxResourceEdit::setProperty( const int id, const QString& propName, const QVariant& propValue )
57 i->setProperty( propName, propValue );
60 void QtxResourceEdit::resource( const int id, QString& sec, QString& param ) const
64 i->resource( sec, param );
67 void QtxResourceEdit::store()
69 QMap<Item*, QString> before;
70 resourceValues( before );
72 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
75 QMap<Item*, QString> after;
76 resourceValues( after );
78 QMap<Item*, QString> changed;
79 differentValues( before, after, changed );
81 changedResources( changed );
84 void QtxResourceEdit::retrieve()
86 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
87 it.data()->retrieve();
90 void QtxResourceEdit::toBackup()
93 resourceValues( myBackup );
96 void QtxResourceEdit::fromBackup()
98 QMap<Item*, QString> before;
99 resourceValues( before );
101 setResourceValues( myBackup );
103 QMap<Item*, QString> after;
104 resourceValues( after );
106 QMap<Item*, QString> changed;
107 differentValues( before, after, changed );
109 changedResources( changed );
112 void QtxResourceEdit::update()
116 QtxResourceEdit::Item* QtxResourceEdit::item( const int id ) const
119 if ( myItems.contains( id ) )
124 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title ) const
127 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
129 if ( it.data()->title() == title )
135 QtxResourceEdit::Item* QtxResourceEdit::item( const QString& title, const int pId ) const
138 Item* pItem = item( pId );
139 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end() && !i; ++it )
141 if ( it.data()->parentItem() == pItem && it.data()->title() == title )
147 QtxResourceEdit::Item* QtxResourceEdit::createItem( const QString& label, const int type, const int pId )
151 i = createItem( label, type );
154 Item* pItem = item( pId );
156 i = pItem->createItem( label, type );
162 void QtxResourceEdit::removeItem( Item* item )
167 myItems.remove( item->id() );
170 void QtxResourceEdit::resourceValues( QMap<int, QString>& map ) const
172 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
173 map.insert( it.key(), it.data()->resourceValue() );
176 void QtxResourceEdit::resourceValues( QMap<Item*, QString>& map ) const
178 for ( ItemMap::ConstIterator it = myItems.begin(); it != myItems.end(); ++it )
179 map.insert( it.data(), it.data()->resourceValue() );
182 void QtxResourceEdit::setResourceValues( QMap<int, QString>& map ) const
184 for ( QMap<int, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
186 Item* i = item( it.key() );
188 i->setResourceValue( it.data() );
192 void QtxResourceEdit::setResourceValues( QMap<Item*, QString>& map ) const
194 for ( QMap<Item*, QString>::ConstIterator it = map.begin(); it != map.end(); ++it )
195 it.key()->setResourceValue( it.data() );
199 void QtxResourceEdit::differentValues( const QMap<int, QString>& map1, const QMap<int, QString>& map2,
200 QMap<int, QString>& resMap, const bool fromFirst ) const
203 const QMap<int, QString>& later = fromFirst ? map1 : map2;
204 const QMap<int, QString>& early = fromFirst ? map2 : map1;
206 for ( QMap<int, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
208 if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
209 resMap.insert( it.key(), it.data() );
213 void QtxResourceEdit::differentValues( const QMap<Item*, QString>& map1, const QMap<Item*, QString>& map2,
214 QMap<Item*, QString>& resMap, const bool fromFirst ) const
217 const QMap<Item*, QString>& later = fromFirst ? map1 : map2;
218 const QMap<Item*, QString>& early = fromFirst ? map2 : map1;
220 for ( QMap<Item*, QString>::ConstIterator it = later.begin(); it != later.end(); ++it )
222 if ( !early.contains( it.key() ) || early[it.key()] != it.data() )
223 resMap.insert( it.key(), it.data() );
227 void QtxResourceEdit::changedResources( const QMap<Item*, QString>& )
232 Class: QtxResourceEdit::Item
233 Descr: Class for incapsulation of one preference item
236 QtxResourceEdit::Item::Item( QtxResourceEdit* edit, Item* parent )
243 QtxResourceEdit::Item::~Item()
245 if ( resourceEdit() )
246 resourceEdit()->removeItem( this );
249 int QtxResourceEdit::Item::id() const
254 QtxResourceEdit::Item* QtxResourceEdit::Item::parentItem() const
259 void QtxResourceEdit::Item::childItems( QPtrList<Item>& lst ) const
261 for ( ItemListIterator it( myChildren ); it.current(); ++it )
262 lst.append( it.current() );
265 QString QtxResourceEdit::Item::title() const
270 void QtxResourceEdit::Item::resource( QString& sec, QString& param ) const
273 param = myResParameter;
276 void QtxResourceEdit::Item::setTitle( const QString& title )
281 void QtxResourceEdit::Item::setResource( const QString& sec, const QString& param )
284 myResParameter = param;
287 void QtxResourceEdit::Item::update()
291 QVariant QtxResourceEdit::Item::property( const QString& ) const
296 void QtxResourceEdit::Item::setProperty( const QString&, const QVariant& )
300 QString QtxResourceEdit::Item::resourceValue() const
305 void QtxResourceEdit::Item::setResourceValue( const QString& val )
310 QtxResourceMgr* QtxResourceEdit::Item::resourceMgr() const
312 QtxResourceMgr* resMgr = 0;
313 if ( resourceEdit() )
314 resMgr = resourceEdit()->resourceMgr();
318 QtxResourceEdit* QtxResourceEdit::Item::resourceEdit() const
323 int QtxResourceEdit::Item::getInteger( const int val ) const
325 QtxResourceMgr* resMgr = resourceMgr();
326 return resMgr ? resMgr->integerValue( myResSection, myResParameter, val ) : val;
329 double QtxResourceEdit::Item::getDouble( const double val ) const
331 QtxResourceMgr* resMgr = resourceMgr();
332 return resMgr ? resMgr->doubleValue( myResSection, myResParameter, val ) : val;
335 bool QtxResourceEdit::Item::getBoolean( const bool val ) const
337 QtxResourceMgr* resMgr = resourceMgr();
338 return resMgr ? resMgr->booleanValue( myResSection, myResParameter, val ) : val;
341 QString QtxResourceEdit::Item::getString( const QString& val ) const
343 QtxResourceMgr* resMgr = resourceMgr();
344 return resMgr ? resMgr->stringValue( myResSection, myResParameter, val ) : val;
347 QColor QtxResourceEdit::Item::getColor( const QColor& val ) const
349 QtxResourceMgr* resMgr = resourceMgr();
350 return resMgr ? resMgr->colorValue( myResSection, myResParameter, val ) : val;
353 QFont QtxResourceEdit::Item::getFont( const QFont& val ) const
355 QtxResourceMgr* resMgr = resourceMgr();
356 return resMgr ? resMgr->fontValue( myResSection, myResParameter, val ) : val;
359 void QtxResourceEdit::Item::setInteger( const int val )
361 QtxResourceMgr* resMgr = resourceMgr();
363 resMgr->setValue( myResSection, myResParameter, val );
366 void QtxResourceEdit::Item::setDouble( const double val )
368 QtxResourceMgr* resMgr = resourceMgr();
370 resMgr->setValue( myResSection, myResParameter, val );
373 void QtxResourceEdit::Item::setBoolean( const bool val )
375 QtxResourceMgr* resMgr = resourceMgr();
377 resMgr->setValue( myResSection, myResParameter, val );
380 void QtxResourceEdit::Item::setString( const QString& val )
382 QtxResourceMgr* resMgr = resourceMgr();
384 resMgr->setValue( myResSection, myResParameter, val );
387 void QtxResourceEdit::Item::setColor( const QColor& val )
389 QtxResourceMgr* resMgr = resourceMgr();
391 resMgr->setValue( myResSection, myResParameter, val );
394 void QtxResourceEdit::Item::setFont( const QFont& val )
396 QtxResourceMgr* resMgr = resourceMgr();
398 resMgr->setValue( myResSection, myResParameter, val );
401 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const int id ) const
403 return resourceEdit() ? resourceEdit()->item( id ) : 0;
406 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title ) const
408 return resourceEdit() ? resourceEdit()->item( title ) : 0;
411 QtxResourceEdit::Item* QtxResourceEdit::Item::item( const QString& title, const int id ) const
413 return resourceEdit() ? resourceEdit()->item( title, id ) : 0;
416 int QtxResourceEdit::Item::generateId()