File indexing completed on 2024-04-28 11:34:35

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2006, 2007 Thomas Braxton <kde.braxton@gmail.com>
0004     SPDX-FileCopyrightText: 2001 Waldo Bastian <bastian@kde.org>
0005     SPDX-FileCopyrightText: 1999 Preston Brown <pbrown@kde.org>
0006     SPDX-FileCopyrightText: 1997 Matthias Kalle Dalheimer <kalle@kde.org>
0007 
0008     SPDX-License-Identifier: LGPL-2.0-or-later
0009 */
0010 
0011 #ifndef KCONFIG_P_H
0012 #define KCONFIG_P_H
0013 
0014 #include "kconfigbackend_p.h"
0015 #include "kconfigdata_p.h"
0016 #include "kconfiggroup.h"
0017 
0018 #include <QDir>
0019 #include <QFile>
0020 #include <QStack>
0021 #include <QStringList>
0022 
0023 class KConfigPrivate
0024 {
0025     friend class KConfig;
0026 
0027 public:
0028     KConfig::OpenFlags openFlags;
0029     QStandardPaths::StandardLocation resourceType;
0030 
0031     void changeFileName(const QString &fileName);
0032 
0033     // functions for KConfigGroup
0034     bool canWriteEntry(const QByteArray &group, const char *key, bool isDefault = false) const;
0035     QString lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const;
0036     QByteArray lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const;
0037     KEntry lookupInternalEntry(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const;
0038 
0039     void putData(const QByteArray &group, const char *key, const QByteArray &value, KConfigBase::WriteConfigFlags flags, bool expand = false);
0040     void setEntryData(const QByteArray &group, const char *key, const QByteArray &value, KEntryMap::EntryOptions flags)
0041     {
0042         if (entryMap.setEntry(group, key, value, flags)) {
0043             bDirty = true;
0044         }
0045     }
0046     void revertEntry(const QByteArray &group, const char *key, KConfigBase::WriteConfigFlags flags);
0047     QStringList groupList(const QByteArray &group) const;
0048     // copies the entries from @p source to @p otherGroup changing all occurrences
0049     // of @p source with @p destination
0050     void copyGroup(const QByteArray &source, const QByteArray &destination, KConfigGroup *otherGroup, KConfigBase::WriteConfigFlags flags) const;
0051     QStringList keyListImpl(const QByteArray &theGroup) const;
0052     QSet<QByteArray> allSubGroups(const QByteArray &parentGroup) const;
0053     bool hasNonDeletedEntries(const QByteArray &group) const;
0054 
0055     void notifyClients(const QHash<QString, QByteArrayList> &changes, const QString &path);
0056 
0057     static QString expandString(const QString &value);
0058 
0059 protected:
0060     QExplicitlySharedDataPointer<KConfigBackend> mBackend;
0061 
0062     KConfigPrivate(KConfig::OpenFlags flags, QStandardPaths::StandardLocation type);
0063 
0064     virtual ~KConfigPrivate()
0065     {
0066     }
0067 
0068     bool bDynamicBackend : 1; // do we own the backend?
0069 private:
0070     bool bDirty : 1;
0071     bool bReadDefaults : 1;
0072     bool bFileImmutable : 1;
0073     bool bForceGlobal : 1;
0074     bool bSuppressGlobal : 1;
0075 
0076     static bool mappingsRegistered;
0077 
0078     KEntryMap entryMap;
0079     QString backendType;
0080     QStack<QString> extraFiles;
0081 
0082     QString locale;
0083     QString fileName;
0084     QString etc_kderc;
0085     KConfigBase::AccessMode configState;
0086 
0087     bool wantGlobals() const
0088     {
0089         return openFlags & KConfig::IncludeGlobals && !bSuppressGlobal;
0090     }
0091     bool wantDefaults() const
0092     {
0093         return openFlags & KConfig::CascadeConfig;
0094     }
0095     bool isSimple() const
0096     {
0097         return openFlags == KConfig::SimpleConfig;
0098     }
0099     bool isReadOnly() const
0100     {
0101         return configState == KConfig::ReadOnly;
0102     }
0103 
0104     bool setLocale(const QString &aLocale);
0105     QStringList getGlobalFiles() const;
0106     void parseGlobalFiles();
0107     void parseConfigFiles();
0108     void initCustomized(KConfig *);
0109     bool lockLocal();
0110 };
0111 
0112 #endif // KCONFIG_P_H