diff options
Diffstat (limited to 'tdecore/kconfigskeleton.h')
-rw-r--r-- | tdecore/kconfigskeleton.h | 1230 |
1 files changed, 1230 insertions, 0 deletions
diff --git a/tdecore/kconfigskeleton.h b/tdecore/kconfigskeleton.h new file mode 100644 index 000000000..c3e9f4a57 --- /dev/null +++ b/tdecore/kconfigskeleton.h @@ -0,0 +1,1230 @@ +/* + * 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 <tqcolor.h> +#include <tqdatetime.h> +#include <tqfont.h> +#include <tqpoint.h> +#include <tqptrlist.h> +#include <tqdict.h> +#include <tqrect.h> +#include <tqsize.h> +#include <tqstringlist.h> +#include <tqvariant.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 TQValueList < KConfigSkeletonItem * >List; + typedef TQDict < KConfigSkeletonItem > Dict; + typedef TQDictIterator < KConfigSkeletonItem > DictIterator; + + /** + * Constructor. + * + * @param group Config file group. + * @param key Config file key. + */ + KConfigSkeletonItem(const TQString & group, const TQString & key) + :mGroup(group),mKey(key), mIsImmutable(true) + { + } + + /** + * Destructor. + */ + virtual ~KConfigSkeletonItem() + { + } + + /** + * Set config file group. + */ + void setGroup( const TQString &group ) + { + mGroup = group; + } + + /** + * Return config file group. + */ + TQString group() const + { + return mGroup; + } + + /** + * Set config file key. + */ + void setKey( const TQString &key ) + { + mKey = key; + } + + /** + * Return config file key. + */ + TQString key() const + { + return mKey; + } + + /** + * Set internal name of entry. + */ + void setName(const TQString &name) + { + mName = name; + } + + /** + * Return internal name of entry. + */ + TQString name() const + { + return mName; + } + + /** + Set label providing a translated one-line description of the item. + */ + void setLabel( const TQString &l ) + { + mLabel = l; + } + + /** + Return label of item. See setLabel(). + */ + TQString label() const + { + return mLabel; + } + + /** + Set WhatsThis description og item. + */ + void setWhatsThis( const TQString &w ) + { + mWhatsThis = w; + } + + /** + Return WhatsThis description of item. See setWhatsThis(). + */ + TQString 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 TQVariant &p) = 0; + + /** + * Return item as property + */ + virtual TQVariant property() const = 0; + + /** + * Return minimum value of item or invalid if not specified + */ + virtual TQVariant minValue() const { return TQVariant(); } + + /** + * Return maximum value of item or invalid if not specified + */ + virtual TQVariant maxValue() const { return TQVariant(); } + + /** + 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); + + TQString mGroup; + TQString mKey; + TQString mName; + + private: + bool mIsImmutable; + + TQString mLabel; + TQString mWhatsThis; + }; + + +template < typename T > class KConfigSkeletonGenericItem:public KConfigSkeletonItem + { + public: + KConfigSkeletonGenericItem(const TQString & group, const TQString & 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,TQColor(1,2,3)); + * + * setCurrentGroup("MyOtherGroup"); + * addItemFont("MySetting3",mMyFont,TQFont("helvetica",12)); + * } + * + * bool mMyBool; + * TQColor mMyColor; + * TQFont 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 < TQString > + { + public: + enum Type { Normal, Password, Path }; + + ItemString(const TQString & group, const TQString & key, + TQString & reference, + const TQString & defaultValue = TQString::tqfromLatin1(""), // NOT TQString::null !! + Type type = Normal); + + void writeConfig(KConfig * config); + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + + private: + Type mType; + }; + + /** + * Class for handling a password preferences item. + */ + class KDECORE_EXPORT ItemPassword:public ItemString + { + public: + ItemPassword(const TQString & group, const TQString & key, + TQString & reference, + const TQString & defaultValue = TQString::tqfromLatin1("")); // NOT TQString::null !! + }; + + /** + * Class for handling a path preferences item. + */ + class KDECORE_EXPORT ItemPath:public ItemString + { + public: + ItemPath(const TQString & group, const TQString & key, + TQString & reference, + const TQString & defaultValue = TQString::null); + }; + + + /** + * Class for handling a TQVariant preferences item. + */ + class KDECORE_EXPORT ItemProperty:public KConfigSkeletonGenericItem < TQVariant > + { + public: + ItemProperty(const TQString & group, const TQString & key, + TQVariant & reference, TQVariant defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a bool preferences item. + */ + class KDECORE_EXPORT ItemBool:public KConfigSkeletonGenericItem < bool > + { + public: + ItemBool(const TQString & group, const TQString & key, bool & reference, + bool defaultValue = true); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling an integer preferences item. + */ + class KDECORE_EXPORT ItemInt:public KConfigSkeletonGenericItem < int > + { + public: + ItemInt(const TQString & group, const TQString & key, int &reference, + int defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + TQVariant minValue() const; + TQVariant 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 < TQ_INT64 > + { + public: + ItemInt64(const TQString & group, const TQString & key, TQ_INT64 &reference, + TQ_INT64 defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + + TQVariant minValue() const; + TQVariant maxValue() const; + + void setMinValue(TQ_INT64); + void setMaxValue(TQ_INT64); + + private: + bool mHasMin : 1; + bool mHasMax : 1; + TQ_INT64 mMin; + TQ_INT64 mMax; + }; + + /** + * Class for handling enums. + */ + class KDECORE_EXPORT ItemEnum:public ItemInt + { + public: + struct Choice + { + TQString name; + TQString label; + TQString whatsThis; + }; + + ItemEnum(const TQString & group, const TQString & key, int &reference, + const TQValueList<Choice> &choices, int defaultValue = 0); + + TQValueList<Choice> choices() const; + + void readConfig(KConfig * config); + void writeConfig(KConfig * config); + + private: + TQValueList<Choice> mChoices; + }; + + + /** + * Class for handling an unsingend integer preferences item. + */ + class KDECORE_EXPORT ItemUInt:public KConfigSkeletonGenericItem < unsigned int > + { + public: + ItemUInt(const TQString & group, const TQString & key, + unsigned int &reference, unsigned int defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + TQVariant minValue() const; + TQVariant 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 TQString & group, const TQString & key, long &reference, + long defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + TQVariant minValue() const; + TQVariant 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 TQString & group, const TQString & key, + unsigned long &reference, unsigned long defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + TQVariant minValue() const; + TQVariant 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 < TQ_UINT64 > + { + public: + ItemUInt64(const TQString & group, const TQString & key, TQ_UINT64 &reference, + TQ_UINT64 defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + + TQVariant minValue() const; + TQVariant maxValue() const; + + void setMinValue(TQ_UINT64); + void setMaxValue(TQ_UINT64); + + private: + bool mHasMin : 1; + bool mHasMax : 1; + TQ_UINT64 mMin; + TQ_UINT64 mMax; + }; + + /** + * Class for handling a floating point preference item. + */ + class KDECORE_EXPORT ItemDouble:public KConfigSkeletonGenericItem < double > + { + public: + ItemDouble(const TQString & group, const TQString & key, + double &reference, double defaultValue = 0); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + TQVariant minValue() const; + TQVariant 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 < TQColor > + { + public: + ItemColor(const TQString & group, const TQString & key, + TQColor & reference, + const TQColor & defaultValue = TQColor(128, 128, 128)); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a font preferences item. + */ + class KDECORE_EXPORT ItemFont:public KConfigSkeletonGenericItem < TQFont > + { + public: + ItemFont(const TQString & group, const TQString & key, TQFont & reference, + const TQFont & defaultValue = KGlobalSettings::generalFont()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a TQRect preferences item. + */ + class KDECORE_EXPORT ItemRect:public KConfigSkeletonGenericItem < TQRect > + { + public: + ItemRect(const TQString & group, const TQString & key, TQRect & reference, + const TQRect & defaultValue = TQRect()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a TQPoint preferences item. + */ + class KDECORE_EXPORT ItemPoint:public KConfigSkeletonGenericItem < TQPoint > + { + public: + ItemPoint(const TQString & group, const TQString & key, TQPoint & reference, + const TQPoint & defaultValue = TQPoint()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a TQSize preferences item. + */ + class KDECORE_EXPORT ItemSize:public KConfigSkeletonGenericItem < TQSize > + { + public: + ItemSize(const TQString & group, const TQString & key, TQSize & reference, + const TQSize & defaultValue = TQSize()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a TQDateTime preferences item. + */ + class KDECORE_EXPORT ItemDateTime:public KConfigSkeletonGenericItem < TQDateTime > + { + public: + ItemDateTime(const TQString & group, const TQString & key, + TQDateTime & reference, + const TQDateTime & defaultValue = TQDateTime()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a string list preferences item. + */ + class KDECORE_EXPORT ItemStringList:public KConfigSkeletonGenericItem < TQStringList > + { + public: + ItemStringList(const TQString & group, const TQString & key, + TQStringList & reference, + const TQStringList & defaultValue = TQStringList()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant property() const; + }; + + + /** + * Class for handling a path list preferences item. + */ + class KDECORE_EXPORT ItemPathList:public ItemStringList + { + public: + ItemPathList(const TQString & group, const TQString & key, + TQStringList & reference, + const TQStringList & defaultValue = TQStringList()); + + void readConfig(KConfig * config); + void writeConfig(KConfig * config); + }; + + + /** + * Class for handling an integer list preferences item. + */ + class KDECORE_EXPORT ItemIntList:public KConfigSkeletonGenericItem < TQValueList < int > > + { + public: + ItemIntList(const TQString & group, const TQString & key, + TQValueList < int >&reference, + const TQValueList < int >&defaultValue = TQValueList < int >()); + + void readConfig(KConfig * config); + void setProperty(const TQVariant & p); + TQVariant 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 TQString & configname = TQString::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 TQString & group); + + /** + * Returns the current group used for addItem() calls. + */ + TQString 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 TQString & name = TQString::null ); + + /** + * Register an item of type TQString. + * + * @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 TQString & name, TQString & reference, + const TQString & defaultValue = TQString::tqfromLatin1(""), // NOT TQString::null !! + const TQString & key = TQString::null); + + /** + * Register a password item of type TQString. 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 TQString & name, TQString & reference, + const TQString & defaultValue = TQString::tqfromLatin1(""), + const TQString & key = TQString::null); + + /** + * Register a path item of type TQString. 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 TQString & name, TQString & reference, + const TQString & defaultValue = TQString::tqfromLatin1(""), + const TQString & key = TQString::null); + + /** + * Register a property item of type TQVariant. Note that only the following + * TQVariant 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 TQString & name, TQVariant & reference, + const TQVariant & defaultValue = TQVariant(), + const TQString & key = TQString::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 TQString & name, bool & reference, + bool defaultValue = false, + const TQString & key = TQString::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 TQString & name, int &reference, int defaultValue = 0, + const TQString & key = TQString::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 TQString & name, unsigned int &reference, + unsigned int defaultValue = 0, + const TQString & key = TQString::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 TQString & name, long &reference, + long defaultValue = 0, + const TQString & key = TQString::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 TQString & name, unsigned long &reference, + unsigned long defaultValue = 0, + const TQString & key = TQString::null); + + /** + * Register an item of type TQ_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 TQString & name, TQ_INT64 &reference, + TQ_INT64 defaultValue = 0, + const TQString & key = TQString::null); + + /** + * Register an item of type TQ_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 TQString & name, TQ_UINT64 &reference, + TQ_UINT64 defaultValue = 0, + const TQString & key = TQString::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 TQString & name, double &reference, + double defaultValue = 0.0, + const TQString & key = TQString::null); + + /** + * Register an item of type TQColor. + * + * @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 TQString & name, TQColor & reference, + const TQColor & defaultValue = TQColor(128, 128, 128), + const TQString & key = TQString::null); + + /** + * Register an item of type TQFont. + * + * @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 TQString & name, TQFont & reference, + const TQFont & defaultValue = + KGlobalSettings::generalFont(), + const TQString & key = TQString::null); + + /** + * Register an item of type TQRect. + * + * @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 TQString & name, TQRect & reference, + const TQRect & defaultValue = TQRect(), + const TQString & key = TQString::null); + + /** + * Register an item of type TQPoint. + * + * @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 TQString & name, TQPoint & reference, + const TQPoint & defaultValue = TQPoint(), + const TQString & key = TQString::null); + + /** + * Register an item of type TQSize. + * + * @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 TQString & name, TQSize & reference, + const TQSize & defaultValue = TQSize(), + const TQString & key = TQString::null); + + /** + * Register an item of type TQDateTime. + * + * @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 TQString & name, TQDateTime & reference, + const TQDateTime & defaultValue = TQDateTime(), + const TQString & key = TQString::null); + + /** + * Register an item of type TQStringList. + * + * @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 TQString & name, TQStringList & reference, + const TQStringList & defaultValue = TQStringList(), + const TQString & key = TQString::null); + + /** + * Register an item of type TQValueList<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 TQString & name, TQValueList < int >&reference, + const TQValueList < int >&defaultValue = + TQValueList < int >(), + const TQString & key = TQString::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 TQString & name); + + /** + * Lookup item by name + */ + KConfigSkeletonItem * findItem(const TQString & 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: + TQString mCurrentGroup; + + KSharedConfig::Ptr mConfig; // pointer to KConfig object + + KConfigSkeletonItem::List mItems; + KConfigSkeletonItem::Dict mItemDict; + + bool mUseDefaults; + + class Private; + Private *d; + +}; + +#endif |