kconfigbase.h
00001 /* 00002 This file is part of the KDE libraries 00003 Copyright (c) 1999 Preston Brown <pbrown@kde.org> 00004 Copyright (c) 1997 Matthias Kalle Dalheimer <kalle@kde.org> 00005 Copyright (c) 2001 Waldo Bastian <bastian@kde.org> 00006 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Library General Public 00009 License as published by the Free Software Foundation; either 00010 version 2 of the License, or (at your option) any later version. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00020 Boston, MA 02110-1301, USA. 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; // currently only used by KSimpleConfig 02004 mutable bool bExpand; // whether dollar expansion is used 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 // KDE4 remove 02058 { 02059 public: 02069 KConfigGroupSaver( KConfigBase* config, QString group ) 02070 /* KDE 4 : make the second parameter const QString & */ 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 // The following functions are reimplemented: 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 // Hide the following members: 02149 void setGroup() { } 02150 void setDesktopGroup() { } 02151 void group() { } 02152 void hasGroup() { } 02153 void setReadOnly(bool) { } 02154 void isDirty() { } 02155 02156 // The following members are not used. 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