summaryrefslogtreecommitdiffabout
path: root/microkde/kconfig.cpp
Side-by-side diff
Diffstat (limited to 'microkde/kconfig.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kconfig.cpp467
1 files changed, 467 insertions, 0 deletions
diff --git a/microkde/kconfig.cpp b/microkde/kconfig.cpp
new file mode 100644
index 0000000..3f23ed2
--- a/dev/null
+++ b/microkde/kconfig.cpp
@@ -0,0 +1,467 @@
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qwidget.h>
+
+#include "kdebug.h"
+
+#include "kurl.h"
+#include "kstandarddirs.h"
+#include "kconfig.h"
+
+QString KConfig::mGroup = "";
+//QString KConfig::mGroup = "General";
+
+KConfig::KConfig( const QString &fileName )
+ : mFileName( fileName ), mDirty( false )
+{
+ kdDebug() << "KConfig::KConfig(): '" << fileName << "'" << endl;
+
+ load();
+
+}
+
+
+KConfig::~KConfig()
+{
+ sync();
+}
+
+void KConfig::setGroup( const QString &group )
+{
+ kdDebug() << "KConfig::setGroup(): '" << group << "'" << endl;
+
+ mGroup = group;
+
+ if ( mGroup.right( 1 ) != "/" ) mGroup += "/";
+}
+
+//US
+QString KConfig::group() const {
+ return mGroup;
+}
+
+//US added method
+QValueList<int> KConfig::readIntListEntry( const QString & key)
+{
+// qDebug("KConfig::readIntListEntry key=%s:", key.latin1());
+
+ QValueList<int> result;
+
+ QMap<QString,QString>::ConstIterator mit = mStringMap.find( mGroup + key );
+
+ if ( mit == mStringMap.end() ) {
+ return result;
+ }
+
+ QStringList valuesAsStrings = QStringList::split(":", *mit );
+ bool ok = false;
+ bool ok2 = true;
+ int val;
+
+ for ( QStringList::Iterator sit = valuesAsStrings.begin(); sit != valuesAsStrings.end(); ++sit ) {
+ val = (*sit).toInt(&ok);
+ result << val;
+ if (ok == false) {
+ qDebug("KConfig::readIntListEntry str=%s , int=%n:", (*sit).latin1(), &val);
+ ok2 = false;
+ }
+ }
+
+ if (ok2 == false)
+ {
+ kdDebug() << "KConfig::readIntListEntry: error while reading one of the intvalues." << endl;
+ qDebug("KConfig::readIntListEntry: error while reading one of the intvalues.");
+ }
+
+ return result;
+}
+
+int KConfig::readNumEntry( const QString & key, int def )
+{
+ QString res = readEntry(key, QString::number(def ) );
+ bool ok = false;
+ int result = res.toInt(&ok);
+ if ( ok )
+ return result;
+ return def;
+}
+
+QString KConfig::readEntry( const QString &key, const QString &def )
+{
+ QMap<QString,QString>::ConstIterator it = mStringMap.find( mGroup + key );
+
+ if ( it == mStringMap.end() ) {
+ return def;
+ }
+
+ return *it;
+}
+
+QStringList KConfig::readListEntry( const QString &key )
+{
+ QMap<QString,QString>::ConstIterator it = mStringMap.find( mGroup + key );
+
+ if ( it == mStringMap.end() ) {
+ return QStringList();
+ }
+ return QStringList::split(":", *it );
+
+}
+
+bool KConfig::readBoolEntry( const QString &key, bool def )
+{
+ QMap<QString,bool>::ConstIterator it = mBoolMap.find( mGroup + key );
+
+ if ( it == mBoolMap.end() ) {
+ return def;
+ }
+
+ return *it;
+}
+
+QColor KConfig::readColorEntry( const QString & e, QColor *def )
+{
+
+ QStringList l;
+ l = readListEntry( e );
+ if (l.count() != 3 ) {
+ if ( def )
+ return *def;
+ else
+ return QColor();
+ }
+ QColor c ( l[0].toInt(), l[1].toInt(), l[2].toInt() );
+ return c;
+}
+
+QFont KConfig::readFontEntry( const QString & e, QFont *def )
+{
+ QStringList font = readListEntry( e );
+ if ( font.isEmpty() )
+ return *def;
+ QFont f;
+ f.setFamily( font[0]);
+ f.setBold ( font[1] == "bold");
+ f.setPointSize ( font[2].toInt());
+ f.setItalic( font[1] == "italic" );
+ return f;
+}
+
+QDateTime KConfig::readDateTimeEntry( const QString &key, const QDateTime *def )
+{
+ QMap<QString,QDateTime>::ConstIterator it = mDateTimeMap.find( mGroup + key );
+
+ if ( it == mDateTimeMap.end() ) {
+ if ( def ) return *def;
+ else return QDateTime();
+ }
+
+ return *it;
+}
+
+//US added method
+void KConfig::writeEntry( const QString &key, const QValueList<int> &value)
+{
+ QStringList valuesAsStrings;
+
+ QValueList<int>::ConstIterator it;
+
+ for( it = value.begin(); it != value.end(); ++it )
+ {
+ valuesAsStrings << QString::number(*it);
+ }
+
+ mStringMap.insert( mGroup + key, valuesAsStrings.join(":") );
+ mDirty = true;
+}
+
+void KConfig::writeEntry( const QString & key , int num )
+{
+ writeEntry( key, QString::number ( num ) );
+}
+
+void KConfig::writeEntry( const QString &key, const QString &value )
+{
+ mStringMap.insert( mGroup + key, value );
+
+ mDirty = true;
+}
+
+void KConfig::writeEntry( const QString &key, const QStringList &value )
+{
+ mStringMap.insert( mGroup + key, value.join(":") );
+
+ mDirty = true;
+}
+
+void KConfig::writeEntry( const QString &key, bool value)
+{
+ mBoolMap.insert( mGroup + key, value );
+
+ mDirty = true;
+}
+
+void KConfig::writeEntry( const QString & e, const QColor & c )
+{
+ QStringList l;
+ l.append( QString::number ( c.red() ) );
+ l.append( QString::number ( c.green() ) );
+ l.append( QString::number ( c.blue() ) );
+ writeEntry( e, l );
+}
+
+void KConfig::writeEntry( const QString & e , const QFont & f )
+{
+ QStringList font;
+ font.append( f.family());
+ font.append( (!f.bold ()?"nonbold":"bold") );
+ font.append( QString::number ( f.pointSize () ) );
+ font.append( !f.italic ()?"nonitalic":"italic" );
+ writeEntry( e, font );
+}
+
+void KConfig::writeEntry( const QString &key, const QDateTime &dt )
+{
+ mDateTimeMap.insert( mGroup + key, dt );
+}
+
+void KConfig::load()
+{
+ kdDebug() << "KConfig::load(): " << mFileName << endl;
+
+ QFile f( mFileName );
+ if ( !f.open( IO_ReadOnly ) ) {
+ qDebug("KConfig: could not open file %s ",mFileName.latin1() );
+ return;
+ }
+
+ mBoolMap.clear();
+ mStringMap.clear();
+
+ QTextStream t( &f );
+
+ QString line = t.readLine();
+
+ while ( !line.isNull() ) {
+ QStringList tokens = QStringList::split( ",", line );
+ if ( tokens[0] == "bool" ) {
+ bool value = false;
+ if ( tokens[2] == "1" ) value = true;
+ mBoolMap.insert( tokens[1], value );
+ } else if ( tokens[0] == "QString" ) {
+ QString value = tokens[2];
+ mStringMap.insert( tokens[1], value );
+ } else if ( tokens[0] == "QDateTime" ) {
+#if 0
+ int year = tokens[2].toInt();
+ QDateTime dt( QDate( year,
+ tokens[3].toInt(),
+ tokens[4].toInt() ),
+ QTime( tokens[5].toInt(), tokens[6].toInt(),
+ tokens[7].toInt() ) );
+ mDateTimeMap.insert( tokens[1], dt );
+#endif
+ }
+
+ line = t.readLine();
+ }
+}
+
+void KConfig::sync()
+{
+
+ if ( !mDirty ) return;
+ //qDebug("KConfig::sync() %s ",mFileName.latin1() );
+ //kdDebug() << "KConfig::sync(): " << mFileName << endl;
+
+//US I took the following code from a newer version of KDE
+ // Create the containing dir if needed
+ KURL path;
+ path.setPath(mFileName);
+ QString dir=path.directory();
+ KStandardDirs::makeDir(dir);
+
+ QFile f( mFileName );
+ if ( !f.open( IO_WriteOnly ) ) {
+
+ qDebug("KConfig::sync() Can't open file %s ",mFileName.latin1() );
+
+ return;
+ }
+
+ QTextStream t( &f );
+
+ QMap<QString,bool>::ConstIterator itBool;
+ for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) {
+ t << "bool," << itBool.key() << "," << ( *itBool ? "1" : "0" ) << endl;
+ }
+
+ QMap<QString,QString>::ConstIterator itString;
+ for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) {
+ t << "QString," << itString.key() << "," << (*itString ) << endl;
+ }
+
+ QMap<QString,QDateTime>::ConstIterator itDateTime;
+ for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) {
+ QDateTime dt = *itDateTime;
+ t << "QDateTime," << itDateTime.key() << ","
+ << dt.date().year() << ","
+ << dt.date().month() << ","
+ << dt.date().day() << ","
+ << dt.time().hour() << ","
+ << dt.time().minute() << ","
+ << dt.time().second() << endl;
+ }
+
+ f.close();
+
+ mDirty = false;
+}
+
+
+//US I took the following deleteGroup method from a newer version from KDE.
+/**
+ * Deletes a configuration entry group
+ *
+ * If the group is not empty and bDeep is false, nothing gets
+ * deleted and false is returned.
+ * If this group is the current group and it is deleted, the
+ * current group is undefined and should be set with setGroup()
+ * before the next operation on the configuration object.
+ *
+ * @param group The name of the group
+ * returns true if we deleted at least one entry.
+ */
+bool KConfig::deleteGroup( const QString& group)
+{
+ bool dirty = false;
+ int pos;
+
+ QMap<QString,bool>::Iterator itBool;
+ for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool )
+ {
+ pos = itBool.key().find( group );
+ if (pos == 0) {
+ mBoolMap.remove(itBool);
+ dirty = true;
+ }
+ }
+
+ QMap<QString,QString>::Iterator itString;
+ for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString )
+ {
+ pos = itString.key().find( group );
+ if (pos == 0) {
+ mStringMap.remove(itString);
+ dirty = true;
+ }
+ }
+
+ QMap<QString,QDateTime>::Iterator itDateTime;
+ for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime )
+ {
+ pos = itDateTime.key().find( group );
+ if (pos == 0) {
+ mDateTimeMap.remove(itDateTime);
+ dirty = true;
+ }
+ }
+
+ if (dirty)
+ mDirty = true;
+
+ return dirty;
+
+}
+
+//US I took the following hasGroup method from a newer version from KDE.
+ /**
+ * Returns true if the specified group is known about.
+ *
+ * @param group The group to search for.
+ * @return Whether the group exists.
+ */
+bool KConfig::hasGroup(const QString &group) const
+{
+ QMap<QString,bool>::ConstIterator itBool;
+ for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool )
+ {
+ if (itBool.key().find( group ) == 0) {
+ return true;
+ }
+ }
+
+ QMap<QString,QString>::ConstIterator itString;
+ for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString )
+ {
+ if (itString.key().find( group ) == 0) {
+ return true;
+ }
+ }
+
+ QMap<QString,QDateTime>::ConstIterator itDateTime;
+ for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime )
+ {
+ if (itDateTime.key().find( group ) == 0) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void KConfig::deleteEntry( const QString &key)
+{
+ bool dirty = false;
+
+ QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key );
+ if ( itBool != mBoolMap.end() ) {
+ mBoolMap.remove(itBool);
+ dirty = true;
+ }
+
+
+ QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key );
+ if ( itString != mStringMap.end() ) {
+ mStringMap.remove(itString);
+ dirty = true;
+ }
+
+
+ QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key );
+ if ( itDateTime != mDateTimeMap.end() ) {
+ mDateTimeMap.remove(itDateTime);
+ dirty = true;
+ }
+
+ if (dirty)
+ mDirty = true;
+
+}
+
+//US
+QString KConfig::getFileName()
+{
+ return mFileName;
+}
+
+bool KConfig::hasKey( const QString &key)
+{
+ QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key );
+ if ( itBool != mBoolMap.end() ) {
+ return true;
+ }
+
+ QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key );
+ if ( itString != mStringMap.end() ) {
+ return true;
+ }
+
+ QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key );
+ if ( itDateTime != mDateTimeMap.end() ) {
+ return true;
+ }
+
+ return false;
+}
+