00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _KCONFIGBASE_H
00024 #define _KCONFIGBASE_H
00025
00026 #include <qobject.h>
00027 #include <qcolor.h>
00028 #include <qfont.h>
00029 #include <qdatetime.h>
00030 #include <qstrlist.h>
00031 #include <qstringlist.h>
00032 #include <qvariant.h>
00033 #include <qmap.h>
00034
00035 #include "kconfigdata.h"
00036 #include "kdelibs_export.h"
00037
00038 class KConfigBackEnd;
00039 class KConfigBasePrivate;
00040 class KConfigGroup;
00041
00070 class KDECORE_EXPORT KConfigBase : public QObject
00071 {
00072 Q_OBJECT
00073
00074 friend class KConfigBackEnd;
00075 friend class KConfigINIBackEnd;
00076 friend class KConfigGroup;
00077
00078 public:
00082 KConfigBase();
00083
00087 virtual ~KConfigBase();
00088
00099 void setGroup( const QString& group );
00100
00105 void setDesktopGroup();
00106
00113 QString group() const;
00114
00121 bool hasGroup(const QString &group) const;
00122
00128 virtual QStringList groupList() const = 0;
00129
00135 QString locale() const;
00136
00145 QString readEntry(const QString& pKey,
00146 const QString& aDefault = QString::null ) const;
00147
00155 QString readEntry(const char *pKey,
00156 const QString& aDefault = QString::null ) const;
00157
00171 QVariant readPropertyEntry( const QString& pKey, QVariant::Type ) const;
00172
00187 QVariant readPropertyEntry( const char *pKey, QVariant::Type ) const;
00188
00203 QVariant readPropertyEntry( const QString& pKey,
00204 const QVariant &aDefault) const;
00205
00220 QVariant readPropertyEntry( const char *pKey,
00221 const QVariant &aDefault) const;
00222
00233 int readListEntry( const QString& pKey, QStrList &list, char sep = ',' ) const;
00234
00245 int readListEntry( const char *pKey, QStrList &list, char sep = ',' ) const;
00246
00254 QStringList readListEntry( const QString& pKey, char sep = ',' ) const;
00255
00263 QStringList readListEntry( const char *pKey, char sep = ',' ) const;
00264
00274 QStringList readListEntry( const char* pKey, const QStringList& aDefault,
00275 char sep = ',' ) const;
00276
00283 QValueList<int> readIntListEntry( const QString& pKey ) const;
00284
00291 QValueList<int> readIntListEntry( const char *pKey ) const;
00292
00304 QString readPathEntry( const QString& pKey, const QString & aDefault = QString::null ) const;
00305
00317 QString readPathEntry( const char *pKey, const QString & aDefault = QString::null ) const;
00318
00331 QStringList readPathListEntry( const QString& pKey, char sep = ',' ) const;
00332
00345 QStringList readPathListEntry( const char *pKey, char sep = ',' ) const;
00346
00347
00359 int readNumEntry( const QString& pKey, int nDefault = 0 ) const;
00360
00372 int readNumEntry( const char *pKey, int nDefault = 0 ) const;
00373
00385 unsigned int readUnsignedNumEntry( const QString& pKey, unsigned int nDefault = 0 ) const;
00386
00398 unsigned int readUnsignedNumEntry( const char *pKey, unsigned int nDefault = 0 ) const;
00399
00400
00412 long readLongNumEntry( const QString& pKey, long nDefault = 0 ) const;
00413
00425 long readLongNumEntry( const char *pKey, long nDefault = 0 ) const;
00426
00438 unsigned long readUnsignedLongNumEntry( const QString& pKey, unsigned long nDefault = 0 ) const;
00439
00451 unsigned long readUnsignedLongNumEntry( const char *pKey, unsigned long nDefault = 0 ) const;
00452
00464 Q_INT64 readNum64Entry( const QString& pKey, Q_INT64 nDefault = 0 ) const;
00465
00477 Q_INT64 readNum64Entry( const char *pKey, Q_INT64 nDefault = 0 ) const;
00478
00490 Q_UINT64 readUnsignedNum64Entry( const QString& pKey, Q_UINT64 nDefault = 0 ) const;
00491
00503 Q_UINT64 readUnsignedNum64Entry( const char *pKey, Q_UINT64 nDefault = 0 ) const;
00504
00516 double readDoubleNumEntry( const QString& pKey, double nDefault = 0.0 ) const;
00517
00529 double readDoubleNumEntry( const char *pKey, double nDefault = 0.0 ) const;
00530
00542 QFont readFontEntry( const QString& pKey, const QFont* pDefault = 0L ) const;
00543
00555 QFont readFontEntry( const char *pKey, const QFont* pDefault = 0L ) const;
00556
00568 bool readBoolEntry( const QString& pKey, bool bDefault = false ) const;
00569
00581 bool readBoolEntry( const char *pKey, bool bDefault = false ) const;
00582
00594 QRect readRectEntry( const QString& pKey, const QRect* pDefault = 0L ) const;
00595
00607 QRect readRectEntry( const char *pKey, const QRect* pDefault = 0L ) const;
00608
00620 QPoint readPointEntry( const QString& pKey, const QPoint* pDefault = 0L ) const;
00621
00633 QPoint readPointEntry( const char *pKey, const QPoint* pDefault = 0L ) const;
00634
00646 QSize readSizeEntry( const QString& pKey, const QSize* pDefault = 0L ) const;
00647
00659 QSize readSizeEntry( const char *pKey, const QSize* pDefault = 0L ) const;
00660
00661
00673 QColor readColorEntry( const QString& pKey, const QColor* pDefault = 0L ) const;
00674
00686 QColor readColorEntry( const char *pKey, const QColor* pDefault = 0L ) const;
00687
00700 QDateTime readDateTimeEntry( const QString& pKey, const QDateTime* pDefault = 0L ) const;
00701
00714 QDateTime readDateTimeEntry( const char *pKey, const QDateTime* pDefault = 0L ) const;
00715
00724 QString readEntryUntranslated( const QString& pKey,
00725 const QString& aDefault = QString::null ) const;
00726
00735 QString readEntryUntranslated( const char *pKey,
00736 const QString& aDefault = QString::null ) const;
00737
00757 void writeEntry( const QString& pKey, const QString& pValue,
00758 bool bPersistent = true, bool bGlobal = false,
00759 bool bNLS = false );
00760
00778 void writeEntry( const char *pKey, const QString& pValue,
00779 bool bPersistent = true, bool bGlobal = false,
00780 bool bNLS = false );
00781
00801 void writeEntry( const QString& pKey, const QVariant& rValue,
00802 bool bPersistent = true, bool bGlobal = false,
00803 bool bNLS = false );
00823 void writeEntry( const char *pKey, const QVariant& rValue,
00824 bool bPersistent = true, bool bGlobal = false,
00825 bool bNLS = false );
00826
00847 void writeEntry( const QString& pKey, const QStrList &rValue,
00848 char sep = ',', bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
00869 void writeEntry( const char *pKey, const QStrList &rValue,
00870 char sep = ',', bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
00871
00892 void writeEntry( const QString& pKey, const QStringList &rValue,
00893 char sep = ',', bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
00914 void writeEntry( const char *pKey, const QStringList &rValue,
00915 char sep = ',', bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
00916
00917
00937 void writeEntry( const QString& pKey, const QValueList<int>& rValue,
00938 bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
00958 void writeEntry( const char *pKey, const QValueList<int>& rValue,
00959 bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
00960
00978 void writeEntry( const QString& pKey, const char *pValue,
00979 bool bPersistent = true, bool bGlobal = false,
00980 bool bNLS = false )
00981 { writeEntry(pKey, QString::fromLatin1(pValue), bPersistent, bGlobal, bNLS); }
00999 void writeEntry( const char *pKey, const char *pValue,
01000 bool bPersistent = true, bool bGlobal = false,
01001 bool bNLS = false )
01002 { writeEntry(pKey, QString::fromLatin1(pValue), bPersistent, bGlobal, bNLS); }
01003
01019 void writeEntry( const QString& pKey, int nValue,
01020 bool bPersistent = true, bool bGlobal = false,
01021 bool bNLS = false );
01037 void writeEntry( const char *pKey, int nValue,
01038 bool bPersistent = true, bool bGlobal = false,
01039 bool bNLS = false );
01040
01056 void writeEntry( const QString& pKey, unsigned int nValue,
01057 bool bPersistent = true, bool bGlobal = false,
01058 bool bNLS = false );
01074 void writeEntry( const char *pKey, unsigned int nValue,
01075 bool bPersistent = true, bool bGlobal = false,
01076 bool bNLS = false );
01077
01092 void writeEntry( const QString& pKey, long nValue,
01093 bool bPersistent = true, bool bGlobal = false,
01094 bool bNLS = false );
01109 void writeEntry( const char *pKey, long nValue,
01110 bool bPersistent = true, bool bGlobal = false,
01111 bool bNLS = false );
01112
01127 void writeEntry( const QString& pKey, unsigned long nValue,
01128 bool bPersistent = true, bool bGlobal = false,
01129 bool bNLS = false );
01144 void writeEntry( const char *pKey, unsigned long nValue,
01145 bool bPersistent = true, bool bGlobal = false,
01146 bool bNLS = false );
01147
01162 void writeEntry( const QString& pKey, Q_INT64 nValue,
01163 bool bPersistent = true, bool bGlobal = false,
01164 bool bNLS = false );
01179 void writeEntry( const char *pKey, Q_INT64 nValue,
01180 bool bPersistent = true, bool bGlobal = false,
01181 bool bNLS = false );
01182
01197 void writeEntry( const QString& pKey, Q_UINT64 nValue,
01198 bool bPersistent = true, bool bGlobal = false,
01199 bool bNLS = false );
01214 void writeEntry( const char *pKey, Q_UINT64 nValue,
01215 bool bPersistent = true, bool bGlobal = false,
01216 bool bNLS = false );
01217
01235 void writeEntry( const QString& pKey, double nValue,
01236 bool bPersistent = true, bool bGlobal = false,
01237 char format = 'g', int precision = 6,
01238 bool bNLS = false );
01256 void writeEntry( const char *pKey, double nValue,
01257 bool bPersistent = true, bool bGlobal = false,
01258 char format = 'g', int precision = 6,
01259 bool bNLS = false );
01260
01275 void writeEntry( const QString& pKey, bool bValue,
01276 bool bPersistent = true, bool bGlobal = false,
01277 bool bNLS = false );
01292 void writeEntry( const char *pKey, bool bValue,
01293 bool bPersistent = true, bool bGlobal = false,
01294 bool bNLS = false );
01295
01310 void writeEntry( const QString& pKey, const QFont& rFont,
01311 bool bPersistent = true, bool bGlobal = false,
01312 bool bNLS = false );
01327 void writeEntry( const char *pKey, const QFont& rFont,
01328 bool bPersistent = true, bool bGlobal = false,
01329 bool bNLS = false );
01330
01348 void writeEntry( const QString& pKey, const QColor& rColor,
01349 bool bPersistent = true, bool bGlobal = false,
01350 bool bNLS = false );
01368 void writeEntry( const char *pKey, const QColor& rColor,
01369 bool bPersistent = true, bool bGlobal = false,
01370 bool bNLS = false );
01371
01389 void writeEntry( const QString& pKey, const QDateTime& rDateTime,
01390 bool bPersistent = true, bool bGlobal = false,
01391 bool bNLS = false );
01409 void writeEntry( const char *pKey, const QDateTime& rDateTime,
01410 bool bPersistent = true, bool bGlobal = false,
01411 bool bNLS = false );
01412
01413
01431 void writeEntry( const QString& pKey, const QRect& rValue,
01432 bool bPersistent = true, bool bGlobal = false,
01433 bool bNLS = false );
01451 void writeEntry( const char *pKey, const QRect& rValue,
01452 bool bPersistent = true, bool bGlobal = false,
01453 bool bNLS = false );
01454
01472 void writeEntry( const QString& pKey, const QPoint& rValue,
01473 bool bPersistent = true, bool bGlobal = false,
01474 bool bNLS = false );
01492 void writeEntry( const char *pKey, const QPoint& rValue,
01493 bool bPersistent = true, bool bGlobal = false,
01494 bool bNLS = false );
01495
01513 void writeEntry( const QString& pKey, const QSize& rValue,
01514 bool bPersistent = true, bool bGlobal = false,
01515 bool bNLS = false );
01533 void writeEntry( const char *pKey, const QSize& rValue,
01534 bool bPersistent = true, bool bGlobal = false,
01535 bool bNLS = false );
01536
01554 void writePathEntry( const QString& pKey, const QString & path,
01555 bool bPersistent = true, bool bGlobal = false,
01556 bool bNLS = false );
01574 void writePathEntry( const char *pKey, const QString & path,
01575 bool bPersistent = true, bool bGlobal = false,
01576 bool bNLS = false );
01577
01601 void writePathEntry( const QString& pKey, const QStringList &rValue,
01602 char sep = ',', bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
01626 void writePathEntry( const char *pKey, const QStringList &rValue,
01627 char sep = ',', bool bPersistent = true, bool bGlobal = false, bool bNLS = false );
01628
01629
01638 void deleteEntry( const QString& pKey,
01639 bool bNLS = false, bool bGlobal = false);
01648 void deleteEntry( const char *pKey,
01649 bool bNLS = false, bool bGlobal = false);
01650
01668 bool deleteGroup( const QString& group, bool bDeep = true, bool bGlobal = false );
01669
01670
01678 void setDollarExpansion( bool _bExpand = true ) { bExpand = _bExpand; }
01679
01685 bool isDollarExpansion() const { return bExpand; }
01686
01701 virtual void rollback( bool bDeep = true );
01702
01716 virtual void sync();
01717
01722 bool isDirty() const { return bDirty; }
01723
01731 virtual void setReadOnly(bool _ro) { bReadOnly = _ro; }
01732
01738 bool isReadOnly() const { return bReadOnly; }
01739
01749 bool hasKey( const QString& key ) const;
01750
01761 virtual QMap<QString, QString> entryMap(const QString &group) const = 0;
01762
01775 virtual void reparseConfiguration() = 0;
01776
01781 bool isImmutable() const;
01782
01789 bool groupIsImmutable(const QString &group) const;
01790
01797 bool entryIsImmutable(const QString &key) const;
01798
01804 enum ConfigState { NoAccess, ReadOnly, ReadWrite };
01805
01819 ConfigState getConfigState() const;
01820
01827 bool checkConfigFilesWritable(bool warnUser);
01828
01835 void setReadDefaults(bool b);
01836
01842 bool readDefaults() const;
01843
01855 void revertToDefault(const QString &key);
01856
01883 bool hasDefault(const QString &key) const;
01884
01885 protected:
01891 void setLocale();
01892
01898 virtual void setDirty(bool _bDirty = true) { bDirty = _bDirty; }
01899
01905 virtual void parseConfigFiles();
01906
01922 virtual KEntryMap internalEntryMap( const QString& pGroup ) const = 0;
01923
01935 virtual KEntryMap internalEntryMap() const = 0;
01936
01952 virtual void putData(const KEntryKey &_key, const KEntry &_data, bool _checkGroup = true) = 0;
01953
01968 virtual KEntry lookupData(const KEntryKey &_key) const = 0;
01969
01970 virtual bool internalHasGroup(const QCString &group) const = 0;
01971
01975 KConfigBackEnd *backEnd;
01976 public:
01980 void setGroup( const QCString &pGroup );
01981 void setGroup( const char *pGroup );
01982 bool hasGroup(const QCString &_pGroup) const;
01983 bool hasGroup(const char *_pGroup) const;
01984 bool hasKey( const char *pKey ) const;
01985
01986 protected:
01987 QCString readEntryUtf8( const char *pKey) const;
01988
01991 QCString mGroup;
01992
01995 QCString aLocaleString;
01996
02000 bool bDirty;
02001
02002 bool bLocaleInitialized;
02003 bool bReadOnly;
02004 mutable bool bExpand;
02005
02006 protected:
02007 virtual void virtual_hook( int id, void* data );
02008 private:
02009 class KConfigBasePrivate;
02010 KConfigBasePrivate *d;
02011
02012 void writeEntry( const char *pKey, const QString &rValue,
02013 bool bPersistent, bool bGlobal, bool bNLS, bool bExpand );
02014 void writeEntry( const char *pKey, const QStringList &rValue,
02015 char sep, bool bPersistent, bool bGlobal, bool bNLS, bool bExpand );
02016
02017 };
02018
02019 class KConfigGroupSaverPrivate;
02020
02057 class KDECORE_EXPORT KConfigGroupSaver
02058 {
02059 public:
02069 KConfigGroupSaver( KConfigBase* config, QString group )
02070
02071 : _config(config), _oldgroup(config->group())
02072 { _config->setGroup( group ); }
02073
02074 KConfigGroupSaver( KConfigBase* config, const char *group )
02075 : _config(config), _oldgroup(config->group())
02076 { _config->setGroup( group ); }
02077
02078 KConfigGroupSaver( KConfigBase* config, const QCString &group )
02079 : _config(config), _oldgroup(config->group())
02080 { _config->setGroup( group ); }
02081
02082 ~KConfigGroupSaver() { _config->setGroup( _oldgroup ); }
02083
02084 KConfigBase* config() { return _config; };
02085
02086 private:
02087 KConfigBase* _config;
02088 QString _oldgroup;
02089
02090 KConfigGroupSaver(const KConfigGroupSaver&);
02091 KConfigGroupSaver& operator=(const KConfigGroupSaver&);
02092
02093 KConfigGroupSaverPrivate *d;
02094 };
02095
02096 class KConfigGroupPrivate;
02097
02101 class KDECORE_EXPORT KConfigGroup: public KConfigBase
02102 {
02103 public:
02108 KConfigGroup(KConfigBase *master, const QCString &group);
02115 KConfigGroup(KConfigBase *master, const QString &group);
02123 KConfigGroup(KConfigBase *master, const char * group);
02124
02131 void deleteGroup(bool bGlobal = false);
02132
02139 bool groupIsImmutable() const;
02140
02141
02142 virtual void setDirty(bool _bDirty);
02143 virtual void putData(const KEntryKey &_key, const KEntry &_data, bool _checkGroup = true);
02144 virtual KEntry lookupData(const KEntryKey &_key) const;
02145 virtual void sync();
02146
02147 private:
02148
02149 void setGroup() { }
02150 void setDesktopGroup() { }
02151 void group() { }
02152 void hasGroup() { }
02153 void setReadOnly(bool) { }
02154 void isDirty() { }
02155
02156
02157 virtual QStringList groupList() const { return QStringList(); }
02158 virtual void rollback(bool) { }
02159 virtual void reparseConfiguration() { }
02160 virtual QMap<QString, QString> entryMap(const QString &) const
02161 { return QMap<QString,QString>(); }
02162 virtual KEntryMap internalEntryMap( const QString&) const
02163 { return KEntryMap(); }
02164 virtual KEntryMap internalEntryMap() const
02165 { return KEntryMap(); }
02166 virtual bool internalHasGroup(const QCString &) const
02167 { return false; }
02168
02169 void getConfigState() { }
02170
02171 KConfigBase *mMaster;
02172 protected:
02173 virtual void virtual_hook( int id, void* data );
02174 private:
02175 KConfigGroupPrivate* d;
02176 };
02177
02178 #endif