diff options
Diffstat (limited to 'kdecore/kconfigbase.cpp')
-rw-r--r-- | kdecore/kconfigbase.cpp | 1935 |
1 files changed, 0 insertions, 1935 deletions
diff --git a/kdecore/kconfigbase.cpp b/kdecore/kconfigbase.cpp deleted file mode 100644 index 20d3f023c..000000000 --- a/kdecore/kconfigbase.cpp +++ /dev/null @@ -1,1935 +0,0 @@ -// -*- c-basic-offset: 2 -*- -/* - This file is part of the KDE libraries - Copyright (c) 1999 Preston Brown <pbrown@kde.org> - Copyright (c) 1997 Matthias Kalle Dalheimer <kalle@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include <stdlib.h> -#include <string.h> - -#include <tqfile.h> -#include <tqdir.h> -#include <tqtextstream.h> - -#include <kapplication.h> -#include <kglobal.h> -#include <klocale.h> -#include <kcharsets.h> - -#include "kconfigbase.h" -#include "kconfigbackend.h" -#include "kdebug.h" -#include "kstandarddirs.h" -#include "kstringhandler.h" - -class KConfigBase::KConfigBasePrivate -{ -public: - KConfigBasePrivate() : readDefaults(false) { }; - -public: - bool readDefaults; -}; - -KConfigBase::KConfigBase() - : backEnd(0L), bDirty(false), bLocaleInitialized(false), - bReadOnly(false), bExpand(false), d(0) -{ - setGroup(TQString::null); -} - -KConfigBase::~KConfigBase() -{ - delete d; -} - -void KConfigBase::setLocale() -{ - bLocaleInitialized = true; - - if (KGlobal::locale()) - aLocaleString = KGlobal::locale()->language().utf8(); - else - aLocaleString = KLocale::defaultLanguage().utf8(); - if (backEnd) - backEnd->setLocaleString(aLocaleString); -} - -TQString KConfigBase::locale() const -{ - return TQString::fromUtf8(aLocaleString); -} - -void KConfigBase::setGroup( const TQString& group ) -{ - if ( group.isEmpty() ) - mGroup = "<default>"; - else - mGroup = group.utf8(); -} - -void KConfigBase::setGroup( const char *pGroup ) -{ - setGroup(TQCString(pGroup)); -} - -void KConfigBase::setGroup( const TQCString &group ) -{ - if ( group.isEmpty() ) - mGroup = "<default>"; - else - mGroup = group; -} - -TQString KConfigBase::group() const { - return TQString::fromUtf8(mGroup); -} - -void KConfigBase::setDesktopGroup() -{ - mGroup = "Desktop Entry"; -} - -bool KConfigBase::hasKey(const TQString &key) const -{ - return hasKey(key.utf8().data()); -} - -bool KConfigBase::hasKey(const char *pKey) const -{ - KEntryKey aEntryKey(mGroup, 0); - aEntryKey.c_key = pKey; - aEntryKey.bDefault = readDefaults(); - - if (!locale().isNull()) { - // try the localized key first - aEntryKey.bLocal = true; - KEntry entry = lookupData(aEntryKey); - if (!entry.mValue.isNull()) - return true; - aEntryKey.bLocal = false; - } - - // try the non-localized version - KEntry entry = lookupData(aEntryKey); - return !entry.mValue.isNull(); -} - -bool KConfigBase::hasTranslatedKey(const char* pKey) const -{ - KEntryKey aEntryKey(mGroup, 0); - aEntryKey.c_key = pKey; - aEntryKey.bDefault = readDefaults(); - - if (!locale().isNull()) { - // try the localized key first - aEntryKey.bLocal = true; - KEntry entry = lookupData(aEntryKey); - if (!entry.mValue.isNull()) - return true; - aEntryKey.bLocal = false; - } - - return false; -} - -bool KConfigBase::hasGroup(const TQString &group) const -{ - return internalHasGroup( group.utf8()); -} - -bool KConfigBase::hasGroup(const char *_pGroup) const -{ - return internalHasGroup( TQCString(_pGroup)); -} - -bool KConfigBase::hasGroup(const TQCString &_pGroup) const -{ - return internalHasGroup( _pGroup); -} - -bool KConfigBase::isImmutable() const -{ - return (getConfigState() != ReadWrite); -} - -bool KConfigBase::groupIsImmutable(const TQString &group) const -{ - if (getConfigState() != ReadWrite) - return true; - - KEntryKey groupKey(group.utf8(), 0); - KEntry entry = lookupData(groupKey); - return entry.bImmutable; -} - -bool KConfigBase::entryIsImmutable(const TQString &key) const -{ - if (getConfigState() != ReadWrite) - return true; - - KEntryKey entryKey(mGroup, 0); - KEntry aEntryData = lookupData(entryKey); // Group - if (aEntryData.bImmutable) - return true; - - TQCString utf8_key = key.utf8(); - entryKey.c_key = utf8_key.data(); - aEntryData = lookupData(entryKey); // Normal entry - if (aEntryData.bImmutable) - return true; - - entryKey.bLocal = true; - aEntryData = lookupData(entryKey); // Localized entry - return aEntryData.bImmutable; -} - - -TQString KConfigBase::readEntryUntranslated( const TQString& pKey, - const TQString& aDefault ) const -{ - return KConfigBase::readEntryUntranslated(pKey.utf8().data(), aDefault); -} - - -TQString KConfigBase::readEntryUntranslated( const char *pKey, - const TQString& aDefault ) const -{ - TQCString result = readEntryUtf8(pKey); - if (result.isNull()) - return aDefault; - return TQString::fromUtf8(result); -} - - -TQString KConfigBase::readEntry( const TQString& pKey, - const TQString& aDefault ) const -{ - return KConfigBase::readEntry(pKey.utf8().data(), aDefault); -} - -TQString KConfigBase::readEntry( const char *pKey, - const TQString& aDefault ) const -{ - // we need to access _locale instead of the method locale() - // because calling locale() will create a locale object if it - // doesn't exist, which requires KConfig, which will create a infinite - // loop, and nobody likes those. - if (!bLocaleInitialized && KGlobal::_locale) { - // get around const'ness. - KConfigBase *that = const_cast<KConfigBase *>(this); - that->setLocale(); - } - - TQString aValue; - - bool expand = false; - // construct a localized version of the key - // try the localized key first - KEntry aEntryData; - KEntryKey entryKey(mGroup, 0); - entryKey.c_key = pKey; - entryKey.bDefault = readDefaults(); - entryKey.bLocal = true; - aEntryData = lookupData(entryKey); - if (!aEntryData.mValue.isNull()) { - // for GNOME .desktop - aValue = KStringHandler::from8Bit( aEntryData.mValue.data() ); - expand = aEntryData.bExpand; - } else { - entryKey.bLocal = false; - aEntryData = lookupData(entryKey); - if (!aEntryData.mValue.isNull()) { - aValue = TQString::fromUtf8(aEntryData.mValue.data()); - if (aValue.isNull()) - { - static const TQString &emptyString = KGlobal::staticQString(""); - aValue = emptyString; - } - expand = aEntryData.bExpand; - } else { - aValue = aDefault; - } - } - - // only do dollar expansion if so desired - if( expand || bExpand ) - { - // check for environment variables and make necessary translations - int nDollarPos = aValue.find( '$' ); - - while( nDollarPos != -1 && nDollarPos+1 < static_cast<int>(aValue.length())) { - // there is at least one $ - if( (aValue)[nDollarPos+1] == '(' ) { - uint nEndPos = nDollarPos+1; - // the next character is no $ - while ( (nEndPos <= aValue.length()) && (aValue[nEndPos]!=')') ) - nEndPos++; - nEndPos++; - TQString cmd = aValue.mid( nDollarPos+2, nEndPos-nDollarPos-3 ); - - TQString result; - FILE *fs = popen(TQFile::encodeName(cmd).data(), "r"); - if (fs) - { - { - TQTextStream ts(fs, IO_ReadOnly); - result = ts.read().stripWhiteSpace(); - } - pclose(fs); - } - aValue.replace( nDollarPos, nEndPos-nDollarPos, result ); - } else if( (aValue)[nDollarPos+1] != '$' ) { - uint nEndPos = nDollarPos+1; - // the next character is no $ - TQString aVarName; - if (aValue[nEndPos]=='{') - { - while ( (nEndPos <= aValue.length()) && (aValue[nEndPos]!='}') ) - nEndPos++; - nEndPos++; - aVarName = aValue.mid( nDollarPos+2, nEndPos-nDollarPos-3 ); - } - else - { - while ( nEndPos <= aValue.length() && (aValue[nEndPos].isNumber() - || aValue[nEndPos].isLetter() || aValue[nEndPos]=='_' ) ) - nEndPos++; - aVarName = aValue.mid( nDollarPos+1, nEndPos-nDollarPos-1 ); - } - const char* pEnv = 0; - if (!aVarName.isEmpty()) - pEnv = getenv( aVarName.ascii() ); - if( pEnv ) { - // !!! Sergey A. Sukiyazov <corwin@micom.don.ru> !!! - // A environment variables may contain values in 8bit - // locale cpecified encoding or in UTF8 encoding. - aValue.replace( nDollarPos, nEndPos-nDollarPos, KStringHandler::from8Bit( pEnv ) ); - } else - aValue.remove( nDollarPos, nEndPos-nDollarPos ); - } else { - // remove one of the dollar signs - aValue.remove( nDollarPos, 1 ); - nDollarPos++; - } - nDollarPos = aValue.find( '$', nDollarPos ); - } - } - - return aValue; -} - -TQCString KConfigBase::readEntryUtf8( const char *pKey) const -{ - // We don't try the localized key - KEntryKey entryKey(mGroup, 0); - entryKey.bDefault = readDefaults(); - entryKey.c_key = pKey; - KEntry aEntryData = lookupData(entryKey); - if (aEntryData.bExpand) - { - // We need to do fancy, take the slow route. - return readEntry(pKey, TQString::null).utf8(); - } - return aEntryData.mValue; -} - -TQVariant KConfigBase::readPropertyEntry( const TQString& pKey, - TQVariant::Type type ) const -{ - return readPropertyEntry(pKey.utf8().data(), type); -} - -TQVariant KConfigBase::readPropertyEntry( const char *pKey, - TQVariant::Type type ) const -{ - TQVariant va; - if ( !hasKey( pKey ) ) return va; - (void)va.cast(type); - return readPropertyEntry(pKey, va); -} - -TQVariant KConfigBase::readPropertyEntry( const TQString& pKey, - const TQVariant &aDefault ) const -{ - return readPropertyEntry(pKey.utf8().data(), aDefault); -} - -TQVariant KConfigBase::readPropertyEntry( const char *pKey, - const TQVariant &aDefault ) const -{ - if ( !hasKey( pKey ) ) return aDefault; - - TQVariant tmp = aDefault; - - switch( aDefault.type() ) - { - case TQVariant::Invalid: - return TQVariant(); - case TQVariant::String: - return TQVariant( readEntry( pKey, aDefault.toString() ) ); - case TQVariant::StringList: - return TQVariant( readListEntry( pKey ) ); - case TQVariant::List: { - TQStringList strList = readListEntry( pKey ); - TQStringList::ConstIterator it = strList.begin(); - TQStringList::ConstIterator end = strList.end(); - TQValueList<TQVariant> list; - - for (; it != end; ++it ) { - tmp = *it; - list.append( tmp ); - } - return TQVariant( list ); - } - case TQVariant::Font: - return TQVariant( readFontEntry( pKey, &tmp.asFont() ) ); - case TQVariant::Point: - return TQVariant( readPointEntry( pKey, &tmp.asPoint() ) ); - case TQVariant::Rect: - return TQVariant( readRectEntry( pKey, &tmp.asRect() ) ); - case TQVariant::Size: - return TQVariant( readSizeEntry( pKey, &tmp.asSize() ) ); - case TQVariant::Color: - return TQVariant( readColorEntry( pKey, &tmp.asColor() ) ); - case TQVariant::Int: - return TQVariant( readNumEntry( pKey, aDefault.toInt() ) ); - case TQVariant::UInt: - return TQVariant( readUnsignedNumEntry( pKey, aDefault.toUInt() ) ); - case TQVariant::LongLong: - return TQVariant( readNum64Entry( pKey, aDefault.toLongLong() ) ); - case TQVariant::ULongLong: - return TQVariant( readUnsignedNum64Entry( pKey, aDefault.toULongLong() ) ); - case TQVariant::Bool: - return TQVariant( readBoolEntry( pKey, aDefault.toBool() ), 0 ); - case TQVariant::Double: - return TQVariant( readDoubleNumEntry( pKey, aDefault.toDouble() ) ); - case TQVariant::DateTime: - return TQVariant( readDateTimeEntry( pKey, &tmp.asDateTime() ) ); - case TQVariant::Date: - return TQVariant(TQT_TQDATE_OBJECT(readDateTimeEntry( pKey, &tmp.asDateTime() ).date())); - - case TQVariant::Pixmap: - case TQVariant::Image: - case TQVariant::Brush: - case TQVariant::Palette: - case TQVariant::ColorGroup: - case TQVariant::Map: - case TQVariant::IconSet: - case TQVariant::CString: - case TQVariant::PointArray: - case TQVariant::Region: - case TQVariant::Bitmap: - case TQVariant::Cursor: - case TQVariant::SizePolicy: - case TQVariant::Time: -#ifdef USE_QT3 - case TQVariant::ByteArray: -#endif // USE_QT3 - case TQVariant::BitArray: - case TQVariant::KeySequence: - case TQVariant::Pen: -#ifdef USE_QT4 - case TQVariant::Char: - case TQVariant::Url: - case TQVariant::Locale: - case TQVariant::RectF: - case TQVariant::SizeF: - case TQVariant::Line: - case TQVariant::LineF: - case TQVariant::PointF: - case TQVariant::RegExp: - case TQVariant::Hash: - case TQVariant::TextLength: - case QVariant::TextFormat: - case TQVariant::Matrix: - case TQVariant::Transform: - case TQVariant::Matrix4x4: - case TQVariant::Vector2D: - case TQVariant::Vector3D: - case TQVariant::Vector4D: - case TQVariant::Quaternion: - case TQVariant::UserType: -#endif // USE_QT4 - break; - } - - Q_ASSERT( 0 ); - return TQVariant(); -} - -int KConfigBase::readListEntry( const TQString& pKey, - TQStrList &list, char sep ) const -{ - return readListEntry(pKey.utf8().data(), list, sep); -} - -int KConfigBase::readListEntry( const char *pKey, - TQStrList &list, char sep ) const -{ - if( !hasKey( pKey ) ) - return 0; - - TQCString str_list = readEntryUtf8( pKey ); - if (str_list.isEmpty()) - return 0; - - list.clear(); - TQCString value = ""; - int len = str_list.length(); - - for (int i = 0; i < len; i++) { - if (str_list[i] != sep && str_list[i] != '\\') { - value += str_list[i]; - continue; - } - if (str_list[i] == '\\') { - i++; - if ( i < len ) - value += str_list[i]; - continue; - } - // if we fell through to here, we are at a separator. Append - // contents of value to the list - // !!! Sergey A. Sukiyazov <corwin@micom.don.ru> !!! - // A TQStrList may contain values in 8bit locale cpecified - // encoding - list.append( value ); - value.truncate(0); - } - - if ( str_list[len-1] != sep || ( len > 1 && str_list[len-2] == '\\' ) ) - list.append( value ); - return list.count(); -} - -TQStringList KConfigBase::readListEntry( const TQString& pKey, char sep ) const -{ - return readListEntry(pKey.utf8().data(), sep); -} - -TQStringList KConfigBase::readListEntry( const char *pKey, char sep ) const -{ - static const TQString& emptyString = KGlobal::staticQString(""); - - TQStringList list; - if( !hasKey( pKey ) ) - return list; - TQString str_list = readEntry( pKey ); - if( str_list.isEmpty() ) - return list; - TQString value(emptyString); - int len = str_list.length(); - // obviously too big, but faster than letting each += resize the string. - value.reserve( len ); - for( int i = 0; i < len; i++ ) - { - if( str_list[i] != sep && str_list[i] != '\\' ) - { - value += str_list[i]; - continue; - } - if( str_list[i] == '\\' ) - { - i++; - if ( i < len ) - value += str_list[i]; - continue; - } - TQString finalvalue( value ); - finalvalue.squeeze(); - list.append( finalvalue ); - value.truncate( 0 ); - } - if ( str_list[len-1] != sep || ( len > 1 && str_list[len-2] == '\\' ) ) - { - value.squeeze(); - list.append( value ); - } - return list; -} - -TQStringList KConfigBase::readListEntry( const char* pKey, const TQStringList& aDefault, - char sep ) const -{ - if ( !hasKey( pKey ) ) - return aDefault; - else - return readListEntry( pKey, sep ); -} - -TQValueList<int> KConfigBase::readIntListEntry( const TQString& pKey ) const -{ - return readIntListEntry(pKey.utf8().data()); -} - -TQValueList<int> KConfigBase::readIntListEntry( const char *pKey ) const -{ - TQStringList strlist = readListEntry(pKey); - TQValueList<int> list; - TQStringList::ConstIterator end(strlist.end()); - for (TQStringList::ConstIterator it = strlist.begin(); it != end; ++it) - // I do not check if the toInt failed because I consider the number of items - // more important than their value - list << (*it).toInt(); - - return list; -} - -TQString KConfigBase::readPathEntry( const TQString& pKey, const TQString& pDefault ) const -{ - return readPathEntry(pKey.utf8().data(), pDefault); -} - -TQString KConfigBase::readPathEntry( const char *pKey, const TQString& pDefault ) const -{ - const bool bExpandSave = bExpand; - bExpand = true; - TQString aValue = readEntry( pKey, pDefault ); - bExpand = bExpandSave; - return aValue; -} - -TQStringList KConfigBase::readPathListEntry( const TQString& pKey, char sep ) const -{ - return readPathListEntry(pKey.utf8().data(), sep); -} - -TQStringList KConfigBase::readPathListEntry( const char *pKey, char sep ) const -{ - const bool bExpandSave = bExpand; - bExpand = true; - TQStringList aValue = readListEntry( pKey, sep ); - bExpand = bExpandSave; - return aValue; -} - -int KConfigBase::readNumEntry( const TQString& pKey, int nDefault) const -{ - return readNumEntry(pKey.utf8().data(), nDefault); -} - -int KConfigBase::readNumEntry( const char *pKey, int nDefault) const -{ - TQCString aValue = readEntryUtf8( pKey ); - if( aValue.isNull() ) - return nDefault; - else if( aValue == "true" || aValue == "on" || aValue == "yes" ) - return 1; - else - { - bool ok; - int rc = aValue.toInt( &ok ); - return( ok ? rc : nDefault ); - } -} - - -unsigned int KConfigBase::readUnsignedNumEntry( const TQString& pKey, unsigned int nDefault) const -{ - return readUnsignedNumEntry(pKey.utf8().data(), nDefault); -} - -unsigned int KConfigBase::readUnsignedNumEntry( const char *pKey, unsigned int nDefault) const -{ - TQCString aValue = readEntryUtf8( pKey ); - if( aValue.isNull() ) - return nDefault; - else - { - bool ok; - unsigned int rc = aValue.toUInt( &ok ); - return( ok ? rc : nDefault ); - } -} - - -long KConfigBase::readLongNumEntry( const TQString& pKey, long nDefault) const -{ - return readLongNumEntry(pKey.utf8().data(), nDefault); -} - -long KConfigBase::readLongNumEntry( const char *pKey, long nDefault) const -{ - TQCString aValue = readEntryUtf8( pKey ); - if( aValue.isNull() ) - return nDefault; - else - { - bool ok; - long rc = aValue.toLong( &ok ); - return( ok ? rc : nDefault ); - } -} - - -unsigned long KConfigBase::readUnsignedLongNumEntry( const TQString& pKey, unsigned long nDefault) const -{ - return readUnsignedLongNumEntry(pKey.utf8().data(), nDefault); -} - -unsigned long KConfigBase::readUnsignedLongNumEntry( const char *pKey, unsigned long nDefault) const -{ - TQCString aValue = readEntryUtf8( pKey ); - if( aValue.isNull() ) - return nDefault; - else - { - bool ok; - unsigned long rc = aValue.toULong( &ok ); - return( ok ? rc : nDefault ); - } -} - -TQ_INT64 KConfigBase::readNum64Entry( const TQString& pKey, TQ_INT64 nDefault) const -{ - return readNum64Entry(pKey.utf8().data(), nDefault); -} - -TQ_INT64 KConfigBase::readNum64Entry( const char *pKey, TQ_INT64 nDefault) const -{ - // Note that TQCString::toLongLong() is missing, we muse use a TQString instead. - TQString aValue = readEntry( pKey ); - if( aValue.isNull() ) - return nDefault; - else - { - bool ok; - TQ_INT64 rc = aValue.toLongLong( &ok ); - return( ok ? rc : nDefault ); - } -} - - -TQ_UINT64 KConfigBase::readUnsignedNum64Entry( const TQString& pKey, TQ_UINT64 nDefault) const -{ - return readUnsignedNum64Entry(pKey.utf8().data(), nDefault); -} - -TQ_UINT64 KConfigBase::readUnsignedNum64Entry( const char *pKey, TQ_UINT64 nDefault) const -{ - // Note that TQCString::toULongLong() is missing, we muse use a TQString instead. - TQString aValue = readEntry( pKey ); - if( aValue.isNull() ) - return nDefault; - else - { - bool ok; - TQ_UINT64 rc = aValue.toULongLong( &ok ); - return( ok ? rc : nDefault ); - } -} - -double KConfigBase::readDoubleNumEntry( const TQString& pKey, double nDefault) const -{ - return readDoubleNumEntry(pKey.utf8().data(), nDefault); -} - -double KConfigBase::readDoubleNumEntry( const char *pKey, double nDefault) const -{ - TQCString aValue = readEntryUtf8( pKey ); - if( aValue.isNull() ) - return nDefault; - else - { - bool ok; - double rc = aValue.toDouble( &ok ); - return( ok ? rc : nDefault ); - } -} - - -bool KConfigBase::readBoolEntry( const TQString& pKey, bool bDefault ) const -{ - return readBoolEntry(pKey.utf8().data(), bDefault); -} - -bool KConfigBase::readBoolEntry( const char *pKey, bool bDefault ) const -{ - TQCString aValue = readEntryUtf8( pKey ); - - if( aValue.isNull() ) - return bDefault; - else - { - if( aValue == "true" || aValue == "on" || aValue == "yes" || aValue == "1" ) - return true; - else - { - bool bOK; - int val = aValue.toInt( &bOK ); - if( bOK && val != 0 ) - return true; - else - return false; - } - } -} - -TQFont KConfigBase::readFontEntry( const TQString& pKey, const TQFont* pDefault ) const -{ - return readFontEntry(pKey.utf8().data(), pDefault); -} - -TQFont KConfigBase::readFontEntry( const char *pKey, const TQFont* pDefault ) const -{ - TQFont aRetFont; - - TQString aValue = readEntry( pKey ); - if( !aValue.isNull() ) { - if ( aValue.contains( ',' ) > 5 ) { - // KDE3 and upwards entry - if ( !aRetFont.fromString( aValue ) && pDefault ) - aRetFont = *pDefault; - } - else { - // backward compatibility with older font formats - // ### remove KDE 3.1 ? - // find first part (font family) - int nIndex = aValue.find( ',' ); - if( nIndex == -1 ){ - if( pDefault ) - aRetFont = *pDefault; - return aRetFont; - } - aRetFont.setFamily( aValue.left( nIndex ) ); - - // find second part (point size) - int nOldIndex = nIndex; - nIndex = aValue.find( ',', nOldIndex+1 ); - if( nIndex == -1 ){ - if( pDefault ) - aRetFont = *pDefault; - return aRetFont; - } - - aRetFont.setPointSize( aValue.mid( nOldIndex+1, - nIndex-nOldIndex-1 ).toInt() ); - - // find third part (style hint) - nOldIndex = nIndex; - nIndex = aValue.find( ',', nOldIndex+1 ); - - if( nIndex == -1 ){ - if( pDefault ) - aRetFont = *pDefault; - return aRetFont; - } - - aRetFont.setStyleHint( (TQFont::StyleHint)aValue.mid( nOldIndex+1, nIndex-nOldIndex-1 ).toUInt() ); - - // find fourth part (char set) - nOldIndex = nIndex; - nIndex = aValue.find( ',', nOldIndex+1 ); - - if( nIndex == -1 ){ - if( pDefault ) - aRetFont = *pDefault; - return aRetFont; - } - - TQString chStr=aValue.mid( nOldIndex+1, - nIndex-nOldIndex-1 ); - // find fifth part (weight) - nOldIndex = nIndex; - nIndex = aValue.find( ',', nOldIndex+1 ); - - if( nIndex == -1 ){ - if( pDefault ) - aRetFont = *pDefault; - return aRetFont; - } - - aRetFont.setWeight( aValue.mid( nOldIndex+1, - nIndex-nOldIndex-1 ).toUInt() ); - - // find sixth part (font bits) - uint nFontBits = aValue.right( aValue.length()-nIndex-1 ).toUInt(); - - aRetFont.setItalic( nFontBits & 0x01 ); - aRetFont.setUnderline( nFontBits & 0x02 ); - aRetFont.setStrikeOut( nFontBits & 0x04 ); - aRetFont.setFixedPitch( nFontBits & 0x08 ); - aRetFont.setRawMode( nFontBits & 0x20 ); - } - } - else - { - if( pDefault ) - aRetFont = *pDefault; - } - - return aRetFont; -} - - -TQRect KConfigBase::readRectEntry( const TQString& pKey, const TQRect* pDefault ) const -{ - return readRectEntry(pKey.utf8().data(), pDefault); -} - -TQRect KConfigBase::readRectEntry( const char *pKey, const TQRect* pDefault ) const -{ - TQCString aValue = readEntryUtf8(pKey); - - if (!aValue.isEmpty()) - { - int left, top, width, height; - - if (sscanf(aValue.data(), "%d,%d,%d,%d", &left, &top, &width, &height) == 4) - { - return TQRect(left, top, width, height); - } - } - if (pDefault) - return *pDefault; - return TQRect(); -} - - -TQPoint KConfigBase::readPointEntry( const TQString& pKey, - const TQPoint* pDefault ) const -{ - return readPointEntry(pKey.utf8().data(), pDefault); -} - -TQPoint KConfigBase::readPointEntry( const char *pKey, - const TQPoint* pDefault ) const -{ - TQCString aValue = readEntryUtf8(pKey); - - if (!aValue.isEmpty()) - { - int x,y; - - if (sscanf(aValue.data(), "%d,%d", &x, &y) == 2) - { - return TQPoint(x,y); - } - } - if (pDefault) - return *pDefault; - return TQPoint(); -} - -TQSize KConfigBase::readSizeEntry( const TQString& pKey, - const TQSize* pDefault ) const -{ - return readSizeEntry(pKey.utf8().data(), pDefault); -} - -TQSize KConfigBase::readSizeEntry( const char *pKey, - const TQSize* pDefault ) const -{ - TQCString aValue = readEntryUtf8(pKey); - - if (!aValue.isEmpty()) - { - int width,height; - - if (sscanf(aValue.data(), "%d,%d", &width, &height) == 2) - { - return TQSize(width, height); - } - } - if (pDefault) - return *pDefault; - return TQSize(); -} - - -TQColor KConfigBase::readColorEntry( const TQString& pKey, - const TQColor* pDefault ) const -{ - return readColorEntry(pKey.utf8().data(), pDefault); -} - -TQColor KConfigBase::readColorEntry( const char *pKey, - const TQColor* pDefault ) const -{ - TQColor aRetColor; - int nRed = 0, nGreen = 0, nBlue = 0; - - TQString aValue = readEntry( pKey ); - if( !aValue.isEmpty() ) - { - if ( aValue.tqat(0) == (QChar)'#' ) - { - aRetColor.setNamedColor(aValue); - } - else - { - - bool bOK; - - // find first part (red) - int nIndex = aValue.find( ',' ); - - if( nIndex == -1 ){ - // return a sensible default -- Bernd - if( pDefault ) - aRetColor = *pDefault; - return aRetColor; - } - - nRed = aValue.left( nIndex ).toInt( &bOK ); - - // find second part (green) - int nOldIndex = nIndex; - nIndex = aValue.find( ',', nOldIndex+1 ); - - if( nIndex == -1 ){ - // return a sensible default -- Bernd - if( pDefault ) - aRetColor = *pDefault; - return aRetColor; - } - nGreen = aValue.mid( nOldIndex+1, - nIndex-nOldIndex-1 ).toInt( &bOK ); - - // find third part (blue) - nBlue = aValue.right( aValue.length()-nIndex-1 ).toInt( &bOK ); - - aRetColor.setRgb( nRed, nGreen, nBlue ); - } - } - else { - - if( pDefault ) - aRetColor = *pDefault; - } - - return aRetColor; -} - - -TQDateTime KConfigBase::readDateTimeEntry( const TQString& pKey, - const TQDateTime* pDefault ) const -{ - return readDateTimeEntry(pKey.utf8().data(), pDefault); -} - -// ### tqcurrentDateTime() as fallback ? (Harri) -TQDateTime KConfigBase::readDateTimeEntry( const char *pKey, - const TQDateTime* pDefault ) const -{ - if( !hasKey( pKey ) ) - { - if( pDefault ) - return *pDefault; - else - return TQDateTime::tqcurrentDateTime(); - } - - TQStrList list; - int count = readListEntry( pKey, list, ',' ); - if( count == 6 ) { - TQDate date( atoi( list.tqat( 0 ) ), atoi( list.tqat( 1 ) ), - atoi( list.tqat( 2 ) ) ); - TQTime time( atoi( list.tqat( 3 ) ), atoi( list.tqat( 4 ) ), - atoi( list.tqat( 5 ) ) ); - - return TQDateTime( date, time ); - } - - return TQDateTime::tqcurrentDateTime(); -} - -void KConfigBase::writeEntry( const TQString& pKey, const TQString& value, - bool bPersistent, - bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), value, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQString& value, - bool bPersistent, - bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey, value, bPersistent, bGlobal, bNLS, false); -} - -void KConfigBase::writeEntry( const char *pKey, const TQString& value, - bool bPersistent, - bool bGlobal, - bool bNLS, - bool bExpand ) -{ - // the KConfig object is dirty now - // set this before any IO takes place so that if any derivative - // classes do caching, they won't try and flush the cache out - // from under us before we read. A race condition is still - // possible but minimized. - if( bPersistent ) - setDirty(true); - - if (!bLocaleInitialized && KGlobal::locale()) - setLocale(); - - KEntryKey entryKey(mGroup, pKey); - entryKey.bLocal = bNLS; - - KEntry aEntryData; - aEntryData.mValue = value.utf8(); // set new value - aEntryData.bGlobal = bGlobal; - aEntryData.bNLS = bNLS; - aEntryData.bExpand = bExpand; - - if (bPersistent) - aEntryData.bDirty = true; - - // rewrite the new value - putData(entryKey, aEntryData, true); -} - -void KConfigBase::writePathEntry( const TQString& pKey, const TQString & path, - bool bPersistent, bool bGlobal, - bool bNLS) -{ - writePathEntry(pKey.utf8().data(), path, bPersistent, bGlobal, bNLS); -} - - -static bool cleanHomeDirPath( TQString &path, const TQString &homeDir ) -{ -#ifdef Q_WS_WIN //safer - if (!TQDir::convertSeparators(path).startsWith(TQDir::convertSeparators(homeDir))) - return false; -#else - if (!path.startsWith(homeDir)) - return false; -#endif - - unsigned int len = homeDir.length(); - // replace by "$HOME" if possible - if (len && (path.length() == len || path[len] == '/')) { - path.replace(0, len, TQString::tqfromLatin1("$HOME")); - return true; - } else - return false; -} - -static TQString translatePath( TQString path ) -{ - if (path.isEmpty()) - return path; - - // only "our" $HOME should be interpreted - path.replace('$', "$$"); - - bool startsWithFile = path.tqstartsWith("file:", false); - - // return original path, if it refers to another type of URL (e.g. http:/), or - // if the path is already relative to another directory - if (!startsWithFile && path[0] != '/' || - startsWithFile && path[5] != '/') - return path; - - if (startsWithFile) - path.remove(0,5); // strip leading "file:/" off the string - - // keep only one single '/' at the beginning - needed for cleanHomeDirPath() - while (path[0] == '/' && path[1] == '/') - path.remove(0,1); - - // we can not use KGlobal::dirs()->relativeLocation("home", path) here, - // since it would not recognize paths without a trailing '/'. - // All of the 3 following functions to return the user's home directory - // can return different paths. We have to test all them. - TQString homeDir0 = TQFile::decodeName(getenv("HOME")); - TQString homeDir1 = TQDir::homeDirPath(); - TQString homeDir2 = TQDir(homeDir1).canonicalPath(); - if (cleanHomeDirPath(path, homeDir0) || - cleanHomeDirPath(path, homeDir1) || - cleanHomeDirPath(path, homeDir2) ) { - // kdDebug() << "Path was replaced\n"; - } - - if (startsWithFile) - path.prepend( "file://" ); - - return path; -} - -void KConfigBase::writePathEntry( const char *pKey, const TQString & path, - bool bPersistent, bool bGlobal, - bool bNLS) -{ - writeEntry(pKey, translatePath(path), bPersistent, bGlobal, bNLS, true); -} - -void KConfigBase::writePathEntry ( const TQString& pKey, const TQStringList &list, - char sep , bool bPersistent, - bool bGlobal, bool bNLS ) -{ - writePathEntry(pKey.utf8().data(), list, sep, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writePathEntry ( const char *pKey, const TQStringList &list, - char sep , bool bPersistent, - bool bGlobal, bool bNLS ) -{ - if( list.isEmpty() ) - { - writeEntry( pKey, TQString::tqfromLatin1(""), bPersistent ); - return; - } - TQStringList new_list; - TQStringList::ConstIterator it = list.begin(); - for( ; it != list.end(); ++it ) - { - TQString value = *it; - new_list.append( translatePath(value) ); - } - writeEntry( pKey, new_list, sep, bPersistent, bGlobal, bNLS, true ); -} - -void KConfigBase::deleteEntry( const TQString& pKey, - bool bNLS, - bool bGlobal) -{ - deleteEntry(pKey.utf8().data(), bNLS, bGlobal); -} - -void KConfigBase::deleteEntry( const char *pKey, - bool bNLS, - bool bGlobal) -{ - // the KConfig object is dirty now - // set this before any IO takes place so that if any derivative - // classes do caching, they won't try and flush the cache out - // from under us before we read. A race condition is still - // possible but minimized. - setDirty(true); - - if (!bLocaleInitialized && KGlobal::locale()) - setLocale(); - - KEntryKey entryKey(mGroup, pKey); - KEntry aEntryData; - - aEntryData.bGlobal = bGlobal; - aEntryData.bNLS = bNLS; - aEntryData.bDirty = true; - aEntryData.bDeleted = true; - - // rewrite the new value - putData(entryKey, aEntryData, true); -} - -bool KConfigBase::deleteGroup( const TQString& group, bool bDeep, bool bGlobal ) -{ - KEntryMap aEntryMap = internalEntryMap(group); - - if (!bDeep) { - // Check if it empty - return aEntryMap.isEmpty(); - } - - bool dirty = false; - bool checkGroup = true; - // we want to remove all entries in the group - KEntryMapIterator aIt; - for (aIt = aEntryMap.begin(); aIt != aEntryMap.end(); ++aIt) - { - if (!aIt.key().mKey.isEmpty() && !aIt.key().bDefault && !(*aIt).bDeleted) - { - (*aIt).bDeleted = true; - (*aIt).bDirty = true; - (*aIt).bGlobal = bGlobal; - (*aIt).mValue = 0; - putData(aIt.key(), *aIt, checkGroup); - checkGroup = false; - dirty = true; - } - } - if (dirty) - setDirty(true); - return true; -} - -void KConfigBase::writeEntry ( const TQString& pKey, const TQVariant &prop, - bool bPersistent, - bool bGlobal, bool bNLS ) -{ - writeEntry(pKey.utf8().data(), prop, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry ( const char *pKey, const TQVariant &prop, - bool bPersistent, - bool bGlobal, bool bNLS ) -{ - switch( prop.type() ) - { - case TQVariant::Invalid: - writeEntry( pKey, "", bPersistent, bGlobal, bNLS ); - return; - case TQVariant::String: - writeEntry( pKey, prop.toString(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::StringList: - writeEntry( pKey, prop.toStringList(), ',', bPersistent, bGlobal, bNLS ); - return; - case TQVariant::List: { - TQValueList<TQVariant> list = prop.toList(); - TQValueList<TQVariant>::ConstIterator it = list.begin(); - TQValueList<TQVariant>::ConstIterator end = list.end(); - TQStringList strList; - - for (; it != end; ++it ) - strList.append( (*it).toString() ); - - writeEntry( pKey, strList, ',', bPersistent, bGlobal, bNLS ); - - return; - } - case TQVariant::Font: - writeEntry( pKey, prop.toFont(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Point: - writeEntry( pKey, prop.toPoint(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Rect: - writeEntry( pKey, prop.toRect(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Size: - writeEntry( pKey, prop.toSize(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Color: - writeEntry( pKey, prop.toColor(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Int: - writeEntry( pKey, prop.toInt(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::UInt: - writeEntry( pKey, prop.toUInt(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::LongLong: - writeEntry( pKey, prop.toLongLong(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::ULongLong: - writeEntry( pKey, prop.toULongLong(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Bool: - writeEntry( pKey, prop.toBool(), bPersistent, bGlobal, bNLS ); - return; - case TQVariant::Double: - writeEntry( pKey, prop.toDouble(), bPersistent, bGlobal, 'g', 6, bNLS ); - return; - case TQVariant::DateTime: - writeEntry( pKey, prop.toDateTime(), bPersistent, bGlobal, bNLS); - return; - case TQVariant::Date: - writeEntry( pKey, TQDateTime(prop.toDate()), bPersistent, bGlobal, bNLS); - return; - - case TQVariant::Pixmap: - case TQVariant::Image: - case TQVariant::Brush: - case TQVariant::Palette: - case TQVariant::ColorGroup: - case TQVariant::Map: - case TQVariant::IconSet: - case TQVariant::CString: - case TQVariant::PointArray: - case TQVariant::Region: - case TQVariant::Bitmap: - case TQVariant::Cursor: - case TQVariant::SizePolicy: - case TQVariant::Time: -#ifdef USE_QT3 - case TQVariant::ByteArray: -#endif // USE_QT3 - case TQVariant::BitArray: - case TQVariant::KeySequence: - case TQVariant::Pen: -#ifdef USE_QT4 - case TQVariant::Char: - case TQVariant::Url: - case TQVariant::Locale: - case TQVariant::RectF: - case TQVariant::SizeF: - case TQVariant::Line: - case TQVariant::LineF: - case TQVariant::PointF: - case TQVariant::RegExp: - case TQVariant::Hash: - case TQVariant::TextLength: - case QVariant::TextFormat: - case TQVariant::Matrix: - case TQVariant::Transform: - case TQVariant::Matrix4x4: - case TQVariant::Vector2D: - case TQVariant::Vector3D: - case TQVariant::Vector4D: - case TQVariant::Quaternion: - case TQVariant::UserType: -#endif // USE_QT4 - break; - } - - Q_ASSERT( 0 ); -} - -void KConfigBase::writeEntry ( const TQString& pKey, const TQStrList &list, - char sep , bool bPersistent, - bool bGlobal, bool bNLS ) -{ - writeEntry(pKey.utf8().data(), list, sep, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry ( const char *pKey, const TQStrList &list, - char sep , bool bPersistent, - bool bGlobal, bool bNLS ) -{ - if( list.isEmpty() ) - { - writeEntry( pKey, TQString::tqfromLatin1(""), bPersistent ); - return; - } - TQString str_list; - TQStrListIterator it( list ); - for( ; it.current(); ++it ) - { - uint i; - TQString value; - // !!! Sergey A. Sukiyazov <corwin@micom.don.ru> !!! - // A TQStrList may contain values in 8bit locale cpecified - // encoding or in UTF8 encoding. - value = KStringHandler::from8Bit(it.current()); - uint strLengh(value.length()); - for( i = 0; i < strLengh; i++ ) - { - if( value[i] == sep || value[i] == '\\' ) - str_list += '\\'; - str_list += value[i]; - } - str_list += sep; - } - if( str_list.tqat(str_list.length() - 1) == (QChar)sep ) - str_list.truncate( str_list.length() -1 ); - writeEntry( pKey, str_list, bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry ( const TQString& pKey, const TQStringList &list, - char sep , bool bPersistent, - bool bGlobal, bool bNLS ) -{ - writeEntry(pKey.utf8().data(), list, sep, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry ( const char *pKey, const TQStringList &list, - char sep , bool bPersistent, - bool bGlobal, bool bNLS ) -{ - writeEntry(pKey, list, sep, bPersistent, bGlobal, bNLS, false); -} - -void KConfigBase::writeEntry ( const char *pKey, const TQStringList &list, - char sep, bool bPersistent, - bool bGlobal, bool bNLS, bool bExpand ) -{ - if( list.isEmpty() ) - { - writeEntry( pKey, TQString::tqfromLatin1(""), bPersistent ); - return; - } - TQString str_list; - str_list.reserve( 4096 ); - TQStringList::ConstIterator it = list.begin(); - for( ; it != list.end(); ++it ) - { - TQString value = *it; - uint i; - uint strLength(value.length()); - for( i = 0; i < strLength; i++ ) - { - if( value[i] == sep || value[i] == '\\' ) - str_list += '\\'; - str_list += value[i]; - } - str_list += sep; - } - if( str_list.tqat(str_list.length() - 1) == (QChar)sep ) - str_list.truncate( str_list.length() -1 ); - writeEntry( pKey, str_list, bPersistent, bGlobal, bNLS, bExpand ); -} - -void KConfigBase::writeEntry ( const TQString& pKey, const TQValueList<int> &list, - bool bPersistent, bool bGlobal, bool bNLS ) -{ - writeEntry(pKey.utf8().data(), list, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry ( const char *pKey, const TQValueList<int> &list, - bool bPersistent, bool bGlobal, bool bNLS ) -{ - TQStringList strlist; - TQValueList<int>::ConstIterator end = list.end(); - for (TQValueList<int>::ConstIterator it = list.begin(); it != end; it++) - strlist << TQString::number(*it); - writeEntry(pKey, strlist, ',', bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const TQString& pKey, int nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, int nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, unsigned int nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, unsigned int nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, long nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, long nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, unsigned long nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, unsigned long nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const TQString& pKey, TQ_INT64 nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, TQ_INT64 nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, TQ_UINT64 nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, TQ_UINT64 nValue, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue), bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const TQString& pKey, double nValue, - bool bPersistent, bool bGlobal, - char format, int precision, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue, format, precision), - bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const char *pKey, double nValue, - bool bPersistent, bool bGlobal, - char format, int precision, - bool bNLS ) -{ - writeEntry( pKey, TQString::number(nValue, format, precision), - bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, bool bValue, - bool bPersistent, - bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), bValue, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, bool bValue, - bool bPersistent, - bool bGlobal, - bool bNLS ) -{ - TQString aValue; - - if( bValue ) - aValue = "true"; - else - aValue = "false"; - - writeEntry( pKey, aValue, bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, const TQFont& rFont, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), rFont, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQFont& rFont, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey, TQString(rFont.toString()), bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, const TQRect& rRect, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), rRect, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQRect& rRect, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - TQStrList list; - TQCString tempstr; - list.insert( 0, tempstr.setNum( rRect.left() ) ); - list.insert( 1, tempstr.setNum( rRect.top() ) ); - list.insert( 2, tempstr.setNum( rRect.width() ) ); - list.insert( 3, tempstr.setNum( rRect.height() ) ); - - writeEntry( pKey, list, ',', bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, const TQPoint& rPoint, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), rPoint, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQPoint& rPoint, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - TQStrList list; - TQCString tempstr; - list.insert( 0, tempstr.setNum( rPoint.x() ) ); - list.insert( 1, tempstr.setNum( rPoint.y() ) ); - - writeEntry( pKey, list, ',', bPersistent, bGlobal, bNLS ); -} - - -void KConfigBase::writeEntry( const TQString& pKey, const TQSize& rSize, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), rSize, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQSize& rSize, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - TQStrList list; - TQCString tempstr; - list.insert( 0, tempstr.setNum( rSize.width() ) ); - list.insert( 1, tempstr.setNum( rSize.height() ) ); - - writeEntry( pKey, list, ',', bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const TQString& pKey, const TQColor& rColor, - bool bPersistent, - bool bGlobal, - bool bNLS ) -{ - writeEntry( pKey.utf8().data(), rColor, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQColor& rColor, - bool bPersistent, - bool bGlobal, - bool bNLS ) -{ - TQString aValue; - if (rColor.isValid()) - aValue.sprintf( "%d,%d,%d", rColor.red(), rColor.green(), rColor.blue() ); - else - aValue = "invalid"; - - writeEntry( pKey, aValue, bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::writeEntry( const TQString& pKey, const TQDateTime& rDateTime, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - writeEntry(pKey.utf8().data(), rDateTime, bPersistent, bGlobal, bNLS); -} - -void KConfigBase::writeEntry( const char *pKey, const TQDateTime& rDateTime, - bool bPersistent, bool bGlobal, - bool bNLS ) -{ - TQStrList list; - TQCString tempstr; - - TQTime time = TQT_TQTIME_OBJECT(rDateTime.time()); - TQDate date = TQT_TQDATE_OBJECT(rDateTime.date()); - - list.insert( 0, tempstr.setNum( date.year() ) ); - list.insert( 1, tempstr.setNum( date.month() ) ); - list.insert( 2, tempstr.setNum( date.day() ) ); - - list.insert( 3, tempstr.setNum( time.hour() ) ); - list.insert( 4, tempstr.setNum( time.minute() ) ); - list.insert( 5, tempstr.setNum( time.second() ) ); - - writeEntry( pKey, list, ',', bPersistent, bGlobal, bNLS ); -} - -void KConfigBase::parseConfigFiles() -{ - if (!bLocaleInitialized && KGlobal::_locale) { - setLocale(); - } - if (backEnd) - { - backEnd->parseConfigFiles(); - bReadOnly = (backEnd->getConfigState() == ReadOnly); - } -} - -void KConfigBase::sync() -{ - if (isReadOnly()) - return; - - if (backEnd) - backEnd->sync(); - if (bDirty) - rollback(); -} - -KConfigBase::ConfigState KConfigBase::getConfigState() const { - if (backEnd) - return backEnd->getConfigState(); - return ReadOnly; -} - -void KConfigBase::rollback( bool /*bDeep = true*/ ) -{ - bDirty = false; -} - - -void KConfigBase::setReadDefaults(bool b) -{ - if (!d) - { - if (!b) return; - d = new KConfigBasePrivate(); - } - - d->readDefaults = b; -} - -bool KConfigBase::readDefaults() const -{ - return (d && d->readDefaults); -} - -void KConfigBase::revertToDefault(const TQString &key) -{ - setDirty(true); - - KEntryKey aEntryKey(mGroup, key.utf8()); - aEntryKey.bDefault = true; - - if (!locale().isNull()) { - // try the localized key first - aEntryKey.bLocal = true; - KEntry entry = lookupData(aEntryKey); - if (entry.mValue.isNull()) - entry.bDeleted = true; - - entry.bDirty = true; - putData(aEntryKey, entry, true); // Revert - aEntryKey.bLocal = false; - } - - // try the non-localized version - KEntry entry = lookupData(aEntryKey); - if (entry.mValue.isNull()) - entry.bDeleted = true; - entry.bDirty = true; - putData(aEntryKey, entry, true); // Revert -} - -bool KConfigBase::hasDefault(const TQString &key) const -{ - KEntryKey aEntryKey(mGroup, key.utf8()); - aEntryKey.bDefault = true; - - if (!locale().isNull()) { - // try the localized key first - aEntryKey.bLocal = true; - KEntry entry = lookupData(aEntryKey); - if (!entry.mValue.isNull()) - return true; - - aEntryKey.bLocal = false; - } - - // try the non-localized version - KEntry entry = lookupData(aEntryKey); - if (!entry.mValue.isNull()) - return true; - - return false; -} - - - -KConfigGroup::KConfigGroup(KConfigBase *master, const TQString &group) -{ - mMaster = master; - backEnd = mMaster->backEnd; // Needed for getConfigState() - bLocaleInitialized = true; - bReadOnly = mMaster->bReadOnly; - bExpand = false; - bDirty = false; // Not used - mGroup = group.utf8(); - aLocaleString = mMaster->aLocaleString; - setReadDefaults(mMaster->readDefaults()); -} - -KConfigGroup::KConfigGroup(KConfigBase *master, const TQCString &group) -{ - mMaster = master; - backEnd = mMaster->backEnd; // Needed for getConfigState() - bLocaleInitialized = true; - bReadOnly = mMaster->bReadOnly; - bExpand = false; - bDirty = false; // Not used - mGroup = group; - aLocaleString = mMaster->aLocaleString; - setReadDefaults(mMaster->readDefaults()); -} - -KConfigGroup::KConfigGroup(KConfigBase *master, const char * group) -{ - mMaster = master; - backEnd = mMaster->backEnd; // Needed for getConfigState() - bLocaleInitialized = true; - bReadOnly = mMaster->bReadOnly; - bExpand = false; - bDirty = false; // Not used - mGroup = group; - aLocaleString = mMaster->aLocaleString; - setReadDefaults(mMaster->readDefaults()); -} - -void KConfigGroup::deleteGroup(bool bGlobal) -{ - mMaster->deleteGroup(KConfigBase::group(), true, bGlobal); -} - -bool KConfigGroup::groupIsImmutable() const -{ - return mMaster->groupIsImmutable(KConfigBase::group()); -} - -void KConfigGroup::setDirty(bool _bDirty) -{ - mMaster->setDirty(_bDirty); -} - -void KConfigGroup::putData(const KEntryKey &_key, const KEntry &_data, bool _checkGroup) -{ - mMaster->putData(_key, _data, _checkGroup); -} - -KEntry KConfigGroup::lookupData(const KEntryKey &_key) const -{ - return mMaster->lookupData(_key); -} - -void KConfigGroup::sync() -{ - mMaster->sync(); -} - -void KConfigBase::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -void KConfigGroup::virtual_hook( int id, void* data ) -{ KConfigBase::virtual_hook( id, data ); } - -bool KConfigBase::checkConfigFilesWritable(bool warnUser) -{ - if (backEnd) - return backEnd->checkConfigFilesWritable(warnUser); - else - return false; -} - -#include "kconfigbase.moc" |