1 /* 2 This file is part of the KDE libraries 3 SPDX-FileCopyrightText: 1999 Preston Brown <pbrown@kde.org> 4 SPDX-FileCopyrightText: 1997-1999 Matthias Kalle Dalheimer <kalle@kde.org> 5 6 SPDX-License-Identifier: LGPL-2.0-or-later 7 */ 8 9 #ifndef KSHAREDCONFIG_H 10 #define KSHAREDCONFIG_H 11 12 #include <QExplicitlySharedDataPointer> 13 #include <kconfig.h> 14 15 /** 16 * \class KSharedConfig ksharedconfig.h <KSharedConfig> 17 * 18 * KConfig variant using shared memory 19 * 20 * KSharedConfig provides a shared (reference counted) variant 21 * of KConfig. This allows you to use/manipulate the same configuration 22 * files from different places in your code without worrying about 23 * accidentally overwriting changes. 24 * 25 * The openConfig() method is threadsafe: every thread gets a separate repository 26 * of shared KConfig objects. This means, however, that you'll be responsible for 27 * synchronizing the instances of KConfig for the same filename between threads, 28 * using KConfig::reparseConfiguration() after a manual change notification, just like you have 29 * to do between processes. 30 */ 31 class KCONFIGCORE_EXPORT KSharedConfig : public KConfig, public QSharedData // krazy:exclude=dpointer (only for refcounting) 32 { 33 public: 34 typedef QExplicitlySharedDataPointer<KSharedConfig> Ptr; 35 36 public: 37 /** 38 * Creates a KSharedConfig object to manipulate a configuration file 39 * 40 * If an absolute path is specified for @p fileName, that file will be used 41 * as the store for the configuration settings. If a non-absolute path 42 * is provided, the file will be looked for in the standard directory 43 * specified by @p type. If no path is provided, a default 44 * configuration file will be used based on the name of the main 45 * application component. 46 * 47 * @p mode determines whether the user or global settings will be allowed 48 * to influence the values returned by this object. See KConfig::OpenFlags for 49 * more details. 50 * 51 * @param fileName the configuration file to open. If empty, it will be determined 52 * automatically (from --config on the command line, otherwise 53 * from the application name + "rc") 54 * @param mode how global settings should affect the configuration 55 * options exposed by this KConfig object 56 * @param type The standard directory to look for the configuration 57 * file in (see QStandardPaths) 58 * 59 * @sa KConfig 60 */ 61 static KSharedConfig::Ptr 62 openConfig(const QString &fileName = QString(), OpenFlags mode = FullConfig, QStandardPaths::StandardLocation type = QStandardPaths::GenericConfigLocation); 63 64 /** 65 * Creates a KSharedConfig object to manipulate a configuration file suitable 66 * for storing state information. Use this for storing information that is 67 * changing frequently and should not be saved by configuration backup 68 * utilities. 69 * 70 * If an absolute path is specified for @p fileName, that file will be used 71 * as the store for the configuration settings. If a non-absolute path 72 * is provided, the file will be looked for in the standard data directory 73 * (QStandardPaths::AppDataLocation). If no path is provided, a default 74 * configuration file will be used based on the name of the main 75 * application component. 76 * 77 * @param fileName the configuration file to open. If empty, it will be determined 78 * automatically from the application name + "staterc" 79 * 80 * @since 5.67 81 * 82 * @sa KConfig 83 */ 84 static KSharedConfig::Ptr openStateConfig(const QString &fileName = QString()); 85 86 ~KSharedConfig() override; 87 88 private: 89 Q_DISABLE_COPY(KSharedConfig) 90 KConfigGroup groupImpl(const QByteArray &aGroup) override; 91 const KConfigGroup groupImpl(const QByteArray &aGroup) const override; 92 93 KSharedConfig(const QString &file, OpenFlags mode, QStandardPaths::StandardLocation resourceType); 94 }; 95 96 typedef KSharedConfig::Ptr KSharedConfigPtr; 97 98 #endif // multiple inclusion guard 99