diff options
Diffstat (limited to 'src/core/kconfigbase.h')
-rw-r--r-- | src/core/kconfigbase.h | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/src/core/kconfigbase.h b/src/core/kconfigbase.h new file mode 100644 index 00000000..782ff4b6 --- /dev/null +++ b/src/core/kconfigbase.h @@ -0,0 +1,184 @@ +/* + This file is part of the KDE libraries + Copyright (c) 2006, 2007 Thomas Braxton <kde.braxton@gmail.com> + Copyright (c) 2001 Waldo Bastian <bastian@kde.org> + 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. +*/ + +#ifndef KCONFIGBASE_H +#define KCONFIGBASE_H + +#include <kconfigcore_export.h> + +#include <QtCore/QtGlobal> + +class QStringList; +class KConfigGroup; +class KConfigBasePrivate; + +/** + * \class KConfigBase kconfigbase.h <KConfigBase> + */ +class KCONFIGCORE_EXPORT KConfigBase +{ +public: + /** + * Flags to control write entry + */ + enum WriteConfigFlag + { + Persistent = 0x01, + /**< + * Save this entry when saving the config object. + */ + Global = 0x02, + /**< + * Save the entry to the global %KDE config file instead of the + * application specific config file. + */ + Localized = 0x04, + /**< + * Add the locale tag to the key when writing it. + */ + Normal=Persistent + /**< + * Save the entry to the application specific config file without + * a locale tag. This is the default. + */ + + }; + Q_DECLARE_FLAGS(WriteConfigFlags, WriteConfigFlag) + + /** + * Destructs the KConfigBase object. + */ + virtual ~KConfigBase(); + + /** + * Returns a list of groups that are known about. + * + * @return The list of groups. + **/ + virtual QStringList groupList() const = 0; + + /** + * Returns true if the specified group is known about. + * + * @param group The group to search for. + * @return true if the group exists. + */ + bool hasGroup(const QString &group) const; + bool hasGroup(const char *group) const; + bool hasGroup(const QByteArray &group) const; + + /** + * Returns an object for the named subgroup. + * + * @param group the group to open. Pass a null string on to the KConfig + * object to obtain a handle on the root group. + * @return The list of groups. + **/ + KConfigGroup group(const QByteArray &group); + KConfigGroup group(const QString &group); + KConfigGroup group(const char *group); + + /** + * @overload + **/ + const KConfigGroup group(const QByteArray &group) const; + const KConfigGroup group(const QString &group) const; + const KConfigGroup group(const char *group) const; + + /** + * Delete @p aGroup. This marks @p aGroup as @em deleted in the config object. This effectively + * removes any cascaded values from config files earlier in the stack. + */ + void deleteGroup(const QByteArray &group, WriteConfigFlags flags = Normal); + void deleteGroup(const QString &group, WriteConfigFlags flags = Normal); + void deleteGroup(const char *group, WriteConfigFlags flags = Normal); + + /** + * Syncs the configuration object that this group belongs to. + * Unrelated concurrent changes to the same file are merged and thus + * not overwritten. Note however, that this object is @em not automatically + * updated with those changes. + */ + virtual bool sync() = 0; + + /** + * Reset the dirty flags of all entries in the entry map, so the + * values will not be written to disk on a later call to sync(). + */ + virtual void markAsClean() = 0; + + /** + * Possible return values for accessMode(). + */ + enum AccessMode { NoAccess, ReadOnly, ReadWrite }; + + /** + * Returns the access mode of the app-config object. + * + * Possible return values + * are NoAccess (the application-specific config file could not be + * opened neither read-write nor read-only), ReadOnly (the + * application-specific config file is opened read-only, but not + * read-write) and ReadWrite (the application-specific config + * file is opened read-write). + * + * @return the access mode of the app-config object + */ + virtual AccessMode accessMode() const = 0; + + /** + * Checks whether this configuration object can be modified. + * @return whether changes may be made to this configuration object. + */ + virtual bool isImmutable() const = 0; + + /** + * Can changes be made to the entries in @p aGroup? + * + * @param aGroup The group to check for immutability. + * @return @c false if the entries in @p aGroup can be modified. + */ + bool isGroupImmutable(const QByteArray& aGroup) const; + bool isGroupImmutable(const QString& aGroup) const; + bool isGroupImmutable(const char *aGroup) const; + +protected: + KConfigBase(); + + virtual bool hasGroupImpl(const QByteArray &group) const = 0; + virtual KConfigGroup groupImpl( const QByteArray &b) = 0; + virtual const KConfigGroup groupImpl(const QByteArray &b) const = 0; + virtual void deleteGroupImpl(const QByteArray &group, WriteConfigFlags flags = Normal) = 0; + virtual bool isGroupImmutableImpl(const QByteArray& aGroup) const = 0; + + /** Virtual hook, used to add new "virtual" functions while maintaining + * binary compatibility. Unused in this class. + */ + virtual void virtual_hook( int id, void* data ); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(KConfigBase::WriteConfigFlags) + + + +#endif // KCONFIG_H |