X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/855e92a8d9c1a389c09b7afd88dcc16fd4f055f9..a30e7029749646348aaacf61da9ed66743d77a40:/include/wx/config.h diff --git a/include/wx/config.h b/include/wx/config.h index 07ddc77804..ddbbbe2f47 100644 --- a/include/wx/config.h +++ b/include/wx/config.h @@ -1,163 +1,38 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: -// Purpose: -// Author: Karsten Ballüder & Vadim Zeitlin -// Modified by: -// Created: 07.04.98 (adapted from appconf.h) +///////////////////////////////////////////////////////////////////////////// +// Name: config.h +// Purpose: wxConfig base header +// Author: Julian Smart +// Modified by: +// Created: +// Copyright: (c) Julian Smart // RCS-ID: $Id$ -// Copyright: (c) 1997 Karsten Ballüder Ballueder@usa.net -// Vadim Zeitlin -// Licence: wxWindows license -/////////////////////////////////////////////////////////////////////////////// +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// -#ifndef _APPCONF_H -#define _APPCONF_H +#ifndef _WX_CONFIG_H_BASE_ +#define _WX_CONFIG_H_BASE_ -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -/// shall we be case sensitive in parsing variable names? -#ifndef APPCONF_CASE_SENSITIVE - #define APPCONF_CASE_SENSITIVE false -#endif - -/// separates group and entry names -#ifndef APPCONF_PATH_SEPARATOR - #define APPCONF_PATH_SEPARATOR '/' -#endif - -/// introduces immutable entries -#ifndef APPCONF_IMMUTABLE_PREFIX - #define APPCONF_IMMUTABLE_PREFIX '!' -#endif - -/// should we use registry instead of configuration files under Win32? -#ifndef APPCONF_WIN32_NATIVE - #define APPCONF_WIN32_NATIVE true -#endif - -// ---------------------------------------------------------------------------- -// various helper global functions -// ---------------------------------------------------------------------------- - -/* - Replace environment variables ($SOMETHING) with their values. The format is - $VARNAME or ${VARNAME} where VARNAME contains alphanumeric characters and - '_' only. '$' must be escaped ('\$') in order to be taken literally. - */ -extern wxString ExpandEnvVars(const wxString& str); - -/* - Split path into parts removing '..' in progress - */ -extern void SplitPath(wxArrayString& aParts, const char *sz); +#include "wx/defs.h" +#include "wx/confbase.h" // ---------------------------------------------------------------------------- -// abstract base class wxConfig which defines the interface for derived classes -// -// wxConfig organizes the items in a tree-like structure (modeled after the -// Unix/Dos filesystem). There are groups (directories) and keys (files). -// There is always one current group given by the current path. -// -// Keys are pairs "key_name = value" where value may be of string or integer -// (long) type (@@@ doubles and other types such as wxDate coming soon). +// define the native wxConfigBase implementation // ---------------------------------------------------------------------------- -class wxConfig -{ -public: - // static functions - // sets the config object, returns the previous pointer - static wxConfig *Set(wxConfig *pConfig); - // get the config object, creates it on demand - static wxConfig *Get() { if ( !ms_pConfig ) Create(); return ms_pConfig; } - // create a new config object - static void Create(); - - // ctor & virtual dtor - wxConfig() { } - virtual ~wxConfig(); - - // path management - // set current path: if the first character is '/', it's the absolute path, - // otherwise it's a relative path. '..' is supported. If the strPath - // doesn't exist it is created. - virtual void SetPath(const wxString& strPath) = 0; - // retrieve the current path (always as absolute path) - virtual const wxString& GetPath() const = 0; - - // enumeration: all functions here return false when there are no more items. - // you must pass the same lIndex to GetNext and GetFirst (don't modify it) - // enumerate subgroups - virtual bool GetFirstGroup(wxString& str, long& lIndex) = 0; - virtual bool GetNextGroup (wxString& str, long& lIndex) = 0; - // enumerate entries - virtual bool GetFirstEntry(wxString& str, long& lIndex) = 0; - virtual bool GetNextEntry (wxString& str, long& lIndex) = 0; - - // key access: returns TRUE if value was really read, FALSE if default used - // (and if the key is not found the default value is returned.) - // read a string from the key - virtual bool Read(wxString *pStr, const char *szKey, - const char *szDefault = NULL) const = 0; - // another version using statis buffer - it means it will be overwritten - // after each call to this function! - virtual const char *Read(const char *szKey, - const char *szDefault = NULL) const; - // the same for longs - long Read(const char *szKey, long lDefault) const - { long l; Read(&l, szKey, lDefault); return l; } - // and another version: returns true if default value is returned - virtual bool Read(long *pl, const char *szKey, long lDefault = 0) const = 0; - - // write the value (return true on success) - virtual bool Write(const char *szKey, const char *szValue) = 0; - virtual bool Write(const char *szKey, long lValue) = 0; - // permanently writes all changes - virtual bool Flush(bool bCurrentOnly = false) = 0; - - // delete entries/groups - // deletes the specified entry and the group it belongs to if - // it was the last key in it and the second parameter is true - virtual bool DeleteEntry(const char *szKey, - bool bDeleteGroupIfEmpty = true) = 0; - // delete the group (with all subgroups) - virtual bool DeleteGroup(const char *szKey) = 0; - // delete the whole underlying object (disk file, registry key, ...) - // primarly for use by desinstallation routine. - virtual bool DeleteAll() = 0; -protected: - static bool IsImmutable(const char *szKey) - { return *szKey == APPCONF_IMMUTABLE_PREFIX; } - - // a handy little class which changes current path to the path of given entry - // and restores it in dtor: so if you declare a local variable of this type, - // you work in the entry directory and the path is automatically restored - // when function returns - class PathChanger - { - public: - // ctor/dtor do path changing/restorin - PathChanger(const wxConfig *pContainer, const wxString& strEntry); - ~PathChanger(); - - // get the key name - const wxString& Name() const { return m_strName; } - - private: - wxConfig *m_pContainer; // object we live in - wxString m_strName, // name of entry (i.e. name only) - m_strOldPath; // saved path - bool m_bChanged; // was the path changed? - }; - - // are we doing automatic environment variable expansion? - bool m_bExpandEnvVars; - - // static variables - static wxConfig *ms_pConfig; -}; - -#endif //_APPCONF_H +// under Windows we prefer to use the native implementation but can be forced +// to use the file-based one +#if defined(__WXMSW__) && wxUSE_CONFIG_NATIVE + #include "wx/msw/regconf.h" + #define wxConfig wxRegConfig +#elif defined(__WXOS2__) && wxUSE_CONFIG_NATIVE + #include "wx/os2/iniconf.h" + #define wxConfig wxIniConfig +#elif defined(__WXPALMOS__) && wxUSE_CONFIG_NATIVE + #include "wx/palmos/prefconf.h" + #define wxConfig wxPrefConfig +#else // either we're under Unix or wish to always use config files + #include "wx/fileconf.h" + #define wxConfig wxFileConfig +#endif +#endif // _WX_CONFIG_H_BASE_