X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/876419ce60c535a06fde52023f7360d2d29ee82a..b4e76e0d7e4c1be878e125df31dc9370bb0fa99e:/include/wx/config.h diff --git a/include/wx/config.h b/include/wx/config.h index d1e27b2517..f5b1b195eb 100644 --- a/include/wx/config.h +++ b/include/wx/config.h @@ -3,16 +3,16 @@ // Purpose: declaration of the base class of all config implementations // (see also: fileconf.h and msw/regconf.h) // Author: Karsten Ballüder & Vadim Zeitlin -// Modified by: +// Modified by: // Created: 07.04.98 (adapted from appconf.h) // RCS-ID: $Id$ -// Copyright: (c) 1997 Karsten Ballüder Ballueder@usa.net +// Copyright: (c) 1997 Karsten Ballüder Ballueder@usa.net // Vadim Zeitlin // Licence: wxWindows license /////////////////////////////////////////////////////////////////////////////// -#ifndef _APPCONF_H -#define _APPCONF_H +#ifndef _wxCONFIG_H +#define _wxCONFIG_H #ifdef __GNUG__ #pragma interface "config.h" @@ -32,23 +32,27 @@ // ---------------------------------------------------------------------------- /// shall we be case sensitive in parsing variable names? -#ifndef APPCONF_CASE_SENSITIVE - #define APPCONF_CASE_SENSITIVE FALSE +#ifndef wxCONFIG_CASE_SENSITIVE + #define wxCONFIG_CASE_SENSITIVE FALSE #endif -/// separates group and entry names -#ifndef APPCONF_PATH_SEPARATOR - #define APPCONF_PATH_SEPARATOR '/' +/// separates group and entry names (probably shouldn't be changed) +#ifndef wxCONFIG_PATH_SEPARATOR + #define wxCONFIG_PATH_SEPARATOR '/' #endif /// introduces immutable entries -#ifndef APPCONF_IMMUTABLE_PREFIX - #define APPCONF_IMMUTABLE_PREFIX '!' +// (i.e. the ones which can't be changed from the local config file) +#ifndef wxCONFIG_IMMUTABLE_PREFIX + #define wxCONFIG_IMMUTABLE_PREFIX '!' #endif /// should we use registry instead of configuration files under Win32? -#ifndef APPCONF_WIN32_NATIVE - #define APPCONF_WIN32_NATIVE TRUE +// (i.e. whether wxConfigBase::Create() will create a wxFileConfig (if it's +// FALSE) or wxRegConfig (if it's true and we're under Win32) or wxIniConfig +// (under Win16)) +#ifndef wxCONFIG_WIN32_NATIVE + #define wxCONFIG_WIN32_NATIVE TRUE #endif // ---------------------------------------------------------------------------- @@ -60,41 +64,50 @@ $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); +extern wxString wxExpandEnvVars(const wxString &sz); /* Split path into parts removing '..' in progress */ -extern void SplitPath(wxArrayString& aParts, const char *sz); +extern void wxSplitPath(wxArrayString& aParts, const char *sz); // ---------------------------------------------------------------------------- -// abstract base class wxConfig which defines the interface for derived classes +// abstract base class wxConfigBase 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). +// 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). // ---------------------------------------------------------------------------- -class wxConfig +class wxConfigBase { 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(); + static wxConfigBase *Set(wxConfigBase *pConfig); + // get the config object, creates it on demand unless DontCreateOnDemand + // was called + static wxConfigBase *Get() { if ( !ms_pConfig ) Create(); return ms_pConfig; } + // create a new config object: this function will create the "best" + // implementation of wxConfig available for the current platform, see + // comments near definition wxCONFIG_WIN32_NATIVE for details. It returns + // the created object and also sets it as ms_pConfig. + static wxConfigBase *Create(); + // should Get() try to create a new log object if the current one is NULL? + static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; } // ctor & virtual dtor - wxConfig() { } - virtual ~wxConfig(); + // environment variable expansion is on by default + wxConfigBase() { m_bExpandEnvVars = TRUE; m_bRecordDefaults = FALSE; } + // empty but ensures that dtor of all derived classes is virtual + virtual ~wxConfigBase() { } // 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 + // 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) @@ -103,11 +116,15 @@ public: // 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; + virtual bool GetFirstGroup(wxString& str, long& lIndex) const = 0; + virtual bool GetNextGroup (wxString& str, long& lIndex) const = 0; // enumerate entries - virtual bool GetFirstEntry(wxString& str, long& lIndex) = 0; - virtual bool GetNextEntry (wxString& str, long& lIndex) = 0; + virtual bool GetFirstEntry(wxString& str, long& lIndex) const = 0; + virtual bool GetNextEntry (wxString& str, long& lIndex) const = 0; + // get number of entries/subgroups in the current group, with or without + // it's subgroups + virtual uint GetNumberOfEntries(bool bRecursive = FALSE) const = 0; + virtual uint GetNumberOfGroups(bool bRecursive = FALSE) const = 0; // tests of existence // returns TRUE if the group by this name exists @@ -150,37 +167,75 @@ public: // primarly for use by desinstallation routine. virtual bool DeleteAll() = 0; + // options + // we can automatically expand environment variables in the config entries + // (this option is on by default, you can turn it on/off at any time) + bool IsExpandingEnvVars() const { return m_bExpandEnvVars; } + void SetExpandEnvVars(bool bDoIt = TRUE) { m_bExpandEnvVars = bDoIt; } + // recording of default values + void SetRecordDefaults(bool bDoIt = TRUE) { m_bRecordDefaults = bDoIt; } + bool IsRecordingDefaults() const { return m_bRecordDefaults; } + // does expansion only if needed + wxString ExpandEnvVars(const wxString& str) const + { + wxString tmp; // Required for BC++ + if (IsExpandingEnvVars()) + tmp = wxExpandEnvVars(str); + else + tmp = str; + return tmp; + } + protected: - static bool IsImmutable(const char *szKey) - { return *szKey == APPCONF_IMMUTABLE_PREFIX; } + static bool IsImmutable(const char *szKey) + { return *szKey == wxCONFIG_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 + // when the function returns class PathChanger { public: // ctor/dtor do path changing/restorin - PathChanger(const wxConfig *pContainer, const wxString& strEntry); + PathChanger(const wxConfigBase *pContainer, const wxString& strEntry); ~PathChanger(); // get the key name - const wxString& Name() const { return m_strName; } + 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? + wxConfigBase *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? }; +private: // are we doing automatic environment variable expansion? bool m_bExpandEnvVars; - + // do we record default values? + bool m_bRecordDefaults; + // static variables - static wxConfig *ms_pConfig; + static wxConfigBase *ms_pConfig; + static bool ms_bAutoCreate; }; -#endif //_APPCONF_H +// ---------------------------------------------------------------------------- +// the native wxConfigBase implementation +// ---------------------------------------------------------------------------- + +// under Windows we prefer to use the native implementation +#if defined(__WXMSW__) && wxCONFIG_WIN32_NATIVE + #ifdef __WIN32__ + #define wxConfig wxRegConfig + #else //WIN16 + #define wxConfig wxIniConfig + #endif +#else // either we're under Unix or wish to use files even under Windows + #define wxConfig wxFileConfig +#endif + +#endif //_wxCONFIG_H