1 #ifndef QTX_RESOURCEMGR_H
2 #define QTX_RESOURCEMGR_H
10 #include <qstringlist.h>
11 #include <qtranslator.h>
12 #include <qvaluelist.h>
17 #pragma warning( disable:4251 )
24 class QTX_EXPORT QtxResourceMgr
33 template <class Key, class Value> class IMap;
34 template <class Key, class Value> class IMapIterator;
35 template <class Key, class Value> class IMapConstIterator;
37 #ifdef QTX_NO_INDEXED_MAP
38 typedef QMap<QString, QString> Section;
40 typedef IMap<QString, QString> Section;
44 QtxResourceMgr( const QString&, const QString& = QString::null );
45 virtual ~QtxResourceMgr();
47 QString appName() const;
48 QStringList dirList() const;
50 bool checkExisting() const;
51 virtual void setCheckExisting( const bool );
55 bool value( const QString&, const QString&, int& ) const;
56 bool value( const QString&, const QString&, double& ) const;
57 bool value( const QString&, const QString&, bool& ) const;
58 bool value( const QString&, const QString&, QColor& ) const;
59 bool value( const QString&, const QString&, QFont& ) const;
60 bool value( const QString&, const QString&, QString&, const bool = true ) const;
62 int integerValue( const QString&, const QString&, const int = 0 ) const;
63 double doubleValue( const QString&, const QString&, const double = 0 ) const;
64 bool booleanValue( const QString&, const QString&, const bool = false ) const;
65 QFont fontValue( const QString&, const QString&, const QFont& = QFont() ) const;
66 QColor colorValue( const QString&, const QString&, const QColor& = QColor() ) const;
67 QString stringValue( const QString&, const QString&, const QString& = QString::null ) const;
69 bool hasSection( const QString& ) const;
70 bool hasValue( const QString&, const QString& ) const;
72 void setValue( const QString&, const QString&, const int );
73 void setValue( const QString&, const QString&, const double );
74 void setValue( const QString&, const QString&, const bool );
75 void setValue( const QString&, const QString&, const QFont& );
76 void setValue( const QString&, const QString&, const QColor& );
77 void setValue( const QString&, const QString&, const QString& );
79 void remove( const QString& );
80 void remove( const QString&, const QString& );
82 QString currentFormat() const;
83 void setCurrentFormat( const QString& );
85 Format* format( const QString& ) const;
86 void installFormat( Format* );
87 void removeFormat( Format* );
89 QStringList options() const;
90 QString option( const QString& ) const;
91 void setOption( const QString&, const QString& );
93 QPixmap defaultPixmap() const;
94 virtual void setDefaultPixmap( const QPixmap& );
96 QString resSection() const;
97 QString langSection() const;
99 QPixmap loadPixmap( const QString&, const QString& ) const;
100 QPixmap loadPixmap( const QString&, const QString&, const bool ) const;
101 QPixmap loadPixmap( const QString&, const QString&, const QPixmap& ) const;
102 void loadLanguage( const QString& = QString::null, const QString& = QString::null );
104 void raiseTranslators( const QString& );
105 void removeTranslators( const QString& );
106 void loadTranslator( const QString&, const QString& );
107 void loadTranslators( const QString&, const QStringList& );
109 QString path( const QString&, const QString&, const QString& ) const;
114 QStringList sections() const;
115 QStringList parameters( const QString& ) const;
120 virtual void setDirList( const QStringList& );
121 virtual void setResource( const QString&, const QString&, const QString& );
123 virtual QString userFileName( const QString& ) const;
124 virtual QString globalFileName( const QString& ) const;
127 void initialize( const bool = true ) const;
128 QString substMacro( const QString&, const QMap<QChar, QString>& ) const;
131 typedef QPtrList<Resources> ResList;
132 typedef QPtrList<Format> FormatList;
133 typedef QMap<QString, QString> OptionsMap;
134 typedef QPtrListIterator<Resources> ResListIterator;
135 typedef QPtrListIterator<Format> FormatListIterator;
137 typedef QPtrList<QTranslator> TransList;
138 typedef QMap<QString, TransList> TransListMap;
139 typedef QPtrListIterator<QTranslator> TransListIterator;
143 QStringList myDirList;
144 FormatList myFormats;
145 OptionsMap myOptions;
148 TransListMap myTranslator;
149 QPixmap myDefaultPix;
153 Class: QtxResourceMgr::Format
156 class QTX_EXPORT QtxResourceMgr::Format
159 Format( const QString& );
162 QString format() const;
164 QStringList options() const;
165 QString option( const QString& ) const;
166 void setOption( const QString&, const QString& );
168 bool load( Resources* );
169 bool save( Resources* );
172 virtual bool load( const QString&, QMap<QString, Section>& ) = 0;
173 virtual bool save( const QString&, const QMap<QString, Section>& ) = 0;
177 QMap<QString, QString> myOpt;
181 Class: QtxResourceMgr::Resources
184 class QtxResourceMgr::Resources
187 Resources( const QString& );
188 virtual ~Resources();
190 QString file() const;
191 void setFile( const QString& );
193 QString value( const QString&, const QString&, const bool ) const;
194 void setValue( const QString&, const QString&, const QString& );
196 bool hasSection( const QString& ) const;
197 bool hasValue( const QString&, const QString& ) const;
199 void removeSection( const QString& );
200 void removeValue( const QString&, const QString& );
202 QPixmap loadPixmap( const QString&, const QString&, const QString& ) const;
203 QTranslator* loadTranslator( const QString&, const QString&, const QString& ) const;
205 QString environmentVariable( const QString&, int&, int& ) const;
206 QString makeSubstitution( const QString&, const QString&, const QString& ) const;
210 QStringList sections() const;
211 QStringList parameters( const QString& ) const;
213 QString path( const QString&, const QString&, const QString& ) const;
216 Section& section( const QString& );
217 const Section& section( const QString& ) const;
219 QString fileName( const QString&, const QString&, const QString& ) const;
222 typedef QMap<QString, Section> SectionMap;
225 SectionMap mySections;
228 friend class QtxResourceMgr::Format;
232 Class: QtxResourceMgr::IMapIterator
235 template <class Key, class Value> class QtxResourceMgr::IMapIterator
238 IMapIterator() : myMap( 0 ), myIndex( 0 ) { init(); }
239 IMapIterator( const IMap<Key,Value>* m ) : myMap( const_cast< IMap<Key,Value>* >( m ) ), myIndex( 0 ) { init(); }
240 IMapIterator( const IMapIterator& i ) : myMap( i.myMap ), myIndex( i.myIndex ) { init(); }
242 bool operator==( const IMapIterator& i ) { return !operator!=( i ); }
243 bool operator!=( const IMapIterator& i ) { return !myMap || myMap != i.myMap || myIndex != i.myIndex; }
245 operator bool() const { return myIndex >= 0; }
247 const Key& key() const { return myMap->key( myIndex ); }
248 Value& data() { return myMap->value( myIndex ); }
249 const Value& data() const { return myMap->value( myIndex ); }
251 Value& operator*() { return data(); }
253 IMapIterator& operator++() { myIndex++; init(); return *this; }
254 IMapIterator operator++( int ) { IMapIterator i = *this; myIndex++; init(); return i; }
255 IMapIterator& operator--() { myIndex--; init(); return *this; }
256 IMapIterator operator--( int ) { IMapIterator i = *this; myIndex--; init(); return i; }
259 IMapIterator( const IMap<Key,Value>* m, const int index ) : myMap( const_cast< IMap<Key,Value>* >( m ) ), myIndex( index ) { init(); }
260 void init() { if ( !myMap || myIndex >= myMap->count() ) myIndex = -1; }
263 IMap<Key,Value>* myMap;
266 friend class IMap<Key, Value>;
267 friend class IMapConstIterator<Key, Value>;
271 Class: QtxResourceMgr::IMapConstIterator
274 template <class Key, class Value> class QtxResourceMgr::IMapConstIterator
277 IMapConstIterator() : myMap( 0 ), myIndex( 0 ) { init(); }
278 IMapConstIterator( const IMap<Key,Value>* m ) : myMap( const_cast< IMap<Key,Value>* >( m ) ), myIndex( 0 ) { init(); }
279 IMapConstIterator( const IMapConstIterator& i ) : myMap( i.myMap ), myIndex( i.myIndex ) { init(); }
280 IMapConstIterator( const IMapIterator<Key, Value>& i ) : myMap( i.myMap ), myIndex( i.myIndex ) { init(); }
282 bool operator==( const IMapConstIterator& i ) { return !operator!=( i ); }
283 bool operator!=( const IMapConstIterator& i ) { return !myMap || myMap != i.myMap || myIndex != i.myIndex; }
285 operator bool() const { return myIndex >= 0; }
287 const Key& key() const { return myMap->key( myIndex ); }
288 const Value& data() const { return myMap->value( myIndex ); }
290 const Value& operator*() const { return data(); }
292 IMapConstIterator& operator++() { myIndex++; init(); return *this; }
293 IMapConstIterator operator++( int ) { IMapConstIterator i = *this; myIndex++; init(); return i; }
294 IMapConstIterator& operator--() { myIndex--; init(); return *this; }
295 IMapConstIterator operator--( int ) { IMapConstIterator i = *this; myIndex--; init(); return i; }
298 IMapConstIterator( const IMap<Key,Value>* m, const int index ): myMap( const_cast< IMap<Key,Value>* >( m ) ), myIndex( index ) { init(); }
299 void init() { if ( !myMap || myIndex >= myMap->count() ) myIndex = -1; }
302 IMap<Key,Value>* myMap;
305 friend class IMap<Key,Value>;
309 Class: QtxResourceMgr::IMap
312 template <class Key, class Value> class QtxResourceMgr::IMap
315 typedef IMapIterator<Key,Value> Iterator;
316 typedef IMapConstIterator<Key,Value> ConstIterator;
320 IMap( const IMap& m ) : myKeys( m.myKeys ), myData( m.myData ) {}
321 IMap& operator=( const IMap& m ) { myKeys = m.myKeys; myData = m.myData; return *this; }
323 int count() const { return myData.count(); }
324 int size() const { return myData.count(); }
325 bool empty() const { return myData.empty(); }
326 bool isEmpty() const { return myData.empty(); }
328 void clear() { myKeys.clear(); myData.clear(); }
330 QValueList<Key> keys() const { return myKeys; }
331 QValueList<Value> values() const { QValueList<Value> l; for ( int i = 0; i < count(); i++ ) l.append( value( i ) ); return l; }
332 bool contains ( const Key& key ) const { return myData.contains( key ); }
334 Iterator begin() { return Iterator( this ); }
335 Iterator end() { return Iterator( this, count() ); }
336 ConstIterator begin() const { return ConstIterator( this ); }
337 ConstIterator end() const { return ConstIterator( this, count() ); }
339 Iterator insert( const Key& key, const Value& value, bool overwrite = true )
341 if ( myData.find( key ) == myData.end() || overwrite )
343 if ( myData.find( key ) != myData.end() && overwrite )
344 myKeys.remove( myKeys.find( key ) );
345 myKeys.append( key );
348 return Iterator( this, index( key ) );
351 Iterator replace( const Key& key, const Value& value )
353 if ( myData.find( key ) == myData.end() )
354 myKeys.append( key );
355 myData[ key ] = value;
356 return Iterator( this, index( key ) );
359 int index( const Key& key ) const { return myKeys.findIndex( key ); }
360 Iterator at( const int index ) { return Iterator( this, index ); }
361 ConstIterator at( const int index ) const { return ConstIterator( this, index ); }
363 Key& key( const int index )
365 if ( index < 0 || index >= (int)myKeys.count() )
367 return myKeys[index];
370 Value& value( const int index )
372 if ( index < 0 || index >= (int)myKeys.count() )
374 return myData[ myKeys[index] ];
377 Value& operator[]( const Key& key )
379 if ( myData.find( key ) == myData.end() )
380 insert( key, Value() );
381 return myData[ key ];
384 const Value& operator[]( const Key& key ) const
386 if ( myData.find( key ) == myData.end() )
388 return myData[ key ];
391 void erase( Iterator it ) { remove( it ); }
392 void erase( const Key& key ) { remove( key ); }
393 void erase( const int index ) { remove( index ); }
394 void remove( Iterator it ) { if ( it.myMap != this ) return; remove( it.myIndex ); }
395 void remove( const Key& key ) { remove( index( key ) ); }
396 void remove( const int index )
398 if ( index >= 0 && index < (int)myKeys.count() )
400 myData.remove( myKeys[ index ] );
401 myKeys.remove( myKeys.at( index ) );
406 QValueList<Key> myKeys;
407 QMap<Key,Value> myData;
411 friend class IMapIterator<Key,Value>;
412 friend class IMapConstIterator<Key,Value>;