You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kdecore/kconfigskeleton.h

1231 lines
36 KiB

/*
* This file is part of KDE.
*
* Copyright (c) 2001,2002,2003 Cornelius Schumacher <schumacher@kde.org>
* Copyright (c) 2003 Waldo Bastian <bastian@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.
*/
#ifndef _KCONFIGSKELETON_H
#define _KCONFIGSKELETON_H
#include <qcolor.h>
#include <qdatetime.h>
#include <qfont.h>
#include <qpoint.h>
#include <qptrlist.h>
#include <qdict.h>
#include <qrect.h>
#include <qsize.h>
#include <qstringlist.h>
#include <qvariant.h>
#include <kconfig.h>
#include <kglobalsettings.h>
/**
* @short Class for storing a preferences setting
* @author Cornelius Schumacher
* @see KConfigSkeleton
*
* This class represents one preferences setting as used by @ref KConfigSkeleton.
* Subclasses of KConfigSkeletonItem implement storage functions for a certain type of
* setting. Normally you don't have to use this class directly. Use the special
* addItem() functions of KConfigSkeleton instead. If you subclass this class you will
* have to register instances with the function KConfigSkeleton::addItem().
*/
class KDECORE_EXPORT KConfigSkeletonItem
{
public:
typedef QValueList < KConfigSkeletonItem * >List;
typedef QDict < KConfigSkeletonItem > Dict;
typedef QDictIterator < KConfigSkeletonItem > DictIterator;
/**
* Constructor.
*
* @param group Config file group.
* @param key Config file key.
*/
KConfigSkeletonItem(const QString & group, const QString & key)
:mGroup(group),mKey(key), mIsImmutable(true)
{
}
/**
* Destructor.
*/
virtual ~KConfigSkeletonItem()
{
}
/**
* Set config file group.
*/
void setGroup( const QString &group )
{
mGroup = group;
}
/**
* Return config file group.
*/
QString group() const
{
return mGroup;
}
/**
* Set config file key.
*/
void setKey( const QString &key )
{
mKey = key;
}
/**
* Return config file key.
*/
QString key() const
{
return mKey;
}
/**
* Set internal name of entry.
*/
void setName(const QString &name)
{
mName = name;
}
/**
* Return internal name of entry.
*/
QString name() const
{
return mName;
}
/**
Set label providing a translated one-line description of the item.
*/
void setLabel( const QString &l )
{
mLabel = l;
}
/**
Return label of item. See setLabel().
*/
QString label() const
{
return mLabel;
}
/**
Set WhatsThis description og item.
*/
void setWhatsThis( const QString &w )
{
mWhatsThis = w;
}
/**
Return WhatsThis description of item. See setWhatsThis().
*/
QString whatsThis() const
{
return mWhatsThis;
}
/**
* This function is called by @ref KConfigSkeleton to read the value for this setting
* from a config file.
* value.
*/
virtual void readConfig(KConfig *) = 0;
/**
* This function is called by @ref KConfigSkeleton to write the value of this setting
* to a config file.
*/
virtual void writeConfig(KConfig *) = 0;
/**
* Read global default value.
*/
virtual void readDefault(KConfig *) = 0;
/**
* Set item to @p p
*/
virtual void setProperty(const QVariant &p) = 0;
/**
* Return item as property
*/
virtual QVariant property() const = 0;
/**
* Return minimum value of item or invalid if not specified
*/
virtual QVariant minValue() const { return QVariant(); }
/**
* Return maximum value of item or invalid if not specified
*/
virtual QVariant maxValue() const { return QVariant(); }
/**
Sets the current value to the default value.
*/
virtual void setDefault() = 0;
/**
* Exchanges the current value with the default value
* Used by KConfigSkeleton::useDefaults(bool);
*/
virtual void swapDefault() = 0;
/**
* Return if the entry can be modified.
*/
bool isImmutable() const
{
return mIsImmutable;
}
protected:
/**
* sets mIsImmutable to true if mKey in config is immutable
* @param config KConfig to check if mKey is immutable in
*/
void readImmutability(KConfig *config);
QString mGroup;
QString mKey;
QString mName;
private:
bool mIsImmutable;
QString mLabel;
QString mWhatsThis;
};
template < typename T > class KConfigSkeletonGenericItem:public KConfigSkeletonItem
{
public:
KConfigSkeletonGenericItem(const QString & group, const QString & key, T & reference,
T defaultValue)
: KConfigSkeletonItem(group, key), mReference(reference),
mDefault(defaultValue), mLoadedValue(defaultValue)
{
}
/**
* Set value of this KConfigSkeletonItem.
*/
void setValue(const T & v)
{
mReference = v;
}
/**
* Return value of this KConfigSkeletonItem.
*/
T & value()
{
return mReference;
}
/**
* Return const value of this KConfigSkeletonItem.
*/
const T & value() const
{
return mReference;
}
/**
Set default value for this item.
*/
virtual void setDefaultValue( const T &v )
{
mDefault = v;
}
virtual void setDefault()
{
mReference = mDefault;
}
virtual void writeConfig(KConfig * config)
{
if ( mReference != mLoadedValue ) // Is this needed?
{
config->setGroup(mGroup);
if ((mDefault == mReference) && !config->hasDefault( mKey))
config->revertToDefault( mKey );
else
config->writeEntry(mKey, mReference);
}
}
void readDefault(KConfig * config)
{
config->setReadDefaults(true);
readConfig(config);
config->setReadDefaults(false);
mDefault = mReference;
}
void swapDefault()
{
T tmp = mReference;
mReference = mDefault;
mDefault = tmp;
}
protected:
T & mReference;
T mDefault;
T mLoadedValue;
};
/**
* @short Class for handling preferences settings for an application.
* @author Cornelius Schumacher
* @see KConfigSkeletonItem
*
* This class provides an interface to preferences settings. Preferences items
* can be registered by the addItem() function corresponding to the data type of
* the seetting. KConfigSkeleton then handles reading and writing of config files and
* setting of default values.
*
* Normally you will subclass KConfigSkeleton, add data members for the preferences
* settings and register the members in the constructor of the subclass.
*
* Example:
* \code
* class MyPrefs : public KConfigSkeleton
* {
* public:
* MyPrefs()
* {
* setCurrentGroup("MyGroup");
* addItemBool("MySetting1",mMyBool,false);
* addItemColor("MySetting2",mMyColor,QColor(1,2,3));
*
* setCurrentGroup("MyOtherGroup");
* addItemFont("MySetting3",mMyFont,QFont("helvetica",12));
* }
*
* bool mMyBool;
* QColor mMyColor;
* QFont mMyFont;
* }
* \endcode
*
* It might be convenient in many cases to make this subclass of KConfigSkeleton a
* singleton for global access from all over the application without passing
* references to the KConfigSkeleton object around.
*
* You can write the data to the configuration file by calling @ref writeConfig()
* and read the data from the configuration file by calling @ref readConfig().
*
* If you have items, which are not covered by the existing addItem() functions
* you can add customized code for reading, writing and default setting by
* implementing the functions @ref usrUseDefaults(), @ref usrReadConfig() and
* @ref usrWriteConfig().
*
* Internally preferences settings are stored in instances of subclasses of
* @ref KConfigSkeletonItem. You can also add KConfigSkeletonItem subclasses
* for your own types and call the generic @ref addItem() to register them.
*
* In many cases you don't have to write the specific KConfigSkeleton
* subclasses yourself, but you can use \ref kconfig_compiler to automatically
* generate the C++ code from an XML description of the configuration options.
*/
class KDECORE_EXPORT KConfigSkeleton
{
public:
/**
* Class for handling a string preferences item.
*/
class KDECORE_EXPORT ItemString:public KConfigSkeletonGenericItem < QString >
{
public:
enum Type { Normal, Password, Path };
ItemString(const QString & group, const QString & key,
QString & reference,
const QString & defaultValue = QString::fromLatin1(""), // NOT QString::null !!
Type type = Normal);
void writeConfig(KConfig * config);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
private:
Type mType;
};
/**
* Class for handling a password preferences item.
*/
class KDECORE_EXPORT ItemPassword:public ItemString
{
public:
ItemPassword(const QString & group, const QString & key,
QString & reference,
const QString & defaultValue = QString::fromLatin1("")); // NOT QString::null !!
};
/**
* Class for handling a path preferences item.
*/
class KDECORE_EXPORT ItemPath:public ItemString
{
public:
ItemPath(const QString & group, const QString & key,
QString & reference,
const QString & defaultValue = QString::null);
};
/**
* Class for handling a QVariant preferences item.
*/
class KDECORE_EXPORT ItemProperty:public KConfigSkeletonGenericItem < QVariant >
{
public:
ItemProperty(const QString & group, const QString & key,
QVariant & reference, QVariant defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a bool preferences item.
*/
class KDECORE_EXPORT ItemBool:public KConfigSkeletonGenericItem < bool >
{
public:
ItemBool(const QString & group, const QString & key, bool & reference,
bool defaultValue = true);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling an integer preferences item.
*/
class KDECORE_EXPORT ItemInt:public KConfigSkeletonGenericItem < int >
{
public:
ItemInt(const QString & group, const QString & key, int &reference,
int defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(int);
void setMaxValue(int);
private:
bool mHasMin : 1;
bool mHasMax : 1;
int mMin;
int mMax;
};
/**
* Class for handling an 64-bit integer preferences item.
*/
class KDECORE_EXPORT ItemInt64:public KConfigSkeletonGenericItem < Q_INT64 >
{
public:
ItemInt64(const QString & group, const QString & key, Q_INT64 &reference,
Q_INT64 defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(Q_INT64);
void setMaxValue(Q_INT64);
private:
bool mHasMin : 1;
bool mHasMax : 1;
Q_INT64 mMin;
Q_INT64 mMax;
};
/**
* Class for handling enums.
*/
class KDECORE_EXPORT ItemEnum:public ItemInt
{
public:
struct Choice
{
QString name;
QString label;
QString whatsThis;
};
ItemEnum(const QString & group, const QString & key, int &reference,
const QValueList<Choice> &choices, int defaultValue = 0);
QValueList<Choice> choices() const;
void readConfig(KConfig * config);
void writeConfig(KConfig * config);
private:
QValueList<Choice> mChoices;
};
/**
* Class for handling an unsingend integer preferences item.
*/
class KDECORE_EXPORT ItemUInt:public KConfigSkeletonGenericItem < unsigned int >
{
public:
ItemUInt(const QString & group, const QString & key,
unsigned int &reference, unsigned int defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(unsigned int);
void setMaxValue(unsigned int);
private:
bool mHasMin : 1;
bool mHasMax : 1;
unsigned int mMin;
unsigned int mMax;
};
/**
* Class for hanlding a long integer preferences item.
*/
class KDECORE_EXPORT ItemLong:public KConfigSkeletonGenericItem < long >
{
public:
ItemLong(const QString & group, const QString & key, long &reference,
long defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(long);
void setMaxValue(long);
private:
bool mHasMin : 1;
bool mHasMax : 1;
long mMin;
long mMax;
};
/**
* Class for handling an unsigned long integer preferences item.
*/
class KDECORE_EXPORT ItemULong:public KConfigSkeletonGenericItem < unsigned long >
{
public:
ItemULong(const QString & group, const QString & key,
unsigned long &reference, unsigned long defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(unsigned long);
void setMaxValue(unsigned long);
private:
bool mHasMin : 1;
bool mHasMax : 1;
unsigned long mMin;
unsigned long mMax;
};
/**
* Class for handling unsigned 64-bit integer preferences item.
*/
class KDECORE_EXPORT ItemUInt64:public KConfigSkeletonGenericItem < Q_UINT64 >
{
public:
ItemUInt64(const QString & group, const QString & key, Q_UINT64 &reference,
Q_UINT64 defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(Q_UINT64);
void setMaxValue(Q_UINT64);
private:
bool mHasMin : 1;
bool mHasMax : 1;
Q_UINT64 mMin;
Q_UINT64 mMax;
};
/**
* Class for handling a floating point preference item.
*/
class KDECORE_EXPORT ItemDouble:public KConfigSkeletonGenericItem < double >
{
public:
ItemDouble(const QString & group, const QString & key,
double &reference, double defaultValue = 0);
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
QVariant minValue() const;
QVariant maxValue() const;
void setMinValue(double);
void setMaxValue(double);
private:
bool mHasMin : 1;
bool mHasMax : 1;
double mMin;
double mMax;
};
/**
* Class for handling a color preferences item.
*/
class KDECORE_EXPORT ItemColor:public KConfigSkeletonGenericItem < QColor >
{
public:
ItemColor(const QString & group, const QString & key,
QColor & reference,
const QColor & defaultValue = QColor(128, 128, 128));
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a font preferences item.
*/
class KDECORE_EXPORT ItemFont:public KConfigSkeletonGenericItem < QFont >
{
public:
ItemFont(const QString & group, const QString & key, QFont & reference,
const QFont & defaultValue = KGlobalSettings::generalFont());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a QRect preferences item.
*/
class KDECORE_EXPORT ItemRect:public KConfigSkeletonGenericItem < QRect >
{
public:
ItemRect(const QString & group, const QString & key, QRect & reference,
const QRect & defaultValue = QRect());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a QPoint preferences item.
*/
class KDECORE_EXPORT ItemPoint:public KConfigSkeletonGenericItem < QPoint >
{
public:
ItemPoint(const QString & group, const QString & key, QPoint & reference,
const QPoint & defaultValue = QPoint());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a QSize preferences item.
*/
class KDECORE_EXPORT ItemSize:public KConfigSkeletonGenericItem < QSize >
{
public:
ItemSize(const QString & group, const QString & key, QSize & reference,
const QSize & defaultValue = QSize());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a QDateTime preferences item.
*/
class KDECORE_EXPORT ItemDateTime:public KConfigSkeletonGenericItem < QDateTime >
{
public:
ItemDateTime(const QString & group, const QString & key,
QDateTime & reference,
const QDateTime & defaultValue = QDateTime());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a string list preferences item.
*/
class KDECORE_EXPORT ItemStringList:public KConfigSkeletonGenericItem < QStringList >
{
public:
ItemStringList(const QString & group, const QString & key,
QStringList & reference,
const QStringList & defaultValue = QStringList());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
/**
* Class for handling a path list preferences item.
*/
class KDECORE_EXPORT ItemPathList:public ItemStringList
{
public:
ItemPathList(const QString & group, const QString & key,
QStringList & reference,
const QStringList & defaultValue = QStringList());
void readConfig(KConfig * config);
void writeConfig(KConfig * config);
};
/**
* Class for handling an integer list preferences item.
*/
class KDECORE_EXPORT ItemIntList:public KConfigSkeletonGenericItem < QValueList < int > >
{
public:
ItemIntList(const QString & group, const QString & key,
QValueList < int >&reference,
const QValueList < int >&defaultValue = QValueList < int >());
void readConfig(KConfig * config);
void setProperty(const QVariant & p);
QVariant property() const;
};
public:
/**
* Constructor.
*
* @param configname name of config file. If no name is given, the default
* config file as returned by kapp()->config() is used.
*/
KConfigSkeleton(const QString & configname = QString::null);
/**
* Constructor.
*
* @param config configuration object to use.
*/
KConfigSkeleton(KSharedConfig::Ptr config);
/**
* Destructor
*/
virtual ~ KConfigSkeleton();
/**
Set all registered items to their default values.
*/
void setDefaults();
/**
* Read preferences from config file. All registered items are set to the
* values read from disk.
*/
void readConfig();
/**
* Write preferences to config file. The values of all registered items are
* written to disk.
*/
void writeConfig();
/**
* Set the config file group for subsequent addItem() calls. It is valid
* until setCurrentGroup() is called with a new argument. Call this before
* you add any items. The default value is "No Group".
*/
void setCurrentGroup(const QString & group);
/**
* Returns the current group used for addItem() calls.
*/
QString currentGroup() // ### KDE 4.0: make const
{
return mCurrentGroup;
}
/**
* Register a custom @ref KConfigSkeletonItem with a given name. If the name
* parameter is null, take the name from KConfigSkeletonItem::key().
* Note that all names must be unique but that multiple entries can have
* the same key if they reside in different groups.
*/
void addItem(KConfigSkeletonItem *, const QString & name = QString::null );
/**
* Register an item of type QString.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemString *addItemString(const QString & name, QString & reference,
const QString & defaultValue = QString::fromLatin1(""), // NOT QString::null !!
const QString & key = QString::null);
/**
* Register a password item of type QString. The string value is written
* encrypted to the config file. Note that the current encryption scheme
* is very weak.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemPassword *addItemPassword(const QString & name, QString & reference,
const QString & defaultValue = QString::fromLatin1(""),
const QString & key = QString::null);
/**
* Register a path item of type QString. The string value is interpreted
* as a path. This means, dollar expension is activated for this value, so
* that e.g. $HOME gets expanded.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemPath *addItemPath(const QString & name, QString & reference,
const QString & defaultValue = QString::fromLatin1(""),
const QString & key = QString::null);
/**
* Register a property item of type QVariant. Note that only the following
* QVariant types are allowed: String, StringList, Font, Point, Rect, Size,
* Color, Int, UInt, Bool, Double, DateTime and Date.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemProperty *addItemProperty(const QString & name, QVariant & reference,
const QVariant & defaultValue = QVariant(),
const QString & key = QString::null);
/**
* Register an item of type bool.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemBool *addItemBool(const QString & name, bool & reference,
bool defaultValue = false,
const QString & key = QString::null);
/**
* Register an item of type int.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemInt *addItemInt(const QString & name, int &reference, int defaultValue = 0,
const QString & key = QString::null);
/**
* Register an item of type unsigned int.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemUInt *addItemUInt(const QString & name, unsigned int &reference,
unsigned int defaultValue = 0,
const QString & key = QString::null);
/**
* Register an item of type long.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemLong *addItemLong(const QString & name, long &reference,
long defaultValue = 0,
const QString & key = QString::null);
/**
* Register an item of type unsigned long.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemULong *addItemULong(const QString & name, unsigned long &reference,
unsigned long defaultValue = 0,
const QString & key = QString::null);
/**
* Register an item of type Q_INT64.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemInt64 *addItemInt64(const QString & name, Q_INT64 &reference,
Q_INT64 defaultValue = 0,
const QString & key = QString::null);
/**
* Register an item of type Q_UINT64
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemUInt64 *addItemUInt64(const QString & name, Q_UINT64 &reference,
Q_UINT64 defaultValue = 0,
const QString & key = QString::null);
/**
* Register an item of type double.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemDouble *addItemDouble(const QString & name, double &reference,
double defaultValue = 0.0,
const QString & key = QString::null);
/**
* Register an item of type QColor.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemColor *addItemColor(const QString & name, QColor & reference,
const QColor & defaultValue = QColor(128, 128, 128),
const QString & key = QString::null);
/**
* Register an item of type QFont.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemFont *addItemFont(const QString & name, QFont & reference,
const QFont & defaultValue =
KGlobalSettings::generalFont(),
const QString & key = QString::null);
/**
* Register an item of type QRect.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemRect *addItemRect(const QString & name, QRect & reference,
const QRect & defaultValue = QRect(),
const QString & key = QString::null);
/**
* Register an item of type QPoint.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemPoint *addItemPoint(const QString & name, QPoint & reference,
const QPoint & defaultValue = QPoint(),
const QString & key = QString::null);
/**
* Register an item of type QSize.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemSize *addItemSize(const QString & name, QSize & reference,
const QSize & defaultValue = QSize(),
const QString & key = QString::null);
/**
* Register an item of type QDateTime.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemDateTime *addItemDateTime(const QString & name, QDateTime & reference,
const QDateTime & defaultValue = QDateTime(),
const QString & key = QString::null);
/**
* Register an item of type QStringList.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemStringList *addItemStringList(const QString & name, QStringList & reference,
const QStringList & defaultValue = QStringList(),
const QString & key = QString::null);
/**
* Register an item of type QValueList<int>.
*
* @param name Name used to indentify this setting. Names must be unique.
* @param reference Pointer to the variable, which is set by readConfig()
* calls and read by writeConfig() calls.
* @param defaultValue Default value, which is used when the config file
* does not yet contain the key of this item.
* @param key Key used in config file. If key is null, name is used as key.
* @return The created item
*/
ItemIntList *addItemIntList(const QString & name, QValueList < int >&reference,
const QValueList < int >&defaultValue =
QValueList < int >(),
const QString & key = QString::null);
/**
* Return the @ref KConfig object used for reading and writing the settings.
*/
KConfig *config() const;
/**
* Return list of items managed by this KConfigSkeleton object.
*/
KConfigSkeletonItem::List items() const
{
return mItems;
}
/**
* Return whether a certain item is immutable
*/
bool isImmutable(const QString & name);
/**
* Lookup item by name
*/
KConfigSkeletonItem * findItem(const QString & name);
/**
* Indicate whether this object should reflect the actual
* values or the default values.
* @param b If true this object reflects the default values.
* @return The state prior to this call
*/
bool useDefaults(bool b);
protected:
/**
* Implemented by subclasses that use special defaults.
* It should replace the default values with the actual
* values and vice versa.
*/
virtual void usrUseDefaults(bool)
{
}
virtual void usrSetDefaults()
{
}
/**
* Implemented by subclasses that read special config values.
*/
virtual void usrReadConfig()
{
}
/**
* Implemented by subclasses that write special config values.
*/
virtual void usrWriteConfig()
{
}
private:
QString mCurrentGroup;
KSharedConfig::Ptr mConfig; // pointer to KConfig object
KConfigSkeletonItem::List mItems;
KConfigSkeletonItem::Dict mItemDict;
bool mUseDefaults;
class Private;
Private *d;
};
#endif