/* This file is part of the KDE libraries Copyright (c) 1999 Preston Brown <pbrown@kde.org> Portions 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 _TDECONFIGBACKEND_H #define _TDECONFIGBACKEND_H #include "tdeconfigdata.h" #include <tdeconfigbase.h> #include <klockfile.h> #include <tdelocale.h> #include "tdelibs_export.h" class TQFile; class TDEConfigBackEndPrivate; /** * Abstract base class for KDE configuration file loading/saving. * * This class forms the base for all classes that implement some * manner of loading/saving to configuration files. It is an * abstract base class, meaning that you cannot directly instantiate * objects of this class. As of right now, the only back end available * is one to read/write to INI-style files, but in the future, other * formats may be available, such as XML or a database. * * @author Preston Brown <pbrown@kde.org>, * Matthias Kalle Dalheimer <kalle@kde.org> * @short KDE Configuration file loading/saving abstract base class */ class TDECORE_EXPORT TDEConfigBackEnd { friend class TDEConfig; friend class TDESharedConfig; public: /** * Constructs a configuration back end. * * @param _config Specifies the configuration object which values * will be passed to as they are read, or from where values * to be written to will be obtained from. * @param _fileName The name of the file in which config * data is stored. All registered configuration directories * will be looked in in order of decreasing relevance. * @param _resType the resource type of the fileName specified, _if_ * it is not an absolute path (otherwise this parameter is ignored). * @param _useKDEGlobals If true, the user's system-wide kdeglobals file * will be imported into the config object. If false, only * the filename specified will be dealt with. */ TDEConfigBackEnd(TDEConfigBase *_config, const TQString &_fileName, const char * _resType, bool _useKDEGlobals); /** * Destructs the configuration backend. */ virtual ~TDEConfigBackEnd(); /** * Parses all configuration files for a configuration object. This * method must be reimplemented by the derived classes. * * @returns Whether or not parsing was successful. */ virtual bool parseConfigFiles() = 0; /** * Writes configuration data to file(s). This method must be * reimplemented by the derived classes. * * @param bMerge Specifies whether the old config file already * on disk should be merged in with the data in memory. If true, * data is read off the disk and merged. If false, the on-disk * file is removed and only in-memory data is written out. */ virtual void sync(bool bMerge = true) = 0; /** * Changes the filenames associated with this back end. You should * probably reparse your config info after doing this. * * @param _fileName the new filename to use * @param _resType the resource type of the fileName specified, _if_ * it is not an absolute path (otherwise this parameter is ignored). * @param _useKDEGlobals specifies whether or not to also parse the * global KDE configuration files. */ void changeFileName(const TQString &_fileName, const char * _resType, bool _useKDEGlobals); /** * Returns the state of the app-config object. * * @see TDEConfig::getConfigState */ virtual TDEConfigBase::ConfigState getConfigState() const { return mConfigState; } /** * Returns the filename as passed to the constructor. * @return the filename as passed to the constructor. */ TQString fileName() const { return mfileName; } /** * Returns the resource type as passed to the constructor. * @return the resource type as passed to the constructor. */ const char * resource() const { return resType; } /** * Set the locale string that defines the current language. * @param _localeString the identifier of the language * @see TDELocale */ void setLocaleString(const TQCString &_localeString) { localeString = _localeString; } /** * Set the file mode for newly created files. * @param mode the filemode (as in chmod) */ void setFileWriteMode(int mode); /** * Check whether the config files are writable. * @param warnUser Warn the user if the configuration files are not writable. * @return Indicates that all of the configuration files used are writable. * @since 3.2 */ bool checkConfigFilesWritable(bool warnUser); /** * Returns a lock file object for the configuration file * @param bGlobal If true, returns a lock file object for kdeglobals * @since 3.3 */ TDELockFile::Ptr lockFile( bool bGlobal = false ); #ifdef KDE_NO_COMPAT private: #endif /** * @deprecated Use fileName() instead */ KDE_DEPRECATED TQString filename() const { return mfileName; } protected: TDEConfigBase *pConfig; TQString mfileName; TQCString resType; bool useKDEGlobals : 1; bool bFileImmutable : 1; TQCString localeString; TQString mLocalFileName; TQString mGlobalFileName; TDEConfigBase::ConfigState mConfigState; int mFileMode; protected: virtual void virtual_hook( int id, void* data ); protected: class TDEConfigBackEndPrivate; TDEConfigBackEndPrivate *d; }; /** * Class for KDE INI-style configuration file loading/saving. * * @author Preston Brown <pbrown@kde.org>, * Matthias Kalle Dalheimer <kalle@kde.org> */ class TDECORE_EXPORT TDEConfigINIBackEnd : public TDEConfigBackEnd { public: /** * Constructs an ini-style configuration back end. * * @param _config Specifies the configuration object which values * will be passed to as they are read, or from where values * to be written to will be obtained from. * @param _fileName The name of the file in which config * data is stored. All registered configuration directories * will be looked in in order of decreasing relevance. * @param _resType the resource type of the fileName specified, _if_ * it is not an absolute path (otherwise this parameter is ignored). * @param _useKDEGlobals If true, the user's system-wide kdeglobals file * will be imported into the config object. If false, only * the filename specified will be dealt with. */ TDEConfigINIBackEnd(TDEConfigBase *_config, const TQString &_fileName, const char * _resType, bool _useKDEGlobals = true) : TDEConfigBackEnd(_config, _fileName, _resType, _useKDEGlobals) {} /** * Destructs the configuration backend. */ virtual ~TDEConfigINIBackEnd() {} /** * Parses all INI-style configuration files for a config object. * * @returns Whether or not parsing was successful. */ bool parseConfigFiles(); /** * Writes configuration data to file(s). * @param bMerge Specifies whether the old config file already * on disk should be merged in with the data in memory. If true, * data is read off the disk and merged. If false, the on-disk * file is removed and only in-memory data is written out. */ virtual void sync(bool bMerge = true); protected: /** * Parses one configuration file. * * @param rFile The configuration file to parse * @param pWriteBackMap If specified, points to a KEntryMap where * the data read from the file should be stored, instead of * inserting them directly into the configuration object. * Use this area as a "scratchpad" when you need to know what is * on disk but don't want to effect the configuration object. * @param bGlobal Specifies whether entries should be marked as * belonging to the global KDE configuration file rather * than the application-specific KDE configuration file(s). * @param bDefault Specifies whether entries should be marked as * being default values. */ void parseSingleConfigFile(TQFile& rFile, KEntryMap *pWriteBackMap = 0L, bool bGlobal = false, bool bDefault = false); // Kubuntu patch, 2006-08-03 // looks up a key in with TDELocale // see https://launchpad.net/distros/ubuntu/+spec/langpacks-desktopfiles-kde void translateKey(TDELocale& locale, TQCString currentGroup, TQCString key); /** * Writes configuration file back. * * @param filename The name of the file to write. * @param bGlobal Specifies whether to write only entries which * are marked as belonging to the global KDE config file. * If this is false, it skips those entries. * @param bMerge Specifies whether the old config file already * on disk should be merged in with the data in memory. If true, * data is read off the disk and merged. If false, the on-disk * file is removed and only in-memory data is written out. * @return Whether some entries are left to be written to other * files. */ bool writeConfigFile(TQString filename, bool bGlobal = false, bool bMerge = true); /** Get the entry map. * * @param map the entries will be stored in this object. * @param bGlobal Specifies whether to get only entries which * are marked as belonging to the global KDE config file. * If this is false, it skips those entries. * @param mergeFile if not null, the dirty entries for this file will * be merged. * * @return Whether there will be some entries left for writing to other * files. */ bool getEntryMap(KEntryMap &map, bool bGlobal, TQFile *mergeFile); /** Write the entries in @e aTempMap to the file stream.*/ void writeEntries(FILE *pStream, const KEntryMap &aTempMap); protected: virtual void virtual_hook( int id, void* data ); private: class TDEConfigINIBackEndPrivate; TDEConfigINIBackEndPrivate *not_d; }; #endif